gpt4 book ai didi

c - 将四字移动到 %RDI 的操作码

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:49 26 4
gpt4 key购买 nike

假设我有一个 malloc 编辑的变量,我想将它的地址移动到 %rdi,所有这些都是从 C 生成操作码的。它应该寻找一些东西像这样:

unsigned char op_1[] = { 0x48, 0x8B, 0x3C, 0x25 }; //movq
unsigned char *a = malloc(1); // Let's asume a is now at 0x1234567812345678
unsigned char *bytecode = malloc(sizeof(op_1) + sizeof(void *)); // 12 bytes
memcpy(bytecode, op_1, sizeof(op_1)); // 4 bytes
memcpy(bytecode + sizeof(op_1), &a, sizeof(void *)); // 8 bytes

那应该把bytecode的内容留给:48 8B 3C 25 78 56 34 12 78 56 34 12。无论如何,这是无效的字节码,因为(如果我没有误读文档)48 8B 3C 25 后面可以跟 4 个字节作为地址。

我的问题是我应该如何将一个 8 字节长的地址移动到 %rdi

最佳答案

看起来正确的操作码是48 bf。我编译了以下程序集(使用 Intel 语法和 nasm):

BITS 64
mov rdi, 0x1234567812345678

然后我通过 objdump -d -w -Mintel 传递结果:

0000000000000000 <.text>:
0: 48 bf 78 56 34 12 78 56 34 12 movabs rdi,0x1234567812345678

操作码48 bf由REX.W前缀48组成,指定64位操作数,操作码b8 +rd io,以及RDI (111) 的寄存器选择器:

MOV r64, imm64: Move imm64 to r64

关于c - 将四字移动到 %RDI 的操作码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com