Pin工具:通过RTN_Replace将所有例程包含进入/退出功能

问题描述 投票:0回答:1

使用Pin,我想在每个应用程序函数调用之前和之后调用一些检测函数。我已经读到RTN_InsertCallIPOINT_BEFOREIPOINT_AFTER一起添加一些进入/退出分析功能是不可靠的,因为可能永远不会调用出口。

我的理解是,“正确”的方法是通过RTN_ReplaceSignature替换例程,然后在我的替换函数中,在对原始例程的调用周围添加进入和退出调用,其中使用PIN_CallApplicationFunction

但是,据我所知PIN_CallApplicationFunction要求我预先声明要包装的例程的所有参数,例如,对于malloc,我需要明确地传递一些size_t参数,而对于free,我将传入一个指针,依此类推。

由于我只想包装all函数调用,所以我不知道参数!是否有某种方法可以简单地跳入我替换的原始函数,并传递原始签名的参数?或者也许是更好的方法呢?

感谢您的帮助!

c profiling instrumentation intel-pin call-graph
1个回答
0
投票

IPOINT_BEFORE和IPOINT_AFTER的问题在于IPOINT_AFTER可能会错过一些退出指令。 RTN_Replace函数将需要一个具有与原始签名相同签名的函数指针(因为您不想修改默认代码)。

一个简单的解决方案是使用所有'call'和'ret'指令。使用INS_Rtn函数找出例程名称。这样,您就可以测试all函数,而不必为每个函数签名烦恼。

© www.soinside.com 2019 - 2024. All rights reserved.