Zusammenarbeit von Funktionen und dem Stack
-
hallo,
ich hab folgenden code
void function(int a, int b) { int array[5]; } main() { function(1,2); printf("This is where the return address points."); }
in dem buch was ich grad lese wurde dieser bsp. gegeben um zu erläutern, was mit dem stack so alles passiert wenn eine funktion aufgerufen wird.
nun habe ich den code als function.c gespeichert und sollte ihn mit
cc -mpreferred-stack-boundary=2 -ggdb function.c -o function compilieren. allerdings kommt bei mir immer folgende fehlermeldung:**-mpreferred-stack-boundary=2 is not between 4 and 12
**im inet konnte ich dazu kaum was finden, bitte daher um hilfe...
-
Deine Architektur wird vermutlich kein Stack-Alignment von 4 zulassen. Vielleicht funktioniert es, wenn du die Architektur auf was älteres setzt (-march=i386). Oder du setzt -mpreferred-stack-boundary=4 (ergibt Alignment 2^4=16). Falls die konkreten Zahlen wichtig sind, musst du dann halt umdenken, essentiell sind sie auf keinen Fall.
-
ja, also das problem habe ich gelöst. allerdings trat jetzt ein neues auf.
und zwar wird das Programm jetzt ausgeführt und auf der konsole erscheinen, Befehle, Register mit adressen und so.
an einer stelle wird in dem buch was ich grad durchnehme, versucht, die return-adresse auszuführen. dazu schreiben die
**(gdb) x/1i $eip
**und dann dann soll da was erscheinen. bei mir steht aber:
Value can't be converted to integer.
ich verstehe aber nicht ganz was damit gemeint ist. kann mir da jmd. weiterhelfen?
-
Versuch mal $rip statt $eip.
-
wieder vielen dank...dumm nur, dass es mir nicht eingefallen ist, denn ich hatte auch zuvor statt &esp ein &rsp hingeschrieben....
gruß