【问题标题】:understanding system call dispatcher for windows?了解 Windows 的系统调用调度程序?
【发布时间】:2012-01-27 10:42:28
【问题描述】:

我正在尝试做一些反转来找出幕后的函数调用。

在使用 windbg 进行调试时,我遇到了一个调用,

mov     edx,offset SharedUserData!SystemCallStub
call    dword ptr [edx]

调用会导致下面的代码,

ntdll!KiFastSystemCall:

8bd4        mov     edx,esp
0f34        sysenter

根据this 文档,eax 包含系统调用序号。 eax中的值为11CC。

我试图弄清楚,这个函数实际上是什么将被调用。有谁知道我该如何进一步进行?

【问题讨论】:

    标签: windows assembly reverse-engineering dispatcher dispatch


    【解决方案1】:

    基本上,您需要一种转储 SSDT 的方法 - 在 x32 上,这可以轻松完成。可能最简单的方法是寻找一个实用程序,该实用程序将沿着必要的索引转储 SSDT,您将看到与该特定索引相对应的内容。基本上,eax 会将索引存储在函数表中,因此系统调度程序会在某些时候执行call FunctionTable[eax] 可以找到调用表的最新列表here

    【讨论】:

    • 感谢您的回复。你指的是this吗?
    • 太棒了。但遗憾的是我找不到 11CC 的条目。 :(
    • 您确定以正确的方式解析 eax 中的值吗?另外 - 这是 32 位还是 64 位,因为在 64 中调度机制清洗略有变化。例如。函数表没有函数索引,而是从影子表的开头偏移?在任何情况下,我都建议您首先阅读 Mark Russinovich 的 Windows Internals 最新版本,以获得对调用调度的高级概述,然后在掌握相关知识后深入研究调试器的输出
    • 我在 XP 32bit 上调试。 (我在win7上没有任何成功)。我再调试一下。
    【解决方案2】:

    0x1xxx 范围用于 Win32k 系统调用。请参阅here 获取列表。

    【讨论】:

    • 谢谢。这份清单真的很有帮助。
    猜你喜欢
    • 2017-07-20
    • 2014-03-26
    • 2013-03-16
    • 1970-01-01
    • 2023-03-18
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多