1
我正在執行一些可執行文件及其相關共享庫的一些簡單的檢測任務,記錄主文件中的所有執行指令以及共享庫。針:指定一個指定的共享庫
然而,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二進制代碼。
所以我的問題是:鑑於我的情況,我應該配置爲只裝備我感興趣的庫以克服內存異常嗎?如果是這樣,我該怎麼做?
如果在64位內核下運行,IIRC 32位進程可以使用完整的4GiB虛擬地址空間。您可以使用具有32位用戶空間的64位內核。 (具體來說,如果用64位內核替換內核,Ubuntu的32位安裝應該仍然可以啓動,Ubuntu甚至可以打包一個,但我忘記了,32位已經過時了大約10年) –