目录
1.phase1
(1)gdb bomb
(2)disas phase_1
反汇编phase_1函数
1.首先,我们需要输入一个东西,并且这个东西的地址被传入了%rdi中
2.其次,
,该指令将0x402400处的东西给了%esi寄存器
3.调用strings_not_equal函数,该函数第一个参数存于%rdi,第二个参数存于%rsi
通过名字可以知道,如果两参数不同,就返回true,否则返回0,返回值是存放在%rax中
4.如果eax的值不为0,也就是参数不相同,那么就跳转到explode_bomb函数,也就是炸弹爆炸,如果为0,那就是参数相同,就顺利通关了
所以我们需要输入一个字符串,并且该字符串与0x402400处存放的字符串相同
(3)x/s 0x402400
(39条消息) gdb查看内存_itegel的专栏-CSDN博客,关于x指令的详解
(4)输入字符串
先用q指令退出对当前程序的调试,./bomb运行bomb函数,输入上方查询的字符串,完成
2.phase_2
(1)查看phase_2的代码
先gdb 再解汇编
(2)将栈顶地址当做参数参入read_six_numbers,可以猜测是将六个数字压入栈中
观察汇编程序发现,就是一个for循环,每次把元素乘2,所以是1,2,4,8,16,32
3.phase_3
深入理解计算机系统(CS:APP) - Bomb Lab详解 | viseator's blog
关键就是一个跳转表
4.phase_4
5.phase_5
查看寄存器的内容
x/s输出地址处