DR_EXPORT void dr_init(client_id_t id) { /* Look up start_monitor() and stop_monitor() in the target app. * These functions are dummy markers that tell us when to start * and stop printing syscalls. */ /* NOTE - we could use dr_module_lookup_by_name, but we use the iterator instead * to test it out. */ dr_module_iterator_t *iter = dr_module_iterator_start(); while (dr_module_iterator_hasnext(iter)) { module_data_t *data = dr_module_iterator_next(iter); if (strcmp(dr_module_preferred_name(data), TEST_NAME) == 0) { module_handle_t lib = data->handle; start_pc = (app_pc)dr_get_proc_address(lib, "start_monitor"); stop_pc = (app_pc)dr_get_proc_address(lib, "stop_monitor"); } dr_free_module_data(data); } dr_module_iterator_stop(iter); if (start_pc == NULL || stop_pc == NULL) { dr_fprintf(STDERR, "ERROR: did not find start/stop markers\n"); } /* Register the BB hook */ dr_register_bb_event(bb_event); #ifdef LINUX /* With early injection, libc won't be loaded until later. */ dr_register_module_load_event(event_module_load); #endif }
DR_EXPORT void dr_init(client_id_t id) { const char *options = dr_get_options(id); dr_fprintf(STDERR, "options = %s\n", options); if (options != NULL && strstr(options, "use_unlink") != NULL) { use_unlink = true; } #ifdef WINDOWS dr_register_module_load_event(module_load_event); #endif dr_register_exit_event(exit_event); dr_register_trace_event(trace_event); dr_register_delete_event(deleted_event); dr_register_bb_event(bb_event); dr_register_kernel_xfer_event(kernel_xfer_event); }
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 ); }