如何识别来自主可执行文件的 malloc 调用
How to identify malloc calls from main executable
我有一个调用 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 或任何其他外部函数。
感谢您的帮助。
您需要向分析回调中添加有关调用 malloc() 函数的人员的信息。最简单的方法是将 IARG_RETURN_IP
添加到您的 RTN_InsertCall()
调用并相应地更改 Arg1Before。
然后,您可以在 Arg1Before 中的 return IP 上使用 IMG_IsMainExecutable(IMG_FindByAddress(...))
来查看此调用是否来自主可执行文件。
我有一个调用 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 或任何其他外部函数。
感谢您的帮助。
您需要向分析回调中添加有关调用 malloc() 函数的人员的信息。最简单的方法是将 IARG_RETURN_IP
添加到您的 RTN_InsertCall()
调用并相应地更改 Arg1Before。
然后,您可以在 Arg1Before 中的 return IP 上使用 IMG_IsMainExecutable(IMG_FindByAddress(...))
来查看此调用是否来自主可执行文件。