我不知道这一点,我可以像这样做一条指令,它没问题
call ffffdd80d60e4000
但是如何将其转换为字节?我查看了内存中的指令,并显示了类似的东西
0xe8 0x00 0x40 0x0e 0xd6
我唯一能识别的是调用操作码e8。有人可以解释一下其他4个字节是什么,如果我需要调用的地址是DWORD64值,我将如何将这样的指令转换为字节数组?我尝试过,但我不能简单地复制地址的字节并在开头添加0xe8。 抱歉,这可能是一个愚蠢的问题,但是我搜索了书籍和网站,却找不到任何信息。
答案 0 :(得分:2)
正如杰斯特所说,通常呼叫使用相对地址。如果要使用绝对地址,可以将目标地址放在这样的寄存器中:
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]