1
40087e: 48 8b 05 cb 01 20 00 mov 0x2001cb(%rip),%rax # 600a50 <__CTOR_LIST__+0x8>
以上是來自objdump的輸出。如何獲得有關裝配的更多詳細信息?
但是我想知道其中48 8b 05 cb 01 20 00
部分代表mov
,0x2001cb(%rip)
...
也就是說,有沒有打破機器代碼的工具嗎?
40087e: 48 8b 05 cb 01 20 00 mov 0x2001cb(%rip),%rax # 600a50 <__CTOR_LIST__+0x8>
以上是來自objdump的輸出。如何獲得有關裝配的更多詳細信息?
但是我想知道其中48 8b 05 cb 01 20 00
部分代表mov
,0x2001cb(%rip)
...
也就是說,有沒有打破機器代碼的工具嗎?
48 8B 05 CB 01 20 00 MOV 0x2001cb(%RIP),%RAX
48是REX prefix
是通常用於指示指令操作數(寄存器或存儲器位置)應爲64位,而不是32位(即RAX,而不是EAX)。 REX前綴也用於操作R8至R15寄存器的指令。
8b
是MOV指令opcode
。其他值用於其他指令。例如,2b將意味着SUB和8d將意味着LEA。
05
是ModR/M
字節,在64位模式表示RIP+disp32
存儲器尋址(而不是隻在disp32
32位模式)。這在字節的Mod
和R/M
位字段中編碼。該字節的Reg
位字段還指示將RAX寄存器用於其他操作數。
cb, 01, 20 and 00
構成內存操作數的disp32
部分,此位移等於2001CBH
。我們到達MOV RAX, [RIP+2001CBH]
。
有幾種方法的指令進行解碼:
ndisasm
與NASM
不要麻煩回答這個問題。 new_perl會在你讓他花費時間解決他的問題之後刪除問題!謝謝,萌芽! – dontGoPlastic