1

我有一个调用 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 或任何其他外部函数。

感谢您的帮助。

4

1 回答 1

0

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

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

于 2016-11-27T11:59:35.723 回答