我正在做这个小项目,我想在其中生成应用程序的调用图 - 我不打算做任何复杂的事情,主要是为了好玩/体验。我在 x64 平台上工作。
我为自己设定的第一个目标是能够衡量在我的测试应用程序的每个功能上花费的时间。到目前为止,我的策略是使用 __penter()_ 和 __pexit()_ - __penter()_ 是一个将在每个方法或函数开始时调用的函数,相反 __pexit()_ 将在每个方法或函数结束时调用每个方法或函数。
通过这两个函数,我可以记录每个函数调用以及在每个函数中花费的时间。接下来我想做的是获取每个被调用函数的地址。
例如,如果我们考虑以下调用堆栈(非常简化):
main()
....myFunction()
........_penter()
我在 __penter_ 中,我想获取调用函数 myFunction() 的地址。对于非叶函数,我已经找到了一种方法,我只是使用 RtlLookupFunctionEntry .但是,此解决方案似乎不适用于叶函数,因为它们不提供任何展开数据。
我正在考虑的一件事是在调用堆栈中再上一层,在 main() 中,手动解码 CALL 过程 - 这将涉及获取指向调用 的指令的指针em>myFunction().
我想知道你们中是否有人知道在叶函数的情况下如何获取当前函数的地址。我有这种直觉,我目前的方法有点过于复杂。
谢谢,
克莱姆
最佳答案
我相信SymGetSymFromAddr64
, 可能连同 StackWalk64
应该让你(大部分?)得到你想要的。
关于c++ - 当前函数地址 - x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526597/