首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪本地调用

问跟踪本地调用
EN

Stack Overflow用户
提问于 2012-05-05 03:50:48
回答 2查看 117关注 0票数 1

这是与Win32相关的问题,所有代码都是原生的。

我有3个相互依赖的编译为dll库的层:

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

模块1是应用加载模块2。模块2加载模块3。模块3加载我的模块4。

无论何时从模块1进行调用,它都会遍历到模块4的所有层。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-05 04:02:56

您应该能够在感兴趣的STACKFRAME64结构中的相关地址上使用StackWalk64和SymFromAddr。不完全是你想要的,但又想不到任何其他接近的方法。

票数 3
EN

Stack Overflow用户

发布于 2012-05-05 04:03:17

简而言之-可以这么说,但您可能不想这样做:)

冗长的回答- Debug Help Library可以用来生成堆栈跟踪(通过StackWalk64),您可以将其与通过PSAPI检索的模块信息结合使用,以获得您想要的。

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

编辑:如果您可以访问有问题的模块的符号,那么Steve T的答案会更可靠一些。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10455248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档