2013-10-23 66 views
0

我看到在gdb下面的指令大会跳转指令地址计算

jmp *0x804a09c(,%eax,4) 

只是为了exececution之前我种这些命令:

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

(gdb) p $eax 
$41 = 6 

所以,当我试图计算我将跳转到地址,我得到:

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

但是,实际跳转地址为0x8048ead。我的计算有什么问题?

回答

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

意味着要跳转到存储在该计算0x804a09c(,%eax,4)的结果的地址,*整体上不是只对0x804a09c。 AT & T语法可能会产生误导,英特尔的语法更加清晰的位置:

jmp DWORD PTR [eax*4+0x804a09c] 

所以它应该是:

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