use*_*165 0 c x86 assembly gdb
我在gdb中看到以下指令
jmp *0x804a09c(,%eax,4)
Run Code Online (Sandbox Code Playgroud)
就在执行之前,我输入以下命令:
(gdb)p/x *0x804a09c
$40 = 0x8048e0e
(gdb) p $eax
$41 = 6
Run Code Online (Sandbox Code Playgroud)
所以,当我尝试计算地址时,我会跳到,我得到:
(gdb) p/x *0x804a09c + 4*$eax
0x8048e26
Run Code Online (Sandbox Code Playgroud)
但是,跳转实际上转到地址0x8048ead.我的计算有什么问题?
小智 5
jmp *0x804a09c(,%eax,4)
Run Code Online (Sandbox Code Playgroud)
意味着要跳转到存储在该计算结果的地址0x804a09c(,%eax,4),在*整体上不是只对0x804a09c.AT&T语法可能会产生误导,英特尔语法在这里更清晰:
jmp DWORD PTR [eax*4+0x804a09c]
Run Code Online (Sandbox Code Playgroud)
所以它应该是:
(gdb) p/x *(0x804a09c + 4 * $eax)
Run Code Online (Sandbox Code Playgroud)