Gdb汇编语言指令添加

时间:2014-03-12 01:29:27

标签: assembly x86

我需要理解汇编代码中的add指令:

=> 0x08048bff <+43>:    add    0x14(%esp,%ebx,4),%eax
(gdb) i r
eax            0x1      1
ecx            0x0      0
edx            0x0      0
ebx            0x1      1
esp            0xffffcd70       0xffffcd70
ebp            0xffffcdc8       0xffffcdc8
esi            0x0      0
edi            0x0      0
eip            0x8048bff        0x8048bff <phase_2+43>
eflags         0x202    [ IF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x63     99

我认为0x14(%esp,%ebx,4)的答案是(%ebx*4)+%esp+0x14,但我得到的是0xffffcd82而且我不知道寄存器中的地址是什么。有人可以解释我应该放在%eax中的价值吗?

1 个答案:

答案 0 :(得分:0)

是的,0x14(%esp,%ebx,4)(%ebx*4)+%esp+0x14的语法,你是对的。因此,地址为0xffffcd88。您可以让gdb使用p/x $ebx*4+$esp+0x14为您计算。 add指令将在该地址的内存中获取4字节整数,并将其添加到%eax中已有的内容中。您可以使用例如x/d 0xffffcd88来检查gdb中的内存内容。

PS:您可以切换gdb以使用英特尔语法,使用set disassembly-flavor intel更容易阅读。