x86_64:绝对JMP到32位地址,适合8个字节

时间:2015-03-23 18:36:29

标签: assembly x86-64

我使用的是Windows 7;架构是x86_64。 我需要从一个地址到另一个地址进行绝对跳转(这些地址之间的距离大于0xFFFFFFFF,所以我不能使用相对跳转)。 我使用过这段代码:

mov rax, 0000000011223344
jmp rax

效果很好;但它的长度是12个字节(太多了 - 8个字节是最大长度)。我提到我的地址总是可以容纳4个字节,所以我更正了代码:

mov eax, 11223344
jmp rax

它的长度是7个字节,它可以很好地工作,直到某些数据在高阶DWORD中进入rax。例如,如果rax包含000007FE 00000000,则它会跳转到000007FE 11223344,而不会跳转到00000000 11223344.因此,应用程序崩溃,因为000007FE 11223344处没有数据。

如何使用32位地址在x86_64中编写绝对跳转代码,总指令长度< = 8字节?

0 个答案:

没有答案