Ich weiß ein wenig C und ein bisschen Montage und wollte über Reverse Engineering lernen, also habe ich den Versuch von Hopper Disassembler für Mac heruntergeladen. Ich habe ein Super-Grund C-Programm:Nicht verstehen Hopper Decompiler-Ausgabe
int main() {
int a = 5;
return 0;
}
Und es mit der Option -g kompiliert (weil ich das sah vor und war nicht sicher, ob es von Bedeutung):
gcc -g simple.c
Dann öffnete ich die a.out
Datei im Hopper Disassembler und klickte auf der Pseudo-Code-Taste und es gab mir:
int _main() {
rax = 0x0;
var_4 = 0x0;
var_8 = 0x5;
rsp = rsp + 0x8;
rbp = stack[2047];
return 0x0;
}
die einzige Linie, die ich hier irgendwie verstehen setze eine Variable 0x5
. Ich bin nicht in der Lage zu verstehen, wofür all diese zusätzlichen Zeilen (wie die rsp = rsp + 0x8;
) für solch ein einfaches Programm sind. Wäre jemand bereit, mir das zu erklären?
Auch wenn jemand gute Quellen/Tutorials für ein Intro in Reverse Engineering kennt, wäre das auch sehr hilfreich. Vielen Dank.
Optimierung deaktiviert? –
Oh, ich habe Optimierungen vergessen. Ich schalte das mit einem anderen Compiler-Flag aus, oder? Nur als allgemeine Frage, werden Programme, die mit Optimierungen kompiliert wurden, sehr schwer rückentwickelbar? – Austin
Haben Sie die ABI für Ihr System gelesen? Haben Sie überprüft, was Rax, RSP und Rbp ist? Mai das ist es wert zu lesen https://cs.nyu.edu/courses/fall11/CSCI-GA.2130-001/x64-intro.pdf – 4386427