2015-08-28 25 views
0

爲什麼下面的代碼在sysenter產生語法錯誤?如何修改它以實現最簡單的內核模式轉換?SYSENTER語法錯誤

.586p 
.model flat,stdcall 
.stack 4096 

.code 
main proc 

    mov eax,18ch  
    mov edx,esp 
    sysenter 

main endp 
end main 
+1

'.586p'手段_「允許的所有指令(包括特權)爲** **奔騰處理器組件。」 _你肯定' sysenter'可以在普通的舊Pentium上使用? – Michael

+0

它不適用於'.386p','.486p'或'.686p'或 – user1232138

+0

您使用什麼彙編語言? –

回答

2

MASM的舊版本可能不支持所有的指令,即使他們可以爲特定的架構是有效的。這是MASM32sysentersysexit的使用情況。您的選擇將是:

  1. 從Visual Studio使用的MASM一個更現代的版本。您可以下載包含現代MASM彙編程序的免費的VS版本的VS。
  2. 使用不同的彙編像NASM支持說明你想
  3. 使用MASM32因爲只是編碼的指令直接字節或單詞。您可以用dw 340fh替換2字節的sysenter指令,並用dw 350fh替換sysexit。對於這些指令操作碼的信息可以發現herehere
+0

我把這個答案作爲一個社區wiki,因爲我覺得原來的問題是一個很好的答案,我想根據一些個人的評論提供一個有用的答案 –