【发布时间】:2013-11-20 08:11:01
【问题描述】:
jmp *0x804a260(,%eax,4)
例如,eax 包含 2。这将需要 2 * 4 并将其添加到 0x804a260 给您 0x804a268,然后会跳转到该位置,对吗?
【问题讨论】:
-
自从我完成汇编程序以来已经很长时间了,但是从内存中 JMP 是跳转命令,所以在我看来它跳转到特定的指针/地址并正确传输 eax 寄存器的值跨度>
jmp *0x804a260(,%eax,4)
例如,eax 包含 2。这将需要 2 * 4 并将其添加到 0x804a260 给您 0x804a268,然后会跳转到该位置,对吗?
【问题讨论】:
jmp *0x804a260(,%eax,4)
上面的 ATT 语法和下面 intel 语法一样:
jmp dword ptr [eax*4 + 0x804a260]
它计算内存位置eax*4 + 0x804a260,从该位置读取一个双字,将其视为地址并跳转到该地址。
使用您的示例,假设 eax 是 2。计算的地址是 0x804a268。此外,假设0x804a268 它包含0xbadf00d。这意味着在执行jmp 之后,程序计数器eip 将尝试在内存位置0xbadf00d 处执行下一条指令。
【讨论】: