我看了一下ref.x86asm.net手冊,雖然它有很多信息,但我不能真正從它做出正面或反面,因爲我不知道如何解釋寄存器。如何找出movq%rax,%rdi on osx的字節碼?
我使用的是64位代碼,並有附近的線,使用LLDB顯示我以下:
48 89 E5 MOVQ%RSP,RBP%
我從上面的語句89知道的是移動命令。 rsp是源代碼,rbp是目的地(我在osx上)。
在ref.86asm手冊中,它聲明「89」o具有'r'且op1具有r/m16/32/64。 op2有r16/32/64 我擡頭看了一下數值,但真的不明白這一切應該如何解決。我在其他人的回答中看到了REX的參考資料,但不知道這意味着什麼。
XX 89 XX movq%rax,%rdi;我該怎麼做呢?什麼是XX?
我正在編寫自己的字節碼,並通過編寫c,編譯它,然後在lldb中查找它,找出了大部分的東西。不過,如果我能夠更好地理解字節代碼在引用寄存器時的工作方式,我會節省大量時間。
鏈接問題說明了在英特爾手冊中查找編碼src和dst操作數的ModRM字節的文檔的位置。它實際上是在詢問有關使用/ r字段作爲額外操作碼位的指令,與「mov」不同,但重要的一點是您的第3個字節是ModR/M字節,而第一個字節是REX前綴。 –
第一個「XX」是'48' =>這是「REX」前綴,表示該指令使用'%rax',而不是'%eax'。如果沒有REX'48'前綴,那麼'89 E5'將被解碼爲'movd%esp,%ebp'。 ..第二個「XX」是該ModR/M字節。 – Ped7g
[這篇文章](http://wiki.osdev.org/X86-64_Instruction_Encoding)可能會幫助你。 – fuz