Можно ли получить objdump с помощью инструмента «Пин», до (это легко сделать с помощью objdump) и после контрольно-измерительных приборов?
Вам понадобится способ узнать механизм ПИНчто вы хотите сделать с результатами objdump.Возможно, вы захотите связать их обоих через скрипт, например.Хотя это полностью зависит от того, что вы хотите сделать.
Это правильный способ сделать это?
Зависит от того, что вы хотите сделать точно, но я думаю,это не так.
Существует четкое различие между измерительными приборами и анализом в ПИН-коде.Как только вы это поймете, все остальное (относительно) легко.
Концептуально, инструменты PIN-кода состоят из двух компонентов:
- Механизм, который решает, куда и какой код вставлять: Instrumentation .
- Код для выполнения в точках вставки: анализ .
При этом, еще один важный момент:
- Контрольно-измерительные приборы запускаются только один раз : когда команда (или BBL, или TRACE) обнаружена впервые.
- Анализ выполняется каждый раз выполняется инструкция (или BBL, TRACE).
Поэтому, когда у вас есть:
// set up the **instrumentation**
INS_AddInstrumentFunction(Func_Instrumentation, 0);
Вы настраиваете инструментарий (которыйтогда вызывается только один раз).Если вам нужно, чтобы обратный вызов вызывался каждый раз при выполнении инструкции (или BBL, TRACE), вам необходимо настроить процедуру анализа, например:
// this is the **analysis** routine.
// This function is called before every instruction is executed
VOID docount() { icount++; }
// The is the **instrumentation routine**, called by INS_AddInstrumentFunction().
// Pin calls this function each time a **new** instruction is encountered
// Note that is won't be called for the same instruction after the first time.
VOID Func_Instrumentation(INS ins, VOID *v)
{
// Insert a call to docount before every instruction, no arguments are passed
INS_InsertCall(
ins, // a representation of the instruction
IPOINT_BEFORE, // where to insert, relative to the instruction
(AFUNPTR)docount, // the analysis routine
IARG_END); // no args to pass to the analysis routine
}
Тщательно проверьте имеющийся образец подсчета команд: