Assembly x64中的呼叫绝对地址

Assembly x64中的呼叫绝对地址,assembly,64-bit,intel,Assembly,64 Bit,Intel,我想不出来,我可以做一个这样的指令,它没有问题 call ffffdd80d60e4000 但是我该如何把它转换成字节呢?我看了一下记忆中的指令,显示了一些奇怪的东西,比如 0xe8 0x00 0x40 0x0e 0xd6 我唯一能识别的是e8,它是呼叫操作码。如果我需要调用的地址是DWORD64值,有人能解释一下其他4个字节是什么,以及我如何将这样的指令转换成字节数组吗?我试过了,但我不能简单地复制地址的字节并在开始处添加0xe8。 抱歉,如果这可能是一个愚蠢的问题,但我在书籍和网站上搜索

我想不出来,我可以做一个这样的指令,它没有问题

call ffffdd80d60e4000
但是我该如何把它转换成字节呢?我看了一下记忆中的指令,显示了一些奇怪的东西,比如

0xe8 0x00 0x40 0x0e 0xd6
我唯一能识别的是e8,它是呼叫操作码。如果我需要调用的地址是DWORD64值,有人能解释一下其他4个字节是什么,以及我如何将这样的指令转换成字节数组吗?我试过了,但我不能简单地复制地址的字节并在开始处添加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]

是相对地址。您需要知道当前(实际上是以下)指令的地址,并计算与目标的差异。另请参见《基本体系结构手册》中的第7.3.8.1节“无条件传输说明”。嗯,好的,谢谢。这很奇怪,因为我在看x64 asm文档时,它说e8是对绝对地址的调用。我想我可以计算一下。你看起来错了。手册上说:E8 cd CALL rel32 CALL near,relative,displacement relative to next instruction.relative:使用NASM中的
target-($+5)
手动编码
CALL
指令:。是的,我以前想把它放在寄存器中,但它对我的目的不起作用,因为这条指令将每隔一秒或更短的时间调用一次,寄存器值将被覆盖。