file_t umbra_open_proc_log(process_id_t pid) { char name[128]; int len; file_t logfile; /* XXX: Windows need a absolute path */ name[0] = '\0'; len = dr_snprintf(name, sizeof(name)/sizeof(name[0]), "umbra.%s.%d.proc.log", dr_get_application_name(), pid); DR_ASSERT(len > 0); name[sizeof(name)/sizeof(name[0])-1] = '\0'; logfile = dr_open_file(name, DR_FILE_READ | DR_FILE_WRITE_APPEND); DR_ASSERT(logfile != INVALID_FILE); return logfile; }
file_t umbra_open_thread_log(thread_id_t tid) { #ifdef LINUX_KERNEL return our_stdout; #else char name[128]; int len; file_t logfile; /* XXX: Windows need a absolute path */ name[0] = '\0'; len = dr_snprintf(name, sizeof(name)/sizeof(name[0]), "umbra.%s.%d.thread.log", dr_get_application_name(), tid); DR_ASSERT(len > 0); name[sizeof(name)/sizeof(name[0])-1] = '\0'; logfile = dr_open_file(name, DR_FILE_READ | DR_FILE_WRITE_APPEND); DR_ASSERT(logfile != INVALID_FILE); return logfile; #endif }
void inscount_exit_event(void) { #ifdef SHOW_RESULTS char msg[512]; int len; len = dr_snprintf(msg, sizeof(msg)/sizeof(msg[0]), "process name - %s\nInstrumentation results: %llu instructions executed - %d bbcount\n" ,dr_get_application_name(),global_count,bbcount); DR_ASSERT(len > 0); NULL_TERMINATE(msg); DISPLAY_STRING(msg); #endif /* SHOW_RESULTS */ md_delete_list(head,false); dr_global_free(client_arg, sizeof(client_arg_t)); if (log_mode){ dr_close_file(logfile); } drmgr_exit(); }
DR_EXPORT void dr_init(client_id_t id) { int i = 0; int j = 0; drmgr_init(); dr_enable_console_printing(); setupInsPasses(); doCommandLineArgProcessing(id); DEBUG_PRINT("argument length - %d\n", argument_length); for (i = 0; i < argument_length; i++){ DEBUG_PRINT("\"%s - %s\"\n", arguments[i].name, arguments[i].arguments); } dr_register_nudge_event(nudge_event, id); /*if (log_mode){ populate_conv_filename(global_logfilename, logdir, "global", NULL); global_logfile = dr_open_file(global_logfilename, DR_FILE_WRITE_OVERWRITE); DR_ASSERT(global_logfile != INVALID_FILE); }*/ //dr_messagebox("client id - %d\n", id); DEBUG_PRINT("%s is starting\n", dr_get_application_name()); /* if you are using it only for photoshop do no instrument other exes */ if (strcmp(exec, "photoshop") == 0){ DEBUG_PRINT("photoshop detected only instrumenting Photoshop.exe\n"); if(strcmp(dr_get_application_name(), "Photoshop.exe") != 0){ return; } DEBUG_PRINT("starting to instrument Photoshop.exe\n"); } for( i=0 ; i<argument_length; i++){ for( j=0; j<pass_length; j++){ if(strcmp(arguments[i].name,ins_pass[j].name) == 0){ //we can now register the call backs DEBUG_PRINT("%s - registered\n", arguments[i].name); DEBUG_PRINT("%s - initializing...\n", arguments[i].name); ins_pass[j].init_func(id,arguments[i].name, arguments[i].arguments); DEBUG_PRINT("%s - initialized\n", arguments[i].name); //register thread events if(ins_pass[j].thread_init != NULL) drmgr_register_thread_init_event(ins_pass[j].thread_init); if(ins_pass[j].thread_exit != NULL) drmgr_register_thread_exit_event(ins_pass[j].thread_exit); //register bb events if(ins_pass[j].app2app_bb != NULL) drmgr_register_bb_app2app_event(ins_pass[j].app2app_bb, &ins_pass[j].priority); if(ins_pass[j].instrumentation_bb != NULL || ins_pass[j].analysis_bb != NULL) drmgr_register_bb_instrumentation_event(ins_pass[j].analysis_bb, ins_pass[j].instrumentation_bb, &ins_pass[j].priority); if (ins_pass[j].module_load != NULL) drmgr_register_module_load_event_ex(ins_pass[j].module_load, &ins_pass[j].priority); if (ins_pass[j].module_unload != NULL) drmgr_register_module_unload_event_ex(ins_pass[j].module_unload, &ins_pass[j].priority); } } } dr_register_exit_event(process_exit_routine_call); }