Pin: инструмент для указанной библиотеки
Я выполняю простую задачу инструментария для исполняемого файла и связанных с ним общих библиотек, записываю все выполненные инструкции в основной файл, а также в общие библиотеки.
Тем не мение, Pin
всегда бросать
Pin is out of memory: MmapChecked
Во время приборов. Так как я работаю над 32-битной системой, каждый раз, когда она достигает потребления памяти 3G, процесс инструментирования завершается сбоем.
Я хотел бы поработать на этой 32-битной системе, поскольку на этой платформе довольно много общих библиотек. С другой стороны, потому что на самом деле меня интересует только одна общая библиотека, поэтому я думаю найти способ записывать только исполняемые инструкции в основной исполняемый файл, а также в эту специальную библиотеку.
Тем не менее, я понятия не имею, можно ли / как это сделать. Прямо сейчас, перед измерительными приборами, мои настройки:
PIN_LockClient();
IMG img = IMG_FindByAddress(INS_Address(ins));
PIN_UnlockClient();
// if (IMG_Valid(img) && IMG_IsMainExecutable(img)){
if (IMG_Valid(img)) { <--------------------- this line
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)insCallBack,
IARG_BOOL,
IARG_ADDRINT, INS_Address(ins),
IARG_PTR, new string(INS_Disassemble(ins)),
IARG_CONTEXT,
IARG_ADDRINT, INS_NextAddress(ins),
IARG_END);
}
Как вы можете видеть, я не проверял, использую ли я основной исполняемый файл или нет, а это значит, что я должен иметь возможность контролировать все библиотеки.
Моя тестовая платформа - 32-битная x86 Ubuntu 14.04. И целью теста является 32-битный двоичный код ELF.
Таким образом, мой вопрос: учитывая мою ситуацию, должен ли я настроить инструмент только на мою интересующую библиотеку, чтобы преодолеть исключение памяти? Если так, как я могу это сделать?
1 ответ
Используйте IMG_Name, чтобы получить имя файла, как его видит Пин, и сравнить его с общим объектом интереса. InstLib предоставляет встроенную реализацию этого, но это легко сделать самостоятельно.