Dr. Memory
umbra.h File Reference

Header for Umbra: DynamoRIO Shadow Memory Extension. More...

Data Structures

struct  _umbra_shadow_memory_info_t
 
struct  _umbra_map_options_t
 

Macros

#define DRMGR_PRIORITY_NAME_EXCPT_UMBRA   "umbra_except"
 
#define UMBRA_MAP_SCALE_IS_UP(scale)   ((scale) >= UMBRA_MAP_SCALE_UP_2X)
 

Typedefs

typedef struct _umbra_shadow_memory_info_t umbra_shadow_memory_info_t
 
typedef struct _umbra_map_t umbra_map_t
 
typedef void(* app_memory_create_cb_t) (umbra_map_t *map, app_pc start, size_t size)
 
typedef struct _umbra_map_options_t umbra_map_options_t
 
typedef bool(* shadow_iterate_func_t) (umbra_map_t *map, umbra_shadow_memory_info_t *info, void *user_data)
 

Enumerations

enum  { DRMGR_PRIORITY_EXCPT_UMBRA = -100 }
 
enum  umbra_map_scale_t { ,
  UMBRA_MAP_SCALE_DOWN_4X,
  UMBRA_MAP_SCALE_DOWN_2X,
  UMBRA_MAP_SCALE_SAME_1X,
  UMBRA_MAP_SCALE_UP_2X
}
 
enum  umbra_map_flags_t {
  UMBRA_MAP_CREATE_SHADOW_ON_TOUCH = 0x1,
  UMBRA_MAP_SHADOW_SHARED_READONLY = 0x2
}
 
enum  umbra_shadow_memory_flags_t { UMBRA_CREATE_SHADOW_SHARED_READONLY = 0x1 }
 
enum  umbra_shadow_memory_type_t {
  UMBRA_SHADOW_MEMORY_TYPE_UNKNOWN = 0x1,
  UMBRA_SHADOW_MEMORY_TYPE_NOT_SHADOW = 0x2,
  UMBRA_SHADOW_MEMORY_TYPE_NORMAL = 0x4,
  UMBRA_SHADOW_MEMORY_TYPE_SHARED = 0x8,
  UMBRA_SHADOW_MEMORY_TYPE_SHADOW_NOT_ALLOC = 0x10
}
 

Functions

DR_EXPORT drmf_status_t umbra_init (client_id_t client_id)
 
DR_EXPORT drmf_status_t umbra_exit (void)
 
DR_EXPORT drmf_status_t umbra_create_mapping (IN umbra_map_options_t *ops, OUT umbra_map_t **map_out)
 
DR_EXPORT drmf_status_t umbra_destroy_mapping (IN umbra_map_t *map)
 
DR_EXPORT drmf_status_t umbra_create_shadow_memory (IN umbra_map_t *map, IN umbra_shadow_memory_flags_t flags, IN app_pc app_addr, IN size_t app_size, IN ptr_uint_t value, IN size_t value_size)
 
DR_EXPORT drmf_status_t umbra_delete_shadow_memory (IN umbra_map_t *map, IN app_pc app_addr, IN size_t app_size)
 
DR_EXPORT drmf_status_t umbra_num_scratch_regs_for_translation (OUT int *num_regs)
 
DR_EXPORT drmf_status_t umbra_insert_app_to_shadow (IN void *drcontext, IN umbra_map_t *map, IN instrlist_t *ilist, IN instr_t *where, IN reg_id_t addr_reg, IN reg_id_t *scratch_regs, IN int num_scratch_regs)
 
DR_EXPORT drmf_status_t umbra_read_shadow_memory (IN umbra_map_t *map, IN app_pc app_addr, IN size_t app_size, INOUT size_t *shadow_size, OUT byte *buffer)
 
DR_EXPORT drmf_status_t umbra_write_shadow_memory (IN umbra_map_t *map, IN app_pc app_addr, IN size_t app_size, INOUT size_t *shadow_size, IN byte *buffer)
 
DR_EXPORT drmf_status_t umbra_shadow_set_range (IN umbra_map_t *map, IN app_pc app_addr, IN size_t app_size, OUT size_t *shadow_size, IN ptr_uint_t value, IN size_t value_size)
 
DR_EXPORT drmf_status_t umbra_shadow_copy_range (IN umbra_map_t *map, IN app_pc app_src, IN app_pc app_dst, IN size_t app_size, OUT size_t *shadow_size)
 
DR_EXPORT drmf_status_t umbra_value_in_shadow_memory (IN umbra_map_t *map, INOUT app_pc *app_addr, IN size_t app_size, IN ptr_uint_t value, IN size_t value_size, OUT bool *found)
 
DR_EXPORT drmf_status_t umbra_get_shadow_block_size (IN umbra_map_t *map, OUT size_t *size)
 
DR_EXPORT drmf_status_t umbra_iterate_app_memory (IN umbra_map_t *map, IN void *user_data, IN bool(*iter_func)(umbra_map_t *map, const dr_mem_info_t *info, void *user_data))
 
DR_EXPORT drmf_status_t umbra_iterate_shadow_memory (IN umbra_map_t *map, IN void *user_data, IN shadow_iterate_func_t iter_func)
 
DR_EXPORT drmf_status_t umbra_get_shadow_memory_type (IN umbra_map_t *map, IN byte *shadow_addr, OUT umbra_shadow_memory_type_t *shadow_type)
 
DR_EXPORT drmf_status_t umbra_shadow_memory_is_shared (IN umbra_map_t *map, IN byte *shadow_addr, OUT umbra_shadow_memory_type_t *shadow_type)
 
DR_EXPORT drmf_status_t umbra_get_shadow_memory (IN umbra_map_t *map, IN app_pc app_addr, OUT byte **shadow_addr, INOUT umbra_shadow_memory_info_t *shadow_info)
 
DR_EXPORT drmf_status_t umbra_replace_shared_shadow_memory (IN umbra_map_t *map, IN app_pc app_addr, OUT byte **shadow_addr)
 
DR_EXPORT drmf_status_t umbra_create_shared_shadow_block (IN umbra_map_t *map, IN ptr_uint_t value, IN size_t value_size, OUT byte **block)
 
DR_EXPORT drmf_status_t umbra_get_shared_shadow_block (IN umbra_map_t *map, IN ptr_uint_t value, IN size_t value_size, OUT byte **block)
 
static void umbra_shadow_memory_info_init (umbra_shadow_memory_info_t *info)
 

Detailed Description

Header for Umbra: DynamoRIO Shadow Memory Extension.