繁体   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