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 获取函数参数编号的主要内容,如果未能解决你的问题,请参考以下文章
Intel 凌动 D525 产品参数Intel 凌动 Z3735F 产品参数