/* callbacks for the entire process */ void funcwrap_init(client_id_t id, const char * name, const char * arguments) { file_t in_file; char logfilename[MAX_STRING_LENGTH]; drmgr_init(); drwrap_init(); tls_index = drmgr_register_tls_field(); DR_ASSERT(parse_commandline_args(arguments) == true); head = md_initialize(); if (!dr_file_exists(client_arg->filter_filename)){ file_registered = false; } /* we expect the filter file to be of the form for function filtering */ else{ file_registered = true; in_file = dr_open_file(client_arg->filter_filename, DR_FILE_READ); DR_ASSERT(in_file != INVALID_FILE); md_read_from_file(head, in_file, false); dr_close_file(in_file); } if (log_mode){ populate_conv_filename(logfilename, logdir, name, NULL); logfile = dr_open_file(logfilename, DR_FILE_WRITE_OVERWRITE); } strncpy(ins_pass_name, name, MAX_STRING_LENGTH); }
/* callbacks for the entire process */ void memdump_init(client_id_t id, const char * name, const char * arguments) { char logfilename[MAX_STRING_LENGTH]; file_t in_file; drmgr_init(); drutil_init(); drwrap_init(); tls_index = drmgr_register_tls_field(); DR_ASSERT(parse_commandline_args(arguments) == true); filter_head = md_initialize(); done_head = md_initialize(); app_pc_head = md_initialize(); in_file = dr_open_file(client_arg->filter_filename, DR_FILE_READ); md_read_from_file(filter_head, in_file, false); dr_close_file(in_file); in_file = dr_open_file(client_arg->app_pc_filename, DR_FILE_READ); md_read_from_file(app_pc_head, in_file, false); dr_close_file(in_file); if (log_mode){ populate_conv_filename(logfilename, logdir, name, NULL); logfile = dr_open_file(logfilename, DR_FILE_WRITE_OVERWRITE); } strncpy(ins_pass_name, name, MAX_STRING_LENGTH); mutex = dr_mutex_create(); }
DR_EXPORT void dr_init(client_id_t id) { drmgr_init(); drwrap_init(); dr_register_exit_event(event_exit); drmgr_register_module_load_event(module_load_event); drmgr_register_module_unload_event(module_unload_event); tls_idx = drmgr_register_tls_field(); CHECK(tls_idx > -1, "unable to reserve TLS field"); }
DR_EXPORT void dr_init(client_id_t id) { dr_set_client_name("DynamoRIO client 'ssljack'", "http://dynamorio.org/issues"); /* make it easy to tell, by looking at log file, which client executed */ dr_log(NULL, DR_LOG_ALL, 1, "Client ssljack initializing\n"); #ifdef SHOW_RESULTS if (dr_is_notify_on()) { dr_fprintf(STDERR, "Client ssljack running! See trace-* files for SSL logs!\n"); } #endif drmgr_init(); drwrap_init(); dr_register_exit_event(event_exit); drmgr_register_module_load_event(module_load_event); }
DR_EXPORT drmf_status_t drfuzz_init(client_id_t client_id) { drmf_status_t res; int count = dr_atomic_add32_return_sum(&drfuzz_init_count, 1); if (count > 1) return DRMF_SUCCESS; res = drmf_check_version(client_id); if (res != DRMF_SUCCESS) return res; callbacks = global_alloc(sizeof(drfuzz_callbacks_t), HEAPSTAT_MISC); memset(callbacks, 0, sizeof(drfuzz_callbacks_t)); drmgr_init(); drwrap_init(); #ifdef UNIX drmgr_register_signal_event(fault_handler); #else /* WINDOWS */ drmgr_register_exception_event(fault_handler); #endif drmgr_register_thread_init_event(thread_init); drmgr_register_thread_exit_event(thread_exit); drmgr_register_bb_app2app_event(bb_event, NULL); tls_idx_fuzzer = drmgr_register_tls_field(); if (tls_idx_fuzzer < 0) { DRFUZZ_ERROR("drfuzz failed to reserve TLS slot--initialization failed\n"); return DRMF_ERROR; } /* Synchronized to allow addition and removal of fuzz targets during execution * of the target program, e.g. to explore control flow paths. */ hashtable_init_ex(&fuzz_target_htable, 3, HASH_INTPTR, false/*no strdup*/, true/*synchronized*/, free_fuzz_target, NULL/*no custom hash*/, NULL/*no custom comparator*/); return DRMF_SUCCESS; }
/* * Main entry point that sets up all the facilities we need. */ DR_EXPORT void dr_client_main(client_id_t id, int argc, const char **argv) { dr_set_client_name( "Time-sensitive activity logger for PuTTY crypto testing", "https://www.chiark.greenend.org.uk/~sgtatham/putty/"); outfile = INVALID_FILE; bool ok = drmgr_init(); DR_ASSERT(ok); /* * Run our main instrumentation pass with lower priority than * drwrap, so that we don't start logging the inside of a function * whose drwrap pre-wrapper would have wanted to disable logging. */ drmgr_priority_t pri = {sizeof(pri), "sclog", NULL, NULL, DRMGR_PRIORITY_INSERT_DRWRAP+1}; ok = drmgr_register_bb_instrumentation_event( NULL, instrument_instr, &pri); DR_ASSERT(ok); ok = drutil_init(); DR_ASSERT(ok); ok = drwrap_init(); DR_ASSERT(ok); drsym_error_t symstatus = drsym_init(0); DR_ASSERT(symstatus == DRSYM_SUCCESS); dr_register_exit_event(exit_event); drreg_options_t ops = { sizeof(ops), 3, false }; drreg_status_t regstatus = drreg_init(&ops); DR_ASSERT(regstatus == DRREG_SUCCESS); drmgr_register_module_load_event(load_module); ok = drmgr_register_bb_app2app_event(expand_rep_movsb, NULL); DR_ASSERT(ok); }
DR_EXPORT void dr_init(client_id_t id) { /* make it easy to tell, by looking at log file, which client executed */ dr_log(NULL, LOG_ALL, 1, "Client 'wrap' initializing\n"); /* also give notification to stderr */ #ifdef SHOW_RESULTS if (dr_is_notify_on()) { # ifdef WINDOWS /* ask for best-effort printing to cmd window. must be called in dr_init(). */ dr_enable_console_printing(); # endif dr_fprintf(STDERR, "Client wrap is running\n"); } #endif drwrap_init(); dr_register_exit_event(event_exit); dr_register_module_load_event(module_load_event); max_lock = dr_mutex_create(); }
DR_EXPORT void dr_init( client_id_t id ) { dr_printf( "In dr_init()\n" ); // Initialize extensions. drsym_error_t rc = drsym_init( 0 ); if( DRSYM_SUCCESS != rc ) { dr_printf( "drsym_init() failed: %i\n", rc ); exit( 1 ); } bool wrapInit = drwrap_init(); if( !wrapInit ) { dr_printf( "drwrap_init() failed\n" ); exit( 1 ); } // Set up output. char fileName[256]; unsigned int pid = (unsigned int)dr_get_process_id(); dr_snprintf( fileName, sizeof( fileName ), "objcount-%u.out", pid ); fileName[sizeof( fileName ) - 1] = 0; outFile = dr_open_file( fileName, DR_FILE_WRITE_OVERWRITE ); outMutex = dr_mutex_create(); // Set up hashtable. hashtable_init_ex( &wraps, // table 16, // num_bits HASH_INTPTR, // hashtype false, // str_dup false, // synch &free_wrap, // free_payload_func NULL, // hash_key_func NULL ); // cmp_key_func // Register for events. dr_register_module_load_event( onLoad ); dr_register_exit_event( onExit ); }