在x64中呼叫绝对地址

时间:2018-07-12 18:18:07

标签: assembly 64-bit intel

我不知道这一点,我可以像这样做一条指令,它没问题

call ffffdd80d60e4000

但是如何将其转换为字节?我查看了内存中的指令,并显示了类似的东西

0xe8 0x00 0x40 0x0e 0xd6

我唯一能识别的是调用操作码e8。有人可以解释一下其他4个字节是什么,如果我需要调用的地址是DWORD64值,我将如何将这样的指令转换为字节数组?我尝试过,但我不能简单地复制地址的字节并在开头添加0xe8。 抱歉,这可能是一个愚蠢的问题,但是我搜索了书籍和网站,却找不到任何信息。

1 个答案:

答案 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]