【发布时间】:2014-08-16 23:51:26
【问题描述】:
我正在创建一个 pin 工具,用于跟踪变量实际需要的位宽。为了跟踪高级别的(例如 C 变量),我想使用可执行文件中构建的调试信息。
我找不到使用 pin API 提取调试信息的方法。
请让我知道是否有任何 pin API 函数调用以提取调试信息。
如果使用 pin 无法实现,有哪些替代方案?
(例如 DynamoRIO)
【问题讨论】:
标签: gcc debug-symbols intel-pin
我正在创建一个 pin 工具,用于跟踪变量实际需要的位宽。为了跟踪高级别的(例如 C 变量),我想使用可执行文件中构建的调试信息。
我找不到使用 pin API 提取调试信息的方法。
请让我知道是否有任何 pin API 函数调用以提取调试信息。
如果使用 pin 无法实现,有哪些替代方案?
(例如 DynamoRIO)
【问题讨论】:
标签: gcc debug-symbols intel-pin
您正在寻找符号信息。遗憾的是,PIN 无法让您直接访问在 C 或 C++ 等高级语言中使用的变量名。如果您需要此信息,您可以在 Windows 中包含 dbghelp,或者在 Linux 中包含 libelf、libdwarf,但这需要两个完全不同的实现。 PIN 用户指南中有一些关于符号的信息,以及访问所调用函数的符号信息的基本功能。
Pin 使用符号对象 (SYM) 提供对函数名称的访问。符号对象仅提供有关应用程序中功能符号的信息。其他类型符号(如数据符号)的信息,必须由工具独立获取。
【讨论】:
libelf 和/或 libdwarf 获取所需的调试符号,然后在使用英特尔 PIN 的具体执行期间将它们映射,考虑运行时偏移。
针对您的后续问题“是否有任何其他 DBI 分析框架(例如 pin)有助于使用调试符号?”
与 pin 不同,DynInst 可以理解变量甚至类型的调试符号。来自他们的教程(http://www.paradyn.org/tutorial/Dyninst.pptx):
bp_image->findVariable(“global1”);
bp_proc->malloc(bp_image->findType(“int”));
【讨论】: