c++ - 当前函数地址 - x64

标签 c++ visual-c++

我正在做这个小项目,我想在其中生成应用程序的调用图 - 我不打算做任何复杂的事情,主要是为了好玩/体验。我在 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/

相关文章:

c++ - 如何在 Win32 控制台窗口上设置 CBT Hook ?

c++ - 成员函数声明的奇怪错误

c++ - 我可以在 STL 中禁用异常吗?

visual-c++ - 当网络连接可用时,如何启动我的应用程序?

c++ - 对类模板成员函数的 undefined reference

c++ - 在 C++ 中生成不同的随机数

c++ - g++:如果不使用命名空间std,则不会编译基于范围的for循环;

c++ - 在无序元素上有效的唯一性

c++ - Visual C++ 2010 Express 中的默认 C++0x 模式是什么?

c++ - boost::asio::async_read_until 与自定义匹配条件运算符重载混淆