我正在对可执行文件及其相关共享库执行一些简单的检测任务,将所有执行的指令记录在主文件以及共享库中。
但是,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 二进制代码。
所以我的问题是:鉴于我的情况,我是否应该配置为仅检测我感兴趣的库以克服内存异常?如果是这样,我该怎么做?