如何从主可执行文件中识别malloc调用

时间:2016-11-25 21:48:28

标签: intel-pin

我有一个调用malloc的简单程序,我正在尝试开发一个pintool来从主可执行文件中捕获对malloc的直接调用。

使用SimpleExamples中的malloctrace.cpp(随SDK提供):

VOID Image(IMG img, VOID *v)
{
    RTN mallocRtn = RTN_FindByName(img, MALLOC);
    if (RTN_Valid(mallocRtn))
    {
        RTN_Open(mallocRtn);
        RTN_InsertCall(mallocRtn, IPOINT_BEFORE,(AFUNPTR)Arg1Before, IARG_ADDRINT, MALLOC, IARG_G_ARG0_CALLEE, IARG_END);
        RTN_Close(mallocRtn);
    }
}

我正在捕捉许多malloc调用,这些调用都是由我自己的代码或它使用的库来定位的。

使用objdump,我看到对malloc的调用:

callq  4003b8 <malloc@plt>

以malloc @ plt开头。 浏览我的主可执行文件中的例程我确实看到了.plt例程,但我不知道它是否属于malloc或任何其他外部函数。

感谢您的协助。

1 个答案:

答案 0 :(得分:0)

您需要向分析回调添加有关谁调用malloc()函数的信息。最简单的方法是在IARG_RETURN_IP来电中添加RTN_InsertCall()并相应更改Arg1Before。

然后,您可以在Arg1Before中的返回IP上使用IMG_IsMainExecutable(IMG_FindByAddress(...))来查看此调用是否来自主可执行文件。