실행 파일 및 관련 공유 라이브러리에 대한 간단한 계측 작업을 수행하면서 공유 라이브러리는 물론 주 파일에 실행 된 모든 명령을 기록합니다.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 바이너리 코드입니다.
그럼 내 질문에 : 메모리 예외를 극복하기 위해 관심이있는 라이브러리 만 계측하도록 구성해야합니까? 그렇다면 어떻게 할 수 있습니까?
IIRC의 32 비트 프로세스는 64 비트 커널에서 실행되는 경우 전체 4GiB의 가상 주소 공간을 사용할 수 있습니다. 32 비트 사용자 공간이있는 64 비트 커널을 사용할 수 있습니다. (특히 커널을 64 비트 커널로 대체하면 우분투의 32 비트 설치가 계속 부팅됩니다. 우분투는 아마 하나까지 패키지하지만, 잊어 버릴 수 있습니다 ~ 32 비트는 약 10 년 동안 사용되지 않았습니다) –