Stack Problem
-
Hallo,
Ich bekomme bei folgendem Code immer einen Segmentation Fault. Außerdem weiß ich nicht genau mit welcher Konvention ich nun genau den Stack ansprechen kann, hab 3 Möglichkeiten mal im Code stehen.
Das ganze muss 32bit konventionell sein, auf Linux wirds kompilliert und At&T!"PUSH %%ebp\n\t" "MOV %%esp,%%ebp\n\t" "MOV 4(%%ebp),%%edx\n\t" "MOV -4(%%ebp),%%edx\n\t" "MOV -0x4(%%ebp),%%edx\n\t" "POP %%ebp\n\t"
Danke im Voraus
Philipp
-
Hallo,
Du solltest zuerst speicher allokieren (sub, esp). Dann kannst du das so:
- MOV -4(%ebp),%edx
oder so
- MOV -0x04(%ebp),%edx
lösen.
viel erfolg, smalltip
-
An welcher Stelle muss ich sub esp machen?
Denn ich habe es schon so probiert:
"PUSH %%ebp\n\t" "MOV %%esp,%%ebp\n\t" "SUB 0x16, %%esp\n\t"
Und gab genau gleichen segmentation fault.
lg
PS
-
Hallo,
dein Problem könnte in der Zeile liegen, wo du Register EBP vom Stack zurüchliest.
Am Anfang machst du nämlichpush %ebp mov %esp, %ebp
Am Ende deiner Funktion müsstest du dann folgendes machen:
mov %ebp, %esp pop %ebp
Gruß,
abc.c
-
Also ich habs jetzt folgendermaßen und es geht immer noch nicht:
"PUSH %%ebp\n\t" "MOV %%esp,%%ebp\n\t" "SUB 0x16, %%esp\n\t" "MOV %%ecx,-0x4(%%ebp)\n\t" "MOV -0x4(%%ebp),%%ecx\n\t" "MOV %%ebp,%%esp\n\t" "POP %%ebp\n\t"
Bitte Hilfe
-
An welcher Zeile tritt der "Segmentation Fault" auf ?
-
Weiß ich nicht....
der linux debugger ist mir irgendwie mysteriös und komm mitdem net zurecht...
-
Ich bräucht dringend ne Antwort...häng seit 3 Tagen an dem problem, welches minimal sein muss.
-
Barsch schrieb:
Weiß ich nicht....
der linux debugger ist mir irgendwie mysteriösDas sind keine guten Vorraussetzungen...
Was willst Du denn eigentlich machen?
Bei ebp-4 liegt gar nichts; der Stack wächst nach unten.
ebp+4 ?
Grüsse
*this
-
Hi
Saublöde frage, at&t oder intel syntacks?
-
AT&T habs eh oben geschrieben...
habs btw inzwischen gelöst...hat nen simples $ gefehlt
-
*gg Schoen. Da sieht man es mal wieder: Assembler kann ja an sich schon schlimm sein, aber die AT&T-Syntax ist nur was fuer echte Masochisten.
-
Hey Nuobu T, was ist an at&t nicht gut oder masochistisch? Du liesst ja auch von links nach rechts, und nicht von rechts nach links (siehe z.b. movl). Wieso findet man at&t syntax schwerer?
Ich finde intel syntax "unlogischer" bzw. masochistischer, weil man immer umdenken muss.
danke für deine/eure erklärung(en)
-
Interessant, dass du dich gerade an der Operandenreihenfolge aufhaengst, obwohl die hier AFAIK bisher noch gar nicht thematisiert wurde.
Mal ganz davon ab, dass einem selbst als Laien die paar verbleibenden Syntaxunterschiede viel eher ins Auge springen duerften.
-
Hi Nobuo T,
Gut ich bezeichne mich nicht als Anfänger, aber auch nicht als Profi. Meine Anwendungsbereiche sind einfach "anders". Die einen Programmieren mit Hardware, die anderen beschäftigen sich damit, um die Internals zu lernen. Ich lernte Assembler nur, damit ich später andere Sprachen einfacher/schneller lernen kann und ausserdem etwas lerne (wie es abgeht, hinter den Kulissen, etc.). Als ich begann wusste ich nicht recht mit welchem Assembler beginnen. Nach diversen Tutorials beschloss ich ein Buch zu kaufen zu Asm (von Wrox, Richard Blum, at&t). Das Buch ist einfach genial. Nach ca. 4-6 versuchen Assembler zu lernen, hatte es R. Blum geschafft, mir die Materie so zu erklären, dass ich es verstehe. Deshalb habe ich auch gewisse Vorlieben für diesen Syntax entwickelt. Bei der Windows Assembler-Programmierung, auch beim Reversen unter Win, fliege ich dauernd auf die Schnautze, weil ich mir nie merken kann (bzw. die parameter verwechsle), wo was hin kommt :-). Bei pop und push ist es simpel. Bei Instruktionen wo zwei oder mehr Parameter vorkommen, bin ich froh eine Intel Reference zur Hand zu haben.
Vielleicht beschäftigte ich mich nicht genug intensiv mit den diversen Assemblern, aber du kannst mir sicher erklären, wieso du das verwenden des at&t Assemblers als Masochistisch bezeichnest?
Danke.
-
MOV 4(%ebp),%edx
<- AT&T, viele komische Zeichen
mov edx,[ebp+4]
<- intel, relativ schnoerkellos
Vor allem vor dem HintergrundSmalltip schrieb:
habs btw inzwischen gelöst...hat nen simples $ gefehlt
kam ich nicht umhin, mir diese Bemerkung zu erlauben.
-
Hallo Nobuo T,
Wir sprechen jetzt aber über persönliche Vorlieben :-). Wenn du A gelernt hast, findest du B komisch. Für eine Person, die B gelernt hat, findet A komisch. Von daher hat sich die Frage für mich erledigt.
Danke.
-
Smalltip schrieb:
Wir sprechen jetzt aber über persönliche Vorlieben :-).
Richtig. Ich dachte, es wäre uA. durch die sarkastische Formulierung, oder spaetestens den "
" klar geworden, dass das nicht als objektive Feststellung zu betrachten ist.
Naja, never mind.
-
Hallo,
obwohl das Thema abgeschlossen ist, möchte ich dennoch meinen Senf dazugeben...
Wenn du A gelernt hast, findest du B komisch. Für eine Person, die B gelernt hat, findet A komisch. Von daher hat sich die Frage für mich erledigt...
Ich denke, es liegt gar nicht an komischen Zeichen oder was man davor gelernt hat oder nicht, sondern an der Philosophie, die dahinter steht. Viele sind praktisch gezwungen (aus beruflichen Gründen?), sich mit der Intel-Syntax abzuhärten, weil die ganze Doku von Intel kommt. Das ist meiner Meinung der einzige Grund, sonst nichts...
Gruß,
abc.c