Печать программы и названия функции каждой инструкции с помощью инструмента Pin - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в написании инструмента для инструментов в программе.В настоящее время я застрял с распечаткой названия программы (изображение? Я бы сказал) и функции, которой принадлежит инструкция.Например, у меня есть программа foo.cpp и имя функции func (), что простое дополнение и cout.Затем, когда я использую инструмент закрепления, я хочу напечатать, как показано ниже

0xAddress foo (или lib64 / ld-linux ... и т. Д.) Func disassembled_instruction (например, move и т. Д.)

Iможно получить адрес и разобранные инструкции, но не название программы и функции.

Может кто-нибудь подсказать мне, возможно ли это и как?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Имя программы

Чтобы получить полный путь к основному двоичному файлу (отсюда и название программы), вы должны установить инструментальную подпрограмму для IMG (изображение) в вашем main(), используя IMG_AddInstrumentFunction .

В обратном вызове анализа (передано IMG_AddInstrumentFunction) используйте функцию IMG_IsMainExecutable , которая просто возвращает логическое значение, указывающее, является ли текущее загруженное изображение основным двоичным файлом (true) или нет.

Если прежняя функция (IMG_IsMainExecutable) возвращает true, вы можете вызвать IMG_Name , чтобы получить ее полный путь.

Дляполный пример см. Обнаружение загрузки и выгрузки изображений (Image Instrumentation) пример в руководстве.

Имя функции

Использование PIN_InitSymbols в вашем главном, перед вызовом PIN_StartProgram.

Вы можете использовать инструмент на обычном уровне, используя RTN_AddInstrumentFunction (или получить процедуру из инструкции, BBL или TRACE).

Как только у вас есть RTN (рутина), вы можете получить ее имя с помощью функции RTN_Name .

Обратитесь к руководству по примеру Подсчет инструкций процедуры (Routine Instrumentation) , который должен дать вамхорошее начало использования этих функций.

Примечание: столь же очевидный, как и его звуки, целевой исполняемый файл должен иметь символьную информацию (символы): No symbols == no routine names.

0 голосов
/ 03 февраля 2019

Вы можете использовать стандартные предопределенные макросы для распечатки имени программы и функции.

cout << __FILE__ << " " << __FUNCTION__ << endl;

...