我想知道有些指令應該只在長模式下有效。
例如 0f 20 55 - mov rbp, cr2.
我參考了 ref.x86asm.net xml 映射.
。
根據xml,這個指令的操作模式是e,意思是:
e適用于64位模式。SMM沒有被考慮在內。63 MOVSXD
現在,如果我看一下反匯編程式,如GCC或capstone,位元組流0f 20 55被解碼為mov ebp, cr2在保護模式下,盡管參考文獻說它不應該在x64以外的模式下使用。
所以我在想,是我沒有理解什么,還是這些反匯編程式有問題?
uj5u.com熱心網友回復:
控制暫存器的移動在保護模式和長模式下都可以使用,使用相同的編碼,但有不同的含義。mov rbp, cr2只在長模式下可用(很明顯,它寫到一個64位的GPR,而這個GPR只存在于長模式下),而mov ebp, cr2只在保護模式下可用(它在長模式下并不是天生不可能,但它的編碼被重新用于mov rbp, cr2,就像push eax的編碼被重新用于表示push rax)。反匯編程式正確地解釋了相同的機器代碼,并根據模式的不同而有所不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/320385.html
標籤:
上一篇:如何在物體框架中選擇不同的行
