// argc, argv are the entire command line, including pin -t <toolname> -- ... int main(int argc, char * argv[]) { // Initialize symbol processing PIN_InitSymbols(); // Initialize pin PIN_Init(argc, argv); // Register ImageLoad to be called when an image is loaded IMG_AddInstrumentFunction(ImageLoad, 0); // Register ImageUnload to be called when an image is unloaded IMG_AddUnloadFunction(ImageUnload, 0); // Register fini funcation PIN_AddFiniFunction(Fini, 0); printf("This is a negative test it is expected to fail\n"); // Never returns if ( PIN_IsProbeMode() ) { // Thread start callback is JIT mode only PIN_AddThreadStartFunction(ThreadStart, 0); PIN_StartProgramProbed(); } else { // Detach probed callback is Probe mode only PIN_AddDetachFunctionProbed(DetachComplete, 0); PIN_StartProgram(); } return 0; }
/* ===================================================================== */ int main(int argc, char *argv[]) { PIN_InitSymbols(); PIN_Init(argc, argv); IMG_AddInstrumentFunction(ImageLoad, 0); if ( PIN_IsProbeMode() ) PIN_StartProgramProbed(); else PIN_StartProgram(); return 0; }
/* ===================================================================== */ VOID ImageLoad(IMG img, VOID *v) { if (!IMG_IsMainExecutable(img)) { return; } const char * name = "check_sp_value"; RTN rtn = RTN_FindByName(img, name); if (RTN_Valid(rtn)) { PROTO proto = PROTO_Allocate(PIN_PARG(int), CALLINGSTD_DEFAULT, name, PIN_PARG(void*), PIN_PARG_END() ); if ( ! PIN_IsProbeMode() ) { RTN_ReplaceSignature( rtn, AFUNPTR(check_sp_value), IARG_PROTOTYPE, proto, IARG_FUNCARG_ENTRYPOINT_VALUE, 0, IARG_REG_VALUE, REG_STACK_PTR, IARG_REG_VALUE, REG_ESP, IARG_REG_VALUE, REG_SP, IARG_END); } else if (RTN_IsSafeForProbedReplacement(rtn)) { RTN_ReplaceSignatureProbed( rtn, AFUNPTR(check_sp_value), IARG_PROTOTYPE, proto, IARG_FUNCARG_ENTRYPOINT_VALUE, 0, IARG_REG_VALUE, REG_STACK_PTR, IARG_REG_VALUE, REG_ESP, IARG_REG_VALUE, REG_SP, IARG_END); } PROTO_Free( proto); } }
int main(INT32 argc, CHAR **argv) { PIN_InitSymbols(); PIN_Init(argc, argv); PIN_AddFollowChildProcessFunction(FollowChild, 0); // Never returns if (PIN_IsProbeMode()) { IMG_AddInstrumentFunction(ImageLoad, (VOID *)1); PIN_StartProgramProbed(); } else { IMG_AddInstrumentFunction(ImageLoad, 0); PIN_StartProgram(); } return 0; }