英特尔引脚获取功能参数编号

时间:2014-03-03 03:59:03

标签: c++ intel intel-pin

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

难点在于获取函数的所有参数。使用RTN_InsertCall,您可以将函数参数传递给检测代码:

intel pin RTN_InsertCall multiple function arguments

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

如果你没有调试符号,那么它可能非常困难,你可以通过像IDA Pro这样的视觉探索工具获得更好的效果。已经有一些关于自动查找被剥离二进制文件的函数签名的研究(例如ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdf),但是这个主题仍然是最前沿的,无论你使用什么工具,都希望它在某些时候失败,因为问题最终是不可判定的。所有工具只需借助启发式来重建此信息。 Chris Eagle的书(http://www.tinker.tv/download/idaPro_ch12.pdf)免费提供的第12章介绍了IDA这样做的方式。

答案 1 :(得分:1)

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

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

另见:

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

Getting function argument types