c - 系统调用的这个跳转指令是什么?
问题描述
我想看看如何在 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。通过设计将指令困在内核模式中并被转换为 64 位代码。32 位调试器无法继续调试,调试 API 实际上会失败,直到程序再次返回 32 位代码。
如果您有 64 位调试器,则可以一直调试到系统调用。
推荐阅读
- vb.net - 创建一个事件。此事件应在某个字符串已更改时发生
- javascript - 在javascript中获取文件夹大小
- c# - 使用 write XML 创建 XML 文件并将数据集写入其中
- php - 我无法回显 PHP cURL 响应的第一个索引
- php - 使用标头位置时获取 HTTP ERROR 500
- regex - 如何借助正则表达式在电子邮件中获取特定单词并使用 Outlook VBA 将该单词插入文件名中?
- php - 替换以字符开头的字符串
- azure - 使用具有所有者角色的帐户创建 LoadBalancer 服务时 AKS 授权失败
- python-3.x - D分离python实现
- python - 如何修改 Coupon Collector 问题的 Monte Carlo Simulation 代码