Я знаю немного C и немного сборки и хотел начать изучать обратную инженерию, поэтому я загрузил пробную версию Hopper Disassembler для Mac. Я создал супер основную программу C:Неиспользуемый вывод декомпилятора бункера
int main() {
int a = 5;
return 0;
}
И скомпилирован с флагом -g (потому что я видел это раньше, и не был уверен, если это имеет значение):
gcc -g simple.c
Тогда я открыл a.out
файл в Хоппер Disassembler и нажал на кнопку псевдокоде, и он дал мне:
int _main() {
rax = 0x0;
var_4 = 0x0;
var_8 = 0x5;
rsp = rsp + 0x8;
rbp = stack[2047];
return 0x0;
}
Единственная линия я вроде понимаю здесь устанавливает переменную 0x5
, Я не могу понять, для чего предназначены все эти дополнительные строки (например, rsp = rsp + 0x8;
), для такой простой программы. Кто-нибудь захочет объяснить это мне?
Также, если кто-нибудь знает о хороших источниках/учебниках для введения в обратную инженерию, что тоже очень полезно. Благодарю.
Оптимизация отключена? –
О, я забыл об оптимизации. Я отключил это с каким-то другим флагом компилятора? Как общий вопрос, сделать программы, которые были скомпилированы с оптимизациями, очень сложно перестроить? – Austin
Вы читали ABI для своей системы? Вы проверили, какие rax, rsp и rbp? Возможно, стоит прочитать https://cs.nyu.edu/courses/fall11/CSCI-GA.2130-001/x64-intro.pdf – 4386427