【问题标题】:Using the debug information of a executable in a pin tool在 pin 工具中使用可执行文件的调试信息
【发布时间】:2014-08-16 23:51:26
【问题描述】:

我正在创建一个 pin 工具,用于跟踪变量实际需要的位宽。为了跟踪高级别的(例如 C 变量),我想使用可执行文件中构建的调试信息。
我找不到使用 pin API 提取调试信息的方法。
请让我知道是否有任何 pin API 函数调用以提取调试信息。 如果使用 pin 无法实现,有哪些替代方案?
(例如 DynamoRIO)

【问题讨论】:

    标签: gcc debug-symbols intel-pin


    【解决方案1】:

    您正在寻找符号信息。遗憾的是,PIN 无法让您直接访问在 C 或 C++ 等高级语言中使用的变量名。如果您需要此信息,您可以在 Windows 中包含 dbghelp,或者在 Linux 中包含 libelflibdwarf,但这需要两个完全不同的实现。 PIN 用户指南中有一些关于符号的信息,以及访问所调用函数的符号信息的基本功能。

    Pin 使用符号对象 (SYM) 提供对函数名称的访问。符号对象仅提供有关应用程序中功能符号的信息。其他类型符号(如数据符号)的信息,必须由工具独立获取。

    Pin 2.13 User Guide - Symbols

    【讨论】:

    • 感谢您的回答,是否有任何其他 DBI 分析框架(例如 pin)有助于使用调试符号?是否可以使用 DynamoRIO 完成任务?
    • 尽管我对 DynamoRIO 没有任何实际操作经验,但我想说 PIN 是 DBI 框架的简单选择。如果您刚开始使用 DBI,我强烈建议您坚持使用 PIN,这将为您节省数月的开发时间。您可以使用 libelf 和/或 libdwarf 获取所需的调试符号,然后在使用英特尔 PIN 的具体执行期间将它们映射,考虑运行时偏移。
    【解决方案2】:

    针对您的后续问题“是否有任何其他 DBI 分析框架(例如 pin)有助于使用调试符号?”

    与 pin 不同,DynInst 可以理解变量甚至类型的调试符号。来自他们的教程(http://www.paradyn.org/tutorial/Dyninst.pptx):

    bp_image->findVariable(“global1”);
    bp_proc->malloc(bp_image->findType(“int”));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2022-07-16
      相关资源
      最近更新 更多