Microsoft Detours如何工作以及如何使用它来获取堆栈跟踪?

我是微软Detours的新手。我已经安装它来跟踪进程所做的系统调用。我运行以下来自网络的命令
syelogd.exe /q C:UsersxxxDesktoplog.txt 
withdll.exe /d:traceapi.dll C:Program FilesGoogleGoogle Talkgoogletalk.exe
我得到了日志文件。问题是我不完全理解这里发生了什么。弯路如何运作?它如何跟踪系统调用? 另外我不知道如何读取log.txt中的输出。这是log.txt中的一行
20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId()
最后,我想获得该过程的堆栈跟踪。我怎么能得到它?     
已邀请:
Detours让你拦截任何功能。它在您指定的地址中放置一个jmp,为您的代码创建一个蹦床。最后,如果要执行此操作,请调用旧函数。 要使用Detours,您必须在要拦截的过程中注入代码。 为了简化此过程,您可以使用Deviare API Hook来完成所有注入人员,您可以使用任何支持COM技术的编程语言(包括.NET,Delphi,C ++,Python等)的拦截应用程序。 下载软件包后,您会在其中找到一些示例。有一个名为DeviareCSharpConsole的控制台,可以拦截显示完整堆栈跟踪信息的任何进程的任何API。 这是Deviare API Hook的工作方式,但如果您想创建一个挂钩另一个进程的应用程序,则需要执行此操作: 应在目标进程中创建代理以拦截所需的API。要拦截这些API,您可以使用Detours,但您必须编写未包含在该库中的IPC工作人员。 如果您需要使用Deviare API Hook在目标进程内编写代码,则可以使用Deviare Custom Hooks。此功能允许您拦截API并异步处理已处理的参数。     
您可能想要查看mhook 2.4,这是非常简洁的代码和BSD许可,而不是绕路(只有32位可用)或easyhook(也就是khm,有点乱码)。适用于x86和x64,处理IP相关代码等。 还有关于它如何在网站上工作的详尽描述。 至于堆栈回溯,您可以使用来自
kernel32
的CaptureStackBackTrace(),或者如果您想获得花哨,请使用来自
dbghelp
的StackWalk64()。     
首先,我强烈建议,如果你想执行API挂钩,我会选择easyhook:http://easyhook.codeplex.com/(开源)。 这是一个非常好的,简单的api-hook框架。 关于如何获取堆栈跟踪,我不记得到底是怎么做的,但请查看WinAPIOverride32:http://jacquelin.potier.free.fr/winapioverride32/(开源)。 他正是这样做的,而且它是开源的。 此外,如果您需要用于研究的跟踪,WinAPIOverride32是一个很好的应用程序,用于研究应用程序的工作方式。 编辑:只需再添加一个应用程序。 http://www.rohitab.com/就像WinAPIOVerride32,但它支持64位,自从我写这个答案后它真的有所改进。我必须指出它在某些情况下它错过了我在WinAPIOverride32中找到的API调用,但它仍然相当不错。不幸的是,该来源尚未发布。 关于api-hook如何工作, 嗯,这是一个很长的解释,我会指向你这篇文章: http://www.codeproject.com/KB/system/hooksys.aspx 它给出了一个很好的解释,说明它是如何在幕后完成的(除了那里写的还有其他方法,但它仍然是一篇非常好的文章)。 希望能帮助到你! :-)     
如果允许您使用除Detours之外的其他东西,您可以安装WinDbg之类的调试器并将其附加到进程以获取callstack。 您还可以尝试其他工具,如Process Monitor和Windows Performance Toolkit,如此处所述。     

要回复问题请先登录注册