跟踪本机调用

Tracing Native Calls

本文关键字:调用 本机 跟踪      更新时间:2023-10-16

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

我有 3 层编译为 dll 库,彼此依赖:

[模块 1] -> [模块 2] -> [

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

模块

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

每当从模块 1 进行调用时,它都会经过模块 4 之前的所有层。

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

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

简短的回答 - 有点,但你可能不想这样做:)

冗长的答案 - 调试帮助库可用于生成堆栈跟踪(通过 StackWalk64),您可以将其与通过 PSAPI 检索的模块信息一起使用,以获取所需的内容。

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

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