任何获取指令地址的方法? 我试图用标签来说明指令并获取标签的地址,但似乎它只能在GCC编译器中与& &运算符一起使用。 (参考:this article)如果其他编译器呢?获取C/C++指令的地址
这个问题的任何想法?
任何获取指令地址的方法? 我试图用标签来说明指令并获取标签的地址,但似乎它只能在GCC编译器中与& &运算符一起使用。 (参考:this article)如果其他编译器呢?获取C/C++指令的地址
这个问题的任何想法?
我不确定C或C++语言标准是否提到了指令;你可以设想运行一个C程序,编译成由一大群人类奴隶执行(但即使标准符合,这也是不道德的)。你可以用铅笔和纸自己运行一个简单的小程序,你可以使用C解释器等等......
一个优化的C或C++编译器也可以将一些C语句翻译成几个机器指令位于不同的地方(尤其是编译器可以执行内联或克隆功能甚至是基本块,甚至在源代码中没有任何inline
关键字)。
在大多数系统上,你可能需要处理代码(例如在汇编中)一个例程,它返回一个指针值作为其返回地址(即调用者的地址)。
使用GCC(以及兼容的编译器,可能是Clang/LLVM),您可以使用__builtin_return_address和相关的内置函数。
Linux上的Gnu Libc为您提供backtrace(但是当我尝试时,我已经被它激活了)。
注意与-fno-frame-pointer
编译时,这些技巧可能无法正常工作,您也可以考虑定制GCC例如插件或MELT扩展(MELT是一种领域特定的语言,作为GCC的GPLv3插件实现,比使用C编码的插件更容易扩展GCC)。您定制的GCC可能会在适当的地方插入调用仪器功能。
接近指令地址的唯一标准C或C++构造函数指针,我想这不是你的意思。然而,你可以完成你可能用gcc标签值做的大部分工作,而不是指向包含必要代码块的函数的指针。
在C/C++中没有其他选项。
注意:出路在这里箱子..
你能已链接器生成一个包含应用程序对象(功能和数据)的(相对或其他方式)的地址映射文件?你的应用程序可以简单地解析链接器映射文件...
在Linux上,'dladdr'为你做了这个 - 参见'
你为什么问? – 2012-07-17 20:48:15
C++不需要执行指令。 – 2012-07-17 20:48:32
嗨巴西尔,我目前正在对指令/数据监视功能进行一些研究。 – nigong 2012-07-17 20:51:46