0

我在 gdb 中看到以下说明

jmp    *0x804a09c(,%eax,4)

就在执行之前,我键入以下命令:

(gdb)p/x *0x804a09c
$40 = 0x8048e0e

(gdb) p $eax
$41 = 6

因此,当我尝试计算要跳转到的地址时,我得到:

(gdb) p/x *0x804a09c + 4*$eax
0x8048e26

然而,跳转实际上是到地址 0x8048ead。我的计算有什么问题?

4

1 回答 1

5
jmp    *0x804a09c(,%eax,4)

意思是跳转到存储在这个计算结果中的地址,0x804a09c(,%eax,4)总的来说*不只是0x804a09c。AT&T 语法可能会产生误导,英特尔语法在这里更清楚:

jmp    DWORD PTR [eax*4+0x804a09c]

所以应该是:

(gdb) p/x *(0x804a09c + 4 * $eax)
于 2013-10-23T02:38:08.597 回答