У меня есть простая программа, которая вызывает malloc, и я пытаюсь разработать pintool, чтобы поймать этот прямой вызов malloc из основного исполняемого файла.Как определить вызовы malloc из основного исполняемого файла
Использование malloctrace.cpp из SimpleExamples (поставляется с 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);
}
}
Я ловлю много звонков таНоса, как ориентированный на моем собственном коде или библиотеки, используемой ею.
Использование objdump, я вижу вызов таНос:
callq 4003b8 <[email protected]>
, который начинается с таНос @ PLT. Просмотр подпрограмм в моем основном исполняемом файле. Я вижу процедуру .plt, но не могу сказать, принадлежит ли она malloc или любой другой внешней функции.
Я ценю вашу помощь.
В чем именно ваш вопрос? Если это 'Does malloc @ plt принадлежит реализации malloc ?, ответ - нет. 'malloc @ plt' принадлежит бинарному вызову. Он ** делает ** вызов реализации malloc из libc, как только цель будет разрешена компоновщиком времени выполнения. – Neitsa
Мой вопрос: как я могу поймать вызовы malloc напрямую, исходящие из моего кода? (в отличие от всех вызовов malloc, в которых многие из них поступали из кода помощи, такого как libc и т. д.) – Jaaz