这是与Win32相关的问题,所有代码都是原生的。
我有3层编译为dll库,相互依赖:
[模块1] - > [模块2] - > [模块3] - > [我的模块4]
模块1是应用程序加载模块2.模块2加载模块3.模块3加载我的模块4.
每当从模块1进行调用时,它都会遍历所有层到模块4。
在模块4中,我想通过获取每个模块的HMOUDLE句柄或唯一识别它们的任何其他东西,以某种方式跟踪模块3从模块1中的模块3调用它。我不能想到任何允许我执行此类跟踪的Win32 API,您能建议吗?
答案 0 :(得分:3)
您应该可以在StackWalk64感兴趣的SymFromAddr结构的相关地址上使用STACKFRAME64和{{3}}。不是你想要的,但想不出任何其他方式来接近。
答案 1 :(得分:2)
简短回答 - 有点,但你可能不想这样做:)
Longish回答 - Debug Help Library可用于生成堆栈跟踪(通过StackWalk64),您可以将其与通过PSAPI检索到的模块信息一起使用,以获得您想要的内容。
基本方法是获取进程中每个模块的基址和大小,然后查看每个堆栈帧的返回地址,按范围匹配。如果您只想确定模块4中对函数的调用是否来自模块1,那么这将使您获得所需的位置。
编辑:如果您可以访问相关模块的符号,那么Steve T的答案会更加强大。