簡體   English   中英

系統調用的這個跳轉指令是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM