[英]What is this jump instruction for a syscall?
我想看看如何在 x64 Windows 系統上的 x86 下進行系統調用,因為我已經熟悉如何在 x64 上完成。
無論如何,當我遇到這個我不明白的jmp
指令時,我是按指令進行的。 這是我觀察到的調用堆棧:
ntdll.dll!_Wow64SystemServiceCall@0()
ntdll.dll!_NtReadVirtualMemory@20()
KernelBase.dll!ReadProcessMemory()
然后,有一個jmp dword ptr [_Wow64Transition]
。 這就是我感到困惑的地方。 在跳轉之后,有一條指令jmp 0033::77CE7009
。 出於某種原因,單步執行此指令將回到ntdll.dll!_NtReadVirtualMemory@20()
的末尾。
這個跳遠是什么,它有什么作用?
您嘗試使用 32 位調試器調試 seg:off jmp。 指令被設計成被困在 kernel 模式中,並被轉換成 64 位代碼。 32 位調試器無法繼續調試,調試 API 實際上會失敗,直到程序再次返回 32 位代碼。
如果您有 64 位調試器,則可以一直調試到系統調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.