英特爾軟件開發maunal,調用指令支持:如何使用64位調用門
call r/m64
call m16:32
call m16:64
在用戶代碼,如果我要轉移通過64位調用門與響0選擇器47. 如何使用intel語法在彙編中編寫指令?
測試:
call far [mem]; wrong
call qword ptr [mem]; wrong
內存內容:
[mem + 0]: qword 0x00
[mem + 8]: word 47
英特爾軟件開發maunal,調用指令支持:如何使用64位調用門
call r/m64
call m16:32
call m16:64
在用戶代碼,如果我要轉移通過64位調用門與響0選擇器47. 如何使用intel語法在彙編中編寫指令?
測試:
call far [mem]; wrong
call qword ptr [mem]; wrong
內存內容:
[mem + 0]: qword 0x00
[mem + 8]: word 47
正確的關鍵字使用是fword ptr
。這將產生m16:32
變體,但是因爲對於調用門而言,偏移量將被忽略,並且將從門上載入全部64位的RIP
,這將很好。但是,如果要保留m16:64
指針,則必須手動包含前綴REX
,如rex64 call fword ptr [mem]
或rex.w call fword ptr [mem]
。
順便說一句,'call far [mem]'的意思是什麼,我發現它不等於'call fword ptr [mem]'。 –
從生成的機器代碼判斷,「遠」似乎被默默忽略,並在這種情況下產生近旁呼叫。 – Jester
這是一個遠射,但'tword ptr'用於解決10個字節的結構(基本上是80位長的double)。另外一些彙編程序使用'lcall'進行長時間通話。 –
我以爲只有中斷和系統調用可以轉移到零環?畢竟,如果簡單的調用可以改變它,它並不是真正的安全功能。 – EOF
不,調用門是從環x(x> 0)輸入環0的選項。 –