我无法弄清楚这一点,我可以做出这样的指令,它工作没问题
call ffffdd80d60e4000
但我该如何将其转换为字节呢?我查看了内存中的指令并显示了奇怪的东西,例如
0xe8 0x00 0x40 0x0e 0xd6
我唯一能识别的是 e8,它是调用操作码。有人可以解释一下其他 4 个字节是什么,以及如果我需要调用的地址是 DWORD64 值,我将如何将这样的指令转换为字节数组?我尝试过,但不能简单地复制地址的字节并在开头添加 0xe8 。
很抱歉,如果这可能是一个愚蠢的问题,但我搜索了书籍和网站,但找不到任何相关内容。
正如 Jester 所说,通常调用使用相对地址。如果你想使用绝对地址,你可以将目的地放入寄存器中,如下所示:
48 b8 00 40 0e d6 mov rax, 0xffffdd80d60e4000
80 dd ff ff
ff d0 call rax
您还可以调用内存中的地址。例如,如果目标地址在内存中的 [rsp+8] 处,则
ff 54 24 08 call [rsp+8]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)