我在gdb中看到如下指令
jmp *0x804a09c(,%eax,4)
就在执行之前,我输入了这些命令:
(gdb)p/x *0x804a09c
$40 = 0x8048e0e
(gdb) p $eax
$41 = 6
所以当我尝试计算我将跳转到的地址时,我得到:
(gdb) p/x *0x804a09c + 4*$eax
0x8048e26
但是,跳转实际上转到了地址 0x8048ead。我的计算有什么问题?
最佳答案
jmp *0x804a09c(,%eax,4)
表示跳转到本次计算结果存放的地址0x804a09c(,%eax,4)
,*
整体上不只是0x804a09c
。 AT&T 语法可能会产生误导,Intel 语法在这里更清晰:
jmp DWORD PTR [eax*4+0x804a09c]
应该是:
(gdb) p/x *(0x804a09c + 4 * $eax)
关于c - 汇编跳转指令地址计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531387/