2012-05-04 61 views
1

这是Win32相关的问题,所有的代码都是原生的。追踪本地电话

我有3层编译为视对方DLL库:

[模块1] - > [模块2] - > [模块3] - > [我的模块4]

模块1是一个应用程序加载模块2.模块2的负载模块3.模块3装入我的模块4.

每当一个呼叫被从模块1由它通过所有层到模块4

在模块4 I想要以某种方式跟踪它从Module的Module 2中的Module 3调用1通过获取例如HMOUDLE句柄为他们每个人或任何其他唯一标识他们。我想不出任何Win32 API允许我执行这样的跟踪,你能建议吗?

回答

2

简短的回答 - 样的,但是你可能不希望这样做:)

稍长的答案 - 该Debug Help Library可以用来生成一个堆栈跟踪(通过StackWalk64),其中你可以在演唱会使用通过PSAPI获取模块信息来获得你想要的。

基本的方法是获取您的进程中每个模块的基址和大小,然后查看每个堆栈帧的返回地址,并按范围进行匹配。如果你想要做的就是确定模块4中的函数调用是否来自模块1内,那么这将使你得到你想要的位置。

编辑:如果您可以访问相关模块的符号,那么Steve T的答案会更强大一点。