[英]Assembly Jump Instruction Address Calculation
我在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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.