objdump和gdb吐出不同的汇编结果

时间:2014-05-06 09:59:19

标签: gdb executable objdump

enter image description here

您需要保存图像才能阅读图像中的说明

好吧,这就是问题所在。

我正在使用炸弹,只是因为杀戮时间而且我遇到了问题

objdump和gdb的不同汇编代码生成。

我的笔记本电脑正在运行64位Ubuntu 14.04 LTS和

我已经安装了32位glibc来处理bomblab。(因为它是用32位环境编译的)

好吧,首先这些符号没有显示,我真的不知道gdb正在吐出什么。

有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:1)

当您在phase_2处放置断点时,gdb修补正在运行的图像,将int3指令放在0x8048b50处,就在phase_2的函数序言之后完成了堆栈框架的设置。而不是

0x8048b50: 8b  mov edx,DWORD PTR [ebp+0x8]
0x8048b51: 55
0x8048b52: 08

你现在有

0x8048b50: cc  int3
0x8048b51: 55  push ebp
0x8048b52: 08  first byte of an 'or' instruction

这就是gdb正在显示的内容。最终事情会重新同步,disassemble命令会开始显示正确的指令序列。

显示内容的差异不会影响程序的正确执行;在从断点开始之前,gdb将把该8b字节放回图像中,或者它将合成执行mov指令,然后继续执行0x8048b53。