簡體   English   中英

用於將四字移動到%RDI的操作碼

[英]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和用於RDI111 )的寄存器選擇器:

MOV r64, imm64 :將imm64移動到r64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM