在 x64 中调用绝对地址
Call absolute address in x64
我想不通,我可以这样写指令,没问题
call ffffdd80d60e4000
但是我该如何将其转换为字节呢?我查看了内存中的指令并显示了奇怪的东西,比如
0xe8 0x00 0x40 0x0e 0xd6
我唯一能识别的是 e8,它是调用操作码。有人可以解释其他 4 个字节是什么吗?如果我需要调用的地址是 DWORD64 值,我将如何将这样的指令转换为字节数组?我试过了,但我不能简单地复制地址的字节并在开头添加 0xe8。
对不起,如果这可能是一个愚蠢的问题,但我搜索了书籍和网站,但找不到任何相关信息。
正如杰斯特所说,通常调用使用相对地址。如果你想使用绝对地址,你可以像这样把目的地放在一个寄存器中:
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]
我想不通,我可以这样写指令,没问题
call ffffdd80d60e4000
但是我该如何将其转换为字节呢?我查看了内存中的指令并显示了奇怪的东西,比如
0xe8 0x00 0x40 0x0e 0xd6
我唯一能识别的是 e8,它是调用操作码。有人可以解释其他 4 个字节是什么吗?如果我需要调用的地址是 DWORD64 值,我将如何将这样的指令转换为字节数组?我试过了,但我不能简单地复制地址的字节并在开头添加 0xe8。 对不起,如果这可能是一个愚蠢的问题,但我搜索了书籍和网站,但找不到任何相关信息。
正如杰斯特所说,通常调用使用相对地址。如果你想使用绝对地址,你可以像这样把目的地放在一个寄存器中:
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]