首页 > 解决方案 > 系统调用的这个跳转指令是什么?

问题描述

我想看看如何在 x64 Windows 系统上的 x86 下进行系统调用,因为我已经熟悉它是如何在 x64 上完成的。

无论如何,当我遇到这个jmp我不明白的指令时,我正在逐条指导。这是我观察到的调用堆栈:

ntdll.dll!_Wow64SystemServiceCall@0()
ntdll.dll!_NtReadVirtualMemory@20()
KernelBase.dll!ReadProcessMemory()

然后,有一个jmp dword ptr [_Wow64Transition]. 这就是我感到困惑的地方。在跳转之后,有一个指令jmp 0033::77CE7009ntdll.dll!_NtReadVirtualMemory@20()出于某种原因,进入该指令将需要回到末尾。

这个跳远是什么,它有什么作用?

标签: cwinapiassemblysystem-callsmemory-segmentation

解决方案


您尝试使用 32 位调试器调试 seg:off jmp。通过设计将指令困在内核模式中并被转换为 64 位代码。32 位调试器无法继续调试,调试 API 实际上会失败,直到程序再次返回 32 位代码。

如果您有 64 位调试器,则可以一直调试到系统调用。


推荐阅读