5

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

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

intel pin RTN_InsertCall 多个函数参数

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

谢谢!

4

2 回答 2

2

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

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

于 2014-07-13T16:49:21.900 回答
1

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

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

也可以看看:

是否可以通过编程方式获取共享库中函数的签名?

获取函数参数类型

于 2014-03-17T09:11:50.433 回答