Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 gdb 中看到以下说明
jmp *0x804a09c(,%eax,4)
就在执行之前,我键入以下命令:
(gdb)p/x *0x804a09c $40 = 0x8048e0e (gdb) p $eax $41 = 6
因此,当我尝试计算要跳转到的地址时,我得到:
(gdb) p/x *0x804a09c + 4*$eax 0x8048e26
然而,跳转实际上是到地址 0x8048ead。我的计算有什么问题?
意思是跳转到存储在这个计算结果中的地址,0x804a09c(,%eax,4)总的来说*不只是0x804a09c。AT&T 语法可能会产生误导,英特尔语法在这里更清楚:
0x804a09c(,%eax,4)
*
0x804a09c
jmp DWORD PTR [eax*4+0x804a09c]
所以应该是:
(gdb) p/x *(0x804a09c + 4 * $eax)