VOID InstructionProp(INS ins, VOID *v) { PIN_LockClient(); for (IMG image = APP_ImgHead();image!=IMG_Invalid();image=IMG_Next(image)) { inst_func_summary(image); } PIN_UnlockClient(); }
static IMG FindNamedImg(const string& imgName) { // Visit every loaded image for (IMG img= APP_ImgTail(); IMG_Valid(img); img = IMG_Prev(img)) { if (IMG_Name(img) == imgName) return img; } return IMG_Invalid(); }
IMG GetImgByTrace(TRACE trace) { IMG img = IMG_Invalid(); RTN rtn = TRACE_Rtn(trace); if (RTN_Valid(rtn)) { SEC sec = RTN_Sec(rtn); if (SEC_Valid(sec)) { img = SEC_Img(sec); } } return img; }
int main(int argc, char * argv[]) { // Initialize symbol table code, needed for rtn instrumentation PIN_InitSymbols(); // Initialize pin if (PIN_Init(argc, argv)) return Usage(); IMG img = IMG_Open(argv[argc-1]); if(img == IMG_Invalid( ) ) { printf("Can't open file %s\n", argv[argc-1]); return 1; } PIN_AddFiniFunction(FINI_CALLBACK(my_fini), NULL); IMG_AddInstrumentFunction(ImageLoad, 0); // Start the program, never returns PIN_StartProgram(); return 0; }