Intel Pin 获取函数参数编号

Posted

技术标签:

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

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

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

intel pin RTN_InsertCall multiple function arguments

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

谢谢!

【问题讨论】:

【参考方案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。

以上是关于Intel Pin 获取函数参数编号的主要内容,如果未能解决你的问题,请参考以下文章

Arduino1.2--数字I/O引脚的操作函数

Intel Pin:测量空仪器开销

Intel 凌动 D525 产品参数Intel 凌动 Z3735F 产品参数

结队项目-代码设计

arduino执行digitalwrite,digitalread,analogread,dela

目标代码重定位和 Intel Pin 交互