x86_memory_operation
interface is used to access memory
from a user instruction. See the
cpu_instrumentation_subscribe
and
cpu_instruction_decoder
for more information. It is designed
to be more efficient than the x86_memory_access
. If an
exception condition occurs, a longjmp is taken. The interface methods may
only be invoked from user instruction.
SIM_INTERFACE(x86_memory_operation) { uint64 (*read_logical)( conf_object_t *cpu, x86_seg_t seg, logical_address_t offs, unsigned size, x86_processor_mode_t mode, x86_access_type_t access_type); #if !defined(PYWRAP) void (*read_logical_buf)( conf_object_t *cpu, uint8 *dst, x86_seg_t seg, logical_address_t offs, unsigned size, x86_processor_mode_t mode, x86_access_type_t access_type); #endif void (*write_logical)( conf_object_t *cpu, uint64 val, x86_seg_t seg, logical_address_t offs, unsigned size, x86_processor_mode_t mode, x86_access_type_t access_type); #if !defined(PYWRAP) void (*write_logical_buf)( conf_object_t *cpu, const uint8 *src, x86_seg_t seg, logical_address_t offs, unsigned size, x86_processor_mode_t mode, x86_access_type_t access_type); #endif x86_read_physical_ret_t (*read_physical)( conf_object_t *cpu, physical_address_t address, unsigned size, x86_access_type_t access_type); #if !defined(PYWRAP) exception_type_t (*read_physical_buf)( conf_object_t *cpu, uint8 *dst, physical_address_t address, unsigned size, x86_access_type_t access_type); #endif exception_type_t (*write_physical)( conf_object_t *cpu, uint64 val, physical_address_t address, unsigned size, x86_access_type_t access_type); #if !defined(PYWRAP) exception_type_t (*write_physical_buf)( conf_object_t *cpu, const uint8 *src, physical_address_t address, unsigned size, x86_access_type_t access_type); #endif }; #define X86_MEMORY_OPERATION_INTERFACE "x86_memory_operation"
instrumentation_replace
interface.