我在gdb中看到以下说明
jmp *0x804a09c(,%eax,4)
在执行之前,我输入以下命令:
(gdb)p/x *0x804a09c
$40 = 0x8048e0e
(gdb) p $eax
$41 = 6
所以,当我尝试计算地址时,我会跳到,我得到:
(gdb) p/x *0x804a09c + 4*$eax
0x8048e26
然而,跳转实际上转到地址0x8048ead。我的计算有什么问题?
答案 0 :(得分:5)
jmp *0x804a09c(,%eax,4)
表示跳转到存储在此计算结果中的地址0x804a09c(,%eax,4)
,*
整体上不是0x804a09c
。 AT& T语法可能会产生误导,英特尔语法在这里更加明确:
jmp DWORD PTR [eax*4+0x804a09c]
所以它应该是:
(gdb) p/x *(0x804a09c + 4 * $eax)