【问题标题】:Intel Pin Get Function Argument NumberIntel Pin 获取函数参数编号
【发布时间】:2014-04-04 00:12:40
【问题描述】:

我正在尝试使用 Pin 编写函数调用跟踪器。它可以打印每个函数调用以及每个参数的值。

一个困难是获取一个函数的所有参数。使用 RTN_InsertCall,您可以将函数参数传递给您的检测代码:

intel pin RTN_InsertCall multiple function arguments

但是,您需要知道当前例程的参数数量。有没有办法做到这一点?

谢谢!

【问题讨论】:

    标签: c++ intel intel-pin


    【解决方案1】:

    您应该提供有关您是否有相关二进制文件的调试符号的关键信息。如果您确实有可用的调试符号,那就轻而易举了。有用于解析这些的标准库。

    如果您没有调试符号,那么这可能会非常困难,而且您基本上最好使用 IDA Pro 之类的可视化探索工具。已经有一些关于自动查找剥离二进制文件的函数签名的研究(例如ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdf),但该主题仍然是最前沿的,无论您使用什么工具,都希望它在某个时候失败,因为问题最终无法确定,所有工具只需诉诸启发式方法来重建此信息。 Chris Eagle 的书 (http://www.tinker.tv/download/idaPro_ch12.pdf) 中免费提供的第 12 章介绍了 IDA 执行此操作的方式。

    【讨论】:

      【解决方案2】:

      在 C 中,类型信息不保存在二进制文件中。

      在 C++ 中,您可以尝试使用函数的错位名称来确定参数的类型。但是,名称修饰不是标准的,并且通常在不同的编译器之间不兼容。显然,这里没有任何保证。

      另见:

      Is it possible to get the signature of a function in a shared library programatically?

      Getting function argument types

      【讨论】:

      • 谢谢。我希望 Pin 提供一些可以做我想做的事情的 API。
      猜你喜欢
      • 2011-12-15
      • 2015-06-25
      • 2016-06-26
      • 2018-04-22
      • 2014-08-04
      • 2019-03-12
      • 2018-06-12
      • 2018-04-03
      • 1970-01-01
      相关资源
      最近更新 更多