DR_EXPORT void dr_client_main(client_id_t id, int argc, const char *argv[]) { umbra_map_options_t umbra_map_ops; drmgr_init(); memset(&umbra_map_ops, 0, sizeof(umbra_map_ops)); umbra_map_ops.scale = UMBRA_MAP_SCALE_DOWN_4X; umbra_map_ops.flags = UMBRA_MAP_CREATE_SHADOW_ON_TOUCH; umbra_map_ops.default_value = 0; umbra_map_ops.default_value_size = 1; if (umbra_init(id) != DRMF_SUCCESS) DR_ASSERT_MSG(false, "fail to init umbra"); if (umbra_create_mapping(&umbra_map_ops, &umbra_map) != DRMF_SUCCESS) DR_ASSERT_MSG(false, "fail to create shadow memory mapping"); dr_register_exit_event(exit_event); }
void shadow_table_init(void) { umbra_map_options_t umbra_map_ops; LOG(2, "shadow_table_init\n"); /* create umbra shadow map */ memset(&umbra_map_ops, 0, sizeof(umbra_map_ops)); umbra_map_ops.struct_size = sizeof(umbra_map_ops); umbra_map_ops.flags = UMBRA_MAP_CREATE_SHADOW_ON_TOUCH | UMBRA_MAP_SHADOW_SHARED_READONLY; umbra_map_ops.scale = SHADOW_MAP_SCALE; umbra_map_ops.default_value = SHADOW_DEFAULT_VALUE; umbra_map_ops.default_value_size = SHADOW_DEFAULT_VALUE_SIZE; #ifndef X64 umbra_map_ops.redzone_size = 0; #endif if (umbra_create_mapping(&umbra_map_ops, &umbra_map) != DRMF_SUCCESS) ASSERT(false, "fail to create shadow memory mapping"); }