Pin:检测指定的共享库

时间:2016-09-05 19:48:28

标签: x86 instrumentation intel-pin dynamic-analysis

我正在对可执行文件及其相关的共享库执行一些简单的检测任务,记录主文件中的所有已执行指令以及共享库。

但是,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 个答案:

答案 0 :(得分:1)

使用IMG_Name获取文件名,因为pin看到它并将其与感兴趣的共享对象进行比较。 InstLib提供了这方面的实现,但是您可以自己轻松完成。