【发布时间】:2025-12-14 00:10:01
【问题描述】:
我一直在寻找在 Windows 上实时获取系统调用的方法。我已经在 * 和其他地方查看了几篇文章,但找不到任何容易理解的内容。我看过 procmon 但它的输出非常不稳定。两个系统上的相同二进制文件生成了不同数量的条目。也许我缺乏做这些事情的先决条件。欢迎任何帮助/建议。
我之前看过这些链接:
- System Calls in windows & Native API?
- http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035
- http://technet.microsoft.com/en-us/sysinternals/bb897447.aspx
问候
【问题讨论】:
-
你到底想做什么?您想调用 NT 子系统,还是监视活动?如果是前者,那么您提供的三个链接是一个很好的起点。如果是后者,那么我会建议procmon。我希望它在不同的系统上提供不同的输出,甚至在同一系统上多次运行同一程序时提供不同的输出,具体取决于系统的状态和运行它时的程序。
-
其实我想监控/记录系统调用。 Procmon 是出色的工具,但正如您所提到的,它的输出再次不稳定。我想知道为什么它不稳定,我怎样才能让它稳定。此外,为了让图片更清晰,我正在尝试将 printf、getche 等 C 函数映射到 Windows 生成的系统调用。
-
要真正监控系统调用,您需要在内核模式下修补系统调用条目表。这是危险和困难的,尤其是在 64 位版本的 Windows 中,以阻止 ISV 这样做。像 printf 这样的 C 函数在用户模式下处理,并且在它们到达输出之前不涉及系统调用,这可能是对 CSRSS 的进程外 LPC 调用或文件写入,具体取决于是否连接了真正的控制台。这将更有帮助知道你想要完成什么。
标签: windows winapi system-calls