这是与Win32相关的问题,所有代码都是原生的。
我有3个相互依赖的编译为dll库的层:
模块1 ->模块2 ->模块3 ->我的模块4
模块1是应用加载模块2。模块2加载模块3。模块3加载我的模块4。
无论何时从模块1进行调用,它都会遍历到模块4的所有层。
在模块4中,我想以某种方式跟踪它是由模块3从模块2从模块1调用的,例如,通过获取每个模块的HMOUDLE句柄或任何其他唯一标识它们的句柄。我想不出任何Win32应用程序接口允许我执行这样的跟踪,你能给我一些建议吗?
发布于 2012-05-05 04:02:56
您应该能够在感兴趣的STACKFRAME64结构中的相关地址上使用StackWalk64和SymFromAddr。不完全是你想要的,但又想不到任何其他接近的方法。
发布于 2012-05-05 04:03:17
简而言之-可以这么说,但您可能不想这样做:)
冗长的回答- Debug Help Library可以用来生成堆栈跟踪(通过StackWalk64),您可以将其与通过PSAPI检索的模块信息结合使用,以获得您想要的。
基本方法是获取进程中每个模块的基地址和大小,然后查看每个堆栈帧的返回地址,并按范围进行匹配。如果您想要做的只是确定对模块4中的函数的调用是否来自模块1,这将使您到达您想要的位置。
编辑:如果您可以访问有问题的模块的符号,那么Steve T的答案会更可靠一些。
https://stackoverflow.com/questions/10455248
复制相似问题