2013-10-23 53 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)