[英]Opcode for moving quadword to %RDI
假設我有一個malloc
-ed變量,我想將它的地址移動到%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
:將imm64
移動到r64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.