【问题标题】:Getting the last called system call获取最后调用的系统调用
【发布时间】:2011-01-08 12:59:18
【问题描述】:

有人知道是否有办法获取特定线程进行的最后一次系统调用
(在 C++/Windows 中)?
谢谢:)

【问题讨论】:

  • 系统调用?在 Windows 中?
  • 您能否更具体地说明“系统调用”的含义?
  • 诸如“等待”、“阅读”、“打开”之类的东西。我正在查看“Process Hacker”的代码,他们使用“NtQueryInformationThread”获得了最后一个系统调用。它的问题是 1. 微软不推荐使用它:msdn.microsoft.com/en-us/library/ms684283%28v=vs.85%29.aspx
  • 和 2. 除了 Pending IO 状态之外,我找不到有关如何使用它来获取最后一次通话或其他任何信息的信息...
  • @Idov:得知名称中带有“Hacker”的程序使用了 Microsoft 不鼓励您使用的功能,您是否感到惊讶?此类功能没有标准用例。超过 99.9% 的应用程序不需要这些信息,因此没有方便的内置机制来访问它。您正在编写一个类似于 Process Hacker 的程序,并且您只需要接受当操作系统的内部结构发生更改时它可能无法正常工作,或者有更好的方法来做您想做的任何事情.

标签: c++ windows system-calls


【解决方案1】:

如果您可以定义一组系统调用(我假设它们都可以很好地映射到由 kernel32.dll 导出的 Win32 API - 例如 CreateFile、WriteFile、WaitForSingleObject 等),您可以使用 Detours 库来捕获DLL 调用并使用它来监控“最后”调用。

http://research.microsoft.com/en-us/projects/detours/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2014-12-25
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2012-02-21
    相关资源
    最近更新 更多