Crate dynamorio_sys

Source

Re-exports§

pub use self::_dr_shift_type_t as dr_shift_type_t;
pub use self::_dr_extend_type_t as dr_extend_type_t;
pub use self::_dr_pred_constr_type_t as dr_pred_constr_type_t;
pub use self::_dr_pred_type_t as dr_pred_type_t;
pub use self::_dr_opnd_flags_t as dr_opnd_flags_t;
pub use self::_dr_isa_mode_t as dr_isa_mode_t;
pub use self::_dr_encoding_hint_type_t as dr_encoding_hint_type_t;
pub use self::_dr_opnd_query_flags_t as dr_opnd_query_flags_t;
pub use self::_dr_pred_trigger_t as dr_pred_trigger_t;
pub use self::_dr_valgrind_request_id_t as dr_valgrind_request_id_t;
pub use self::_dr_annotation_calling_convention_t as dr_annotation_calling_convention_t;

Structs§

__va_list_tag
_dr_app_arg_t
Contains information regarding an application’s command-line argument.
_dr_client_iterator_t
_dr_config_client_t
Information about a client library setup.
_dr_export_info_t
Data structure used by dr_get_proc_address_ex() to retrieve information about an exported symbol.
_dr_fault_fragment_info_t
Data structure passed within dr_exception_t, dr_siginfo_t, and dr_restore_state_info_t. Contains information about the code fragment inside the code cache at the exception/signal/translation interruption point.
_dr_instr_label_data_t
Data slots available in a label (instr_create_label()) instruction for storing client-controlled data. Accessible via instr_get_label_data_area().
_dr_kernel_xfer_info_t
Data structure passed for dr_register_kernel_xfer_event().
_dr_mcontext_t
Machine context structure.
_dr_mem_info_t
Describes a memory region. Used by dr_query_memory_ex().
_dr_memory_dump_spec_t
Indicates the type of memory dump for dr_create_memory_dump().
_dr_module_import_desc_t
Descriptor used to iterate the symbols imported from a specific module.
_dr_module_import_iterator_t
Iterator over the list of modules that a given module imports from. Created by calling dr_module_import_iterator_start() and must be freed by calling dr_module_import_iterator_stop().
_dr_module_import_t
Module import data returned from dr_module_import_iterator_next().
_dr_restore_state_info_t
Data structure passed to a restore_state_ex event handler (see dr_register_restore_state_ex_event()). Contains the machine context at the translation point and other translation information.
_dr_siginfo_t
Data structure passed with a signal event. Contains the machine context at the signal interruption point and other signal information.
_dr_stats_t
Used by dr_get_stats() and dr_app_stop_and_cleanup_with_stats()
_dr_symbol_export_iterator_t
Symbol export iterator data type. Can be created by calling dr_symbol_export_iterator_start() and must be freed by calling dr_symbol_export_iterator_stop().
_dr_symbol_export_t
Symbol export data returned from dr_symbol_export_iterator_next().
_dr_symbol_import_iterator_t
Symbol import iterator data type. Can be created by calling dr_symbol_import_iterator_start() and must be freed by calling dr_symbol_import_iterator_stop().
_dr_symbol_import_t
Symbol import data returned from dr_symbol_import_iterator_next().
_dr_syscall_result_info_t
Data structure used to obtain or modify the result of an application system call by dr_syscall_get_result_ex() and dr_syscall_set_result_ex().
_dr_vg_client_request_t
Defines the Valgrind client request object, which is constructed by each instance of a Valgrind annotation in the target app. An instance is passed to Valgrind annotation callback functions to make the arguments available. Some arguments may be undefined for some Valgrind client requests; see the Valgrind documentation for each specific Valgrind client request for details about the arguments.
_instrlist_t
_module_data_t
Holds information about a loaded module. \note On Linux the start address can be cast to an Elf32_Ehdr or Elf64_Ehdr. \note On Windows the start address can be cast to an IMAGE_DOS_HEADER for use in finding the IMAGE_NT_HEADER and its OptionalHeader. The OptionalHeader can be used to walk the module sections (among other things). See WINNT.H. \note On MacOS the start address can be cast to mach_header or mach_header_64. \note When accessing any memory inside the module (including header fields) user is responsible for guarding against corruption and the possibility of the module being unmapped.
_module_handle_t
Type used for dr_get_proc_address(). This can be obtained from the #_module_data_t structure. It is equivalent to the base address of the module on both Windows and Linux.
_module_names_t
Holds the names of a module. This structure contains multiple fields corresponding to different sources of a module name. Note that some of these names may not exist for certain modules. It is highly likely, however, that at least one name is available. Use dr_module_preferred_name() on the parent _module_data_t to get the preferred name of the module.
_module_segment_data_t
Holds information on a segment of a loaded module.
dr_emit_flags_t
Flags controlling the behavior of basic blocks and traces when emitted into the code cache. These flags are bitmasks that can be combined by or-ing together. For multiple clients, the flags returned by each client are or-ed together.
dr_exit_flags_t
Flags controlling thread behavior at process exit time in release build. See dr_set_process_exit_behavior() for further details.
dr_mcontext_flags_t
Values for the flags field of dr_mcontext_t
dr_time_t
Structure written by dr_get_time() to specify the current time.
drand48_data
instr_noalloc_t
A version of #instr_t which guarantees to not use heap allocation for regular decoding and encoding. It inlines all the possible operands and encoding space inside the structure. Some operations could still use heap if custom label data is used to point at heap-allocated structures through extension libraries or custom code.
instr_t
Internal structure of instr_t is below abstraction layer, but we provide its size so that it can be used in stack variables instead of always allocated on the heap.
opnd_t
Internal structure of opnd_t is below abstraction layer. But compiler needs to know field sizes to copy it around

Enums§

dr_spill_slot_t
An enum of spill slots to use with dr_save_reg(), dr_restore_reg(), dr_save_arith_flags(), dr_restore_arith_flags() and dr_insert_mbr_instrumentation(). Values stored in spill slots remain valid only until the next non-meta (i.e. application) instruction. Spill slots can be accessed/modifed during clean calls and restore_state_events (see dr_register_restore_state_event()) with dr_read_saved_reg() and dr_write_saved_reg().

Constants§

DR_FILE_ALLOW_LARGE
DR_FILE_CLOSE_ON_FORK
DR_FILE_READ
DR_FILE_WRITE_APPEND
DR_FILE_WRITE_ONLY
DR_FILE_WRITE_OVERWRITE
DR_FILE_WRITE_REQUIRE_NEW
DR_FPSTATE_ALIGN
DR_FPSTATE_BUF_SIZE
DR_LOG_ALL
DR_LOG_ASYNCH
DR_LOG_CACHE
DR_LOG_DISPATCH
DR_LOG_EMIT
DR_LOG_FRAGMENT
DR_LOG_HEAP
DR_LOG_HOT_PATCHING
DR_LOG_HTABLE
DR_LOG_INTERP
DR_LOG_LINKS
DR_LOG_MEMSTATS
DR_LOG_MODULEDB
DR_LOG_MONITOR
DR_LOG_NONE
DR_LOG_NT
DR_LOG_OPTS
DR_LOG_RCT
DR_LOG_SIDELINE
DR_LOG_STATS
DR_LOG_SYMBOLS
DR_LOG_SYNCH
DR_LOG_SYSCALLS
DR_LOG_THREADS
DR_LOG_TOP
DR_LOG_VMAREAS
DR_MAP_CACHE_REACHABLE
If set, loads the specified file at a location that is reachable from the code cache and client libraries by a 32-bit displacement. If not set, the mapped file is not guaranteed to be reachable from the cache.
DR_MAP_FIXED
If set, indicates that the passed-in start address is required rather than a hint. On Linux, this has the same semantics as mmap with MAP_FIXED: i.e., any existing mapping in [addr,addr+size) will be unmapped. This flag is not supported on Windows.
DR_MAP_PRIVATE
If set, changes to mapped memory are private to the mapping process and are not reflected in the underlying file. If not set, changes are visible to other processes that map the same file, and will be propagated to the file itself.
DR_MAX_OPTIONS_LENGTH
DR_MEMPROT_EXEC
DR_MEMPROT_GUARD
DR_MEMPROT_NONE
DR_MEMPROT_PRETEND_WRITE
DR_MEMPROT_READ
DR_MEMPROT_VDSO
DR_MEMPROT_WRITE
DR_NOTE_ANNOTATION
Identifies an annotation point. This label will be replaced by a clean call to the registered annotation handler.
DR_NOTE_CALL_SEQUENCE_END
Used for internal translation from an instruction list. These apply not only to client-inserted clean calls but all inserted calls whether inserted by clients or DR and whether fully clean or not. This is thus distinct from #DR_NOTE_CLEAN_CALL_END.
DR_NOTE_CALL_SEQUENCE_START
Used for internal translation from an instruction list. These apply not only to client-inserted clean calls but all inserted calls whether inserted by clients or DR and whether fully clean or not. This is thus distinct from #DR_NOTE_CLEAN_CALL_END.
DR_NOTE_CLEAN_CALL_END
DR_NOTE_FIRST_RESERVED
DR_NOTE_LDEX
Identifies an annotation point. This label will be replaced by a clean call to the registered annotation handler.
DR_NOTE_REG_BARRIER
Identifies a point at which clients should restore all registers to their application values, as required for DR’s internal block mangling.
DR_NOTE_RSEQ
Identifies an annotation point. This label will be replaced by a clean call to the registered annotation handler.
DR_NOTE_RSEQ_ENTRY
Placed at the top of a basic block, this identifies the entry to an “rseq” (Linux restartable sequence) region. The first two label data fields (see instr_get_label_data_area()) are filled in with this rseq region’s end PC and its abort handler PC, in that order.
DR_REG_AFTER_LAST_VALID_ENUM
DR_REG_AH
< The “ah” register.
DR_REG_AL
< The “al” register.
DR_REG_AX
< The “ax” register.
DR_REG_BH
< The “bh” register.
DR_REG_BL
< The “bl” register.
DR_REG_BND0
< The “bnd0” register.
DR_REG_BND1
< The “bnd1” register.
DR_REG_BND2
< The “bnd2” register.
DR_REG_BND3
< The “bnd3” register.
DR_REG_BP
< The “bp” register.
DR_REG_BPL
< The “bpl” register.
DR_REG_BX
< The “bx” register.
DR_REG_CH
< The “ch” register.
DR_REG_CL
< The “cl” register.
DR_REG_CR0
< The “cr0” register.
DR_REG_CR1
< The “cr1” register.
DR_REG_CR2
< The “cr2” register.
DR_REG_CR3
< The “cr3” register.
DR_REG_CR4
< The “cr4” register.
DR_REG_CR5
< The “cr5” register.
DR_REG_CR6
< The “cr6” register.
DR_REG_CR7
< The “cr7” register.
DR_REG_CR8
< The “cr8” register.
DR_REG_CR9
< The “cr9” register.
DR_REG_CR10
< The “cr10” register.
DR_REG_CR11
< The “cr11” register.
DR_REG_CR12
< The “cr12” register.
DR_REG_CR13
< The “cr13” register.
DR_REG_CR14
< The “cr14” register.
DR_REG_CR15
< The “cr15” register.
DR_REG_CX
< The “cx” register.
DR_REG_DH
< The “dh” register.
DR_REG_DI
< The “di” register.
DR_REG_DIL
< The “dil” register.
DR_REG_DL
< The “dl” register.
DR_REG_DR0
< The “dr0” register.
DR_REG_DR1
< The “dr1” register.
DR_REG_DR2
< The “dr2” register.
DR_REG_DR3
< The “dr3” register.
DR_REG_DR4
< The “dr4” register.
DR_REG_DR5
< The “dr5” register.
DR_REG_DR6
< The “dr6” register.
DR_REG_DR7
< The “dr7” register.
DR_REG_DR8
< The “dr8” register.
DR_REG_DR9
< The “dr9” register.
DR_REG_DR10
< The “dr10” register.
DR_REG_DR11
< The “dr11” register.
DR_REG_DR12
< The “dr12” register.
DR_REG_DR13
< The “dr13” register.
DR_REG_DR14
< The “dr14” register.
DR_REG_DR15
< The “dr15” register.
DR_REG_DX
< The “dx” register.
DR_REG_EAX
< The “eax” register.
DR_REG_EBP
< The “ebp” register.
DR_REG_EBX
< The “ebx” register.
DR_REG_ECX
< The “ecx” register.
DR_REG_EDI
< The “edi” register.
DR_REG_EDX
< The “edx” register.
DR_REG_ESI
< The “esi” register.
DR_REG_ESP
< The “esp” register.
DR_REG_INVALID
< Sentinel value indicating an invalid register.
DR_REG_K0
< The “k0” register.
DR_REG_K1
< The “k1” register.
DR_REG_K2
< The “k2” register.
DR_REG_K3
< The “k3” register.
DR_REG_K4
< The “k4” register.
DR_REG_K5
< The “k5” register.
DR_REG_K6
< The “k6” register.
DR_REG_K7
< The “k7” register.
DR_REG_MAX_AS_OPSZ
< The “cr15” register.
DR_REG_MM0
< The “mm0” register.
DR_REG_MM1
< The “mm1” register.
DR_REG_MM2
< The “mm2” register.
DR_REG_MM3
< The “mm3” register.
DR_REG_MM4
< The “mm4” register.
DR_REG_MM5
< The “mm5” register.
DR_REG_MM6
< The “mm6” register.
DR_REG_MM7
< The “mm7” register.
DR_REG_NULL
< Sentinel value indicating no register, for address modes.
DR_REG_R8
< The “r8” register.
DR_REG_R9
< The “r9” register.
DR_REG_R8D
< The “r8d” register.
DR_REG_R8L
< The “r8l” register.
DR_REG_R8W
< The “r8w” register.
DR_REG_R9D
< The “r9d” register.
DR_REG_R9L
< The “r9l” register.
DR_REG_R9W
< The “r9w” register.
DR_REG_R10
< The “r10” register.
DR_REG_R11
< The “r11” register.
DR_REG_R12
< The “r12” register.
DR_REG_R13
< The “r13” register.
DR_REG_R14
< The “r14” register.
DR_REG_R15
< The “r15” register.
DR_REG_R10D
< The “r10d” register.
DR_REG_R10L
< The “r10l” register.
DR_REG_R10W
< The “r10w” register.
DR_REG_R11D
< The “r11d” register.
DR_REG_R11L
< The “r11l” register.
DR_REG_R11W
< The “r11w” register.
DR_REG_R12D
< The “r12d” register.
DR_REG_R12L
< The “r12l” register.
DR_REG_R12W
< The “r12w” register.
DR_REG_R13D
< The “r13d” register.
DR_REG_R13L
< The “r13l” register.
DR_REG_R13W
< The “r13w” register.
DR_REG_R14D
< The “r14d” register.
DR_REG_R14L
< The “r14l” register.
DR_REG_R14W
< The “r14w” register.
DR_REG_R15D
< The “r15d” register.
DR_REG_R15L
< The “r15l” register.
DR_REG_R15W
< The “r15w” register.
DR_REG_RAX
< The “rax” register.
DR_REG_RBP
< The “rbp” register.
DR_REG_RBX
< The “rbx” register.
DR_REG_RCX
< The “rcx” register.
DR_REG_RDI
< The “rdi” register.
DR_REG_RDX
< The “rdx” register.
DR_REG_RSI
< The “rsi” register.
DR_REG_RSP
< The “rsp” register.
DR_REG_SI
< The “si” register.
DR_REG_SIL
< The “sil” register.
DR_REG_SP
< The “sp” register.
DR_REG_SPL
< The “spl” register.
DR_REG_ST0
< The “st0” register.
DR_REG_ST1
< The “st1” register.
DR_REG_ST2
< The “st2” register.
DR_REG_ST3
< The “st3” register.
DR_REG_ST4
< The “st4” register.
DR_REG_ST5
< The “st5” register.
DR_REG_ST6
< The “st6” register.
DR_REG_ST7
< The “st7” register.
DR_REG_VIRT0
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT1
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT2
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT3
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT4
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT5
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT6
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT7
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT8
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT9
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT10
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT11
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT12
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT13
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT14
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT15
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT16
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT17
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT18
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT19
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT20
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT21
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT22
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT23
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT24
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT25
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT26
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT27
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT28
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT29
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT30
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT31
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT32
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT33
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT34
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT35
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT36
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT37
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT38
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT39
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT40
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT41
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT42
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT43
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT44
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT45
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT46
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT47
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT48
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT49
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT50
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT51
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT52
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT53
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT54
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT55
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT56
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT57
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT58
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT59
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT60
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT61
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT62
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT63
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT64
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT65
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT66
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT67
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT68
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT69
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT70
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT71
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT72
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT73
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT74
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT75
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT76
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT77
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT78
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT79
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT80
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT81
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT82
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT83
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT84
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT85
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT86
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT87
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT88
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT89
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT90
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT91
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT92
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT93
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT94
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT95
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT96
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT97
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT98
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT99
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT100
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT101
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT102
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT103
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT104
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT105
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT106
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT107
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT108
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT109
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT110
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT111
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT112
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT113
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT114
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT115
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT116
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT117
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT118
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT119
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT120
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT121
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT122
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT123
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT124
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT125
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT126
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT127
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT128
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT129
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT130
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT131
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT132
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT133
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT134
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT135
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT136
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT137
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT138
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT139
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT140
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT141
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT142
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT143
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT144
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT145
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT146
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT147
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT148
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT149
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT150
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT151
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT152
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT153
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT154
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT155
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT156
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT157
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT158
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT159
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT160
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT161
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT162
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT163
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT164
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT165
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT166
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT167
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT168
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT169
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT170
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT171
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT172
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT173
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT174
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT175
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT176
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT177
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT178
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT179
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT180
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT181
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT182
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT183
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT184
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT185
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT186
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT187
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT188
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT189
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT190
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT191
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT192
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT193
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT194
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT195
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT196
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT197
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT198
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT199
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT200
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT201
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT202
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT203
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT204
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT205
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT206
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT207
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT208
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT209
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT210
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT211
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT212
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT213
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT214
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT215
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT216
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT217
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT218
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT219
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT220
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT221
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT222
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT223
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT224
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT225
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT226
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT227
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT228
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT229
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT230
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT231
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT232
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT233
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT234
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT235
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT236
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT237
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT238
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT239
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT240
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT241
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT242
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT243
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT244
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT245
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT246
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT247
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT248
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT249
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT250
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT251
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_VIRT252
The first virtual register. Note that all virtual registers named here are valid.
DR_REG_XMM0
< The “xmm0” register.
DR_REG_XMM1
< The “xmm1” register.
DR_REG_XMM2
< The “xmm2” register.
DR_REG_XMM3
< The “xmm3” register.
DR_REG_XMM4
< The “xmm4” register.
DR_REG_XMM5
< The “xmm5” register.
DR_REG_XMM6
< The “xmm6” register.
DR_REG_XMM7
< The “xmm7” register.
DR_REG_XMM8
< The “xmm8” register.
DR_REG_XMM9
< The “xmm9” register.
DR_REG_XMM10
< The “xmm10” register.
DR_REG_XMM11
< The “xmm11” register.
DR_REG_XMM12
< The “xmm12” register.
DR_REG_XMM13
< The “xmm13” register.
DR_REG_XMM14
< The “xmm14” register.
DR_REG_XMM15
< The “xmm15” register.
DR_REG_XMM16
< The “xmm16” register.
DR_REG_XMM17
< The “xmm17” register.
DR_REG_XMM18
< The “xmm18” register.
DR_REG_XMM19
< The “xmm19” register.
DR_REG_XMM20
< The “xmm20” register.
DR_REG_XMM21
< The “xmm21” register.
DR_REG_XMM22
< The “xmm22” register.
DR_REG_XMM23
< The “xmm23” register.
DR_REG_XMM24
< The “xmm24” register.
DR_REG_XMM25
< The “xmm25” register.
DR_REG_XMM26
< The “xmm26” register.
DR_REG_XMM27
< The “xmm27” register.
DR_REG_XMM28
< The “xmm28” register.
DR_REG_XMM29
< The “xmm29” register.
DR_REG_XMM30
< The “xmm30” register.
DR_REG_XMM31
< The “xmm31” register.
DR_REG_YMM0
< The “ymm0” register.
DR_REG_YMM1
< The “ymm1” register.
DR_REG_YMM2
< The “ymm2” register.
DR_REG_YMM3
< The “ymm3” register.
DR_REG_YMM4
< The “ymm4” register.
DR_REG_YMM5
< The “ymm5” register.
DR_REG_YMM6
< The “ymm6” register.
DR_REG_YMM7
< The “ymm7” register.
DR_REG_YMM8
< The “ymm8” register.
DR_REG_YMM9
< The “ymm9” register.
DR_REG_YMM10
< The “ymm10” register.
DR_REG_YMM11
< The “ymm11” register.
DR_REG_YMM12
< The “ymm12” register.
DR_REG_YMM13
< The “ymm13” register.
DR_REG_YMM14
< The “ymm14” register.
DR_REG_YMM15
< The “ymm15” register.
DR_REG_YMM16
< The “ymm16” register.
DR_REG_YMM17
< The “ymm17” register.
DR_REG_YMM18
< The “ymm18” register.
DR_REG_YMM19
< The “ymm19” register.
DR_REG_YMM20
< The “ymm20” register.
DR_REG_YMM21
< The “ymm21” register.
DR_REG_YMM22
< The “ymm22” register.
DR_REG_YMM23
< The “ymm23” register.
DR_REG_YMM24
< The “ymm24” register.
DR_REG_YMM25
< The “ymm25” register.
DR_REG_YMM26
< The “ymm26” register.
DR_REG_YMM27
< The “ymm27” register.
DR_REG_YMM28
< The “ymm28” register.
DR_REG_YMM29
< The “ymm29” register.
DR_REG_YMM30
< The “ymm30” register.
DR_REG_YMM31
< The “ymm31” register.
DR_REG_ZMM0
< The “zmm0” register.
DR_REG_ZMM1
< The “zmm1” register.
DR_REG_ZMM2
< The “zmm2” register.
DR_REG_ZMM3
< The “zmm3” register.
DR_REG_ZMM4
< The “zmm4” register.
DR_REG_ZMM5
< The “zmm5” register.
DR_REG_ZMM6
< The “zmm6” register.
DR_REG_ZMM7
< The “zmm7” register.
DR_REG_ZMM8
< The “zmm8” register.
DR_REG_ZMM9
< The “zmm9” register.
DR_REG_ZMM10
< The “zmm10” register.
DR_REG_ZMM11
< The “zmm11” register.
DR_REG_ZMM12
< The “zmm12” register.
DR_REG_ZMM13
< The “zmm13” register.
DR_REG_ZMM14
< The “zmm14” register.
DR_REG_ZMM15
< The “zmm15” register.
DR_REG_ZMM16
< The “zmm16” register.
DR_REG_ZMM17
< The “zmm17” register.
DR_REG_ZMM18
< The “zmm18” register.
DR_REG_ZMM19
< The “zmm19” register.
DR_REG_ZMM20
< The “zmm20” register.
DR_REG_ZMM21
< The “zmm21” register.
DR_REG_ZMM22
< The “zmm22” register.
DR_REG_ZMM23
< The “zmm23” register.
DR_REG_ZMM24
< The “zmm24” register.
DR_REG_ZMM25
< The “zmm25” register.
DR_REG_ZMM26
< The “zmm26” register.
DR_REG_ZMM27
< The “zmm27” register.
DR_REG_ZMM28
< The “zmm28” register.
DR_REG_ZMM29
< The “zmm29” register.
DR_REG_ZMM30
< The “zmm30” register.
DR_REG_ZMM31
< The “zmm31” register.
DR_SEEK_CUR
DR_SEEK_END
DR_SEEK_SET
DR_SEG_CS
< The “cs” register.
DR_SEG_DS
< The “ds” register.
DR_SEG_ES
< The “es” register.
DR_SEG_FS
< The “fs” register.
DR_SEG_GS
< The “gs” register.
DR_SEG_SS
< The “ss” register.
DR_VG_NUM_ARGS
Defines the maximum number of arguments that can be passed to a Valgrind annotation, and accordingly specifies the length of the array vg_client_request_t.args.
INVALID_FILE
OPSZ_0
< 0 bytes, for “sizeless” operands (for Intel, code ‘m’: used for both start addresses (lea, invlpg) and implicit constants (rol, fldl2e, etc.)
OPSZ_1
< 1 byte (for Intel, code ‘b’)
OPSZ_2
< 2 bytes (for Intel, code ‘w’)
OPSZ_3
< 3 bytes
OPSZ_4
< 4 bytes (for Intel, code ‘d’,‘si’)
OPSZ_6
< 6 bytes (for Intel, code ‘p’,‘s’)
OPSZ_8
< 8 bytes (for Intel, code ‘q’,‘pi’)
OPSZ_1_reg4
< Intel Rd/Mb: zero-extends if reg; used by pextrb
OPSZ_1b
< 1 bit
OPSZ_2_reg4
< Intel Rd/Mw: zero-extends if reg; used by pextrw
OPSZ_2_short1
< Intel ‘c’: 2/1 bytes (“2/1” means 2 bytes normally, but if another operand requests a short size then this size can accommodate by shifting to its short size, which is 1 byte).
OPSZ_2b
< 2 bits
OPSZ_3b
< 3 bits
OPSZ_4_of_32_evex64
< 32 bits: can be part of YMM or ZMM register.
OPSZ_4_reg16
< Intel Udq/Md: 4 bytes of xmm or 4 bytes of memory; used by insertps.
OPSZ_4_rex8
< Intel ‘d/q’ (like ‘v’ but never 2 bytes) or ‘y’.
OPSZ_4_rex8_short2
< Intel ‘v’: 8/4/2 bytes
OPSZ_4_short2
< Intel ‘z’: 4/2 bytes
OPSZ_4_short2xi4
< Intel ‘f64’: 4_short2 for 32-bit or 64-bit AMD, always 4 for 64-bit Intel
OPSZ_4b
< 4 bits
OPSZ_4x8
< Full register size with no variation by prefix. Used for control and debug register moves and for Intel MPX.
OPSZ_4x8_short2
< Intel ‘v’/‘d64’ for stack operations. Also 64-bit address-size specified operands, which are short4 rather than short2 in 64-bit mode (but short2 in 32-bit mode). Note that this IR does not distinguish extra stack operations performed by OP_enter w/ non-zero immed.
OPSZ_4x8_short2xi8
< Intel ‘f64’: 4_short2 for 32-bit, 8_short2 for 64-bit AMD, always 8 for 64-bit Intel
OPSZ_5b
< 5 bits
OPSZ_6_irex10_short4
< Intel ‘p’: On Intel processors this is 10/6/4 bytes for segment selector + address. On AMD processors this is 6/4 bytes for segment selector + address (rex is ignored).
OPSZ_6b
< 6 bits
OPSZ_6x10
< Intel ‘s’: 6-byte (10-byte for 64-bit mode) table base + limit
OPSZ_7b
< 7 bits
OPSZ_8_of_32_evex64
< 64 bits: can be part of YMM or ZMM register.
OPSZ_8_rex16
< cmpxcgh8b/cmpxchg16b
OPSZ_8_rex16_short4
< Intel ‘v’ * 2 (far call/ret)
OPSZ_8_short2
< partially resolved 4x8_short2
OPSZ_8_short4
< Intel ‘a’: pair of 4_short2 (bound)
OPSZ_8x16
< 8 or 16 bytes, but not based on rex prefix, instead dependent on 32-bit/64-bit mode.
OPSZ_9b
< 9 bits
OPSZ_10
< Intel ‘s’ 64-bit, or double extended precision floating point (latter used by fld, fstp, fbld, fbstp)
OPSZ_12
< 12 bytes: 32-bit iret
OPSZ_14
< FPU operating environment with short data size (fldenv, fnstenv)
OPSZ_15
< All but one byte of an xmm register (used by OP_vpinsrb).
OPSZ_16
< 16 bytes (for Intel, code ‘dq’,‘ps’,‘pd’,‘ss’,‘sd’, or AMD ‘o’)
OPSZ_20
< 20 bytes. Needed for load/store of register lists.
OPSZ_24
< 24 bytes. Needed for load/store of register lists.
OPSZ_28
< FPU operating environment with normal data size (fldenv, fnstenv)
OPSZ_32
< 32 bytes: pusha/popa Also Intel ‘qq’,‘pd’,‘ps’,‘x’: 32 bytes (256 bits)
OPSZ_36
< 36 bytes. Needed for load/store of register lists.
OPSZ_40
< 40 bytes: 64-bit iret
OPSZ_44
< 44 bytes. Needed for load/store of register lists.
OPSZ_48
< 48 bytes. Needed for load/store of register lists.
OPSZ_52
< 52 bytes. Needed for load/store of register lists.
OPSZ_56
< 56 bytes. Needed for load/store of register lists.
OPSZ_60
< 60 bytes. Needed for load/store of register lists.
OPSZ_64
< 64 bytes. Needed for load/store of register lists. Also Intel: 64 bytes (512 bits)
OPSZ_68
< 68 bytes. Needed for load/store of register lists.
OPSZ_72
< 72 bytes. Needed for load/store of register lists.
OPSZ_76
< 76 bytes. Needed for load/store of register lists.
OPSZ_80
< 80 bytes. Needed for load/store of register lists.
OPSZ_84
< 84 bytes. Needed for load/store of register lists.
OPSZ_88
< 88 bytes. Needed for load/store of register lists.
OPSZ_92
< 92 bytes. Needed for load/store of register lists.
OPSZ_94
< FPU state with short data size (fnsave, frstor)
OPSZ_96
< 96 bytes. Needed for load/store of register lists.
OPSZ_10b
< 10 bits
OPSZ_11b
< 11 bits
OPSZ_12_rex40_short6
< unresolved iret
OPSZ_12b
< 12 bits
OPSZ_16_of_32_evex64
< 128 bits: half of YMM or quarter of ZMM depending on EVEX.LL’.
OPSZ_16_vex32
< 16 or 32 bytes depending on VEX.L (AMD/Intel ‘x’).
OPSZ_16_vex32_evex64
< 16, 32, or 64 bytes depending on EVEX.L and EVEX.LL’.
OPSZ_20b
< 20 bits
OPSZ_25b
< 25 bits
OPSZ_28_short14
< FPU operating env variable data size (fldenv, fnstenv)
OPSZ_32_of_64
< 256 bits: half of ZMM.
OPSZ_32_short16
< unresolved pusha/popa
OPSZ_100
< 100 bytes. Needed for load/store of register lists.
OPSZ_104
< 104 bytes. Needed for load/store of register lists.
OPSZ_108
< FPU state with normal data size (fnsave, frstor)
OPSZ_112
< 112 bytes. Needed for load/store of register lists.
OPSZ_116
< 116 bytes. Needed for load/store of register lists.
OPSZ_120
< 120 bytes. Needed for load/store of register lists.
OPSZ_124
< 124 bytes. Needed for load/store of register lists.
OPSZ_128
< 128 bytes. Needed for load/store of register lists.
OPSZ_192
< 192 bytes. The size of 3 512-bit SVE Z registers.
OPSZ_256
< 256 bytes. Needed for RISC-V vector extension with LMUL.
OPSZ_512
< FPU, MMX, XMM state (fxsave, fxrstor)
OPSZ_108_short94
< FPU state with variable data size (fnsave, frstor)
OPSZ_FIRST
OPSZ_LAST
OPSZ_NA
< Sentinel value: not a valid size.
OPSZ_SCALABLE
< Scalable size for SVE vector registers.
OPSZ_SCALABLE_PRED
< Scalable size for SVE predicate registers.
OPSZ_VAR_REGLIST
At encode or decode time, the size will match the size of the register list operand in the containing instruction’s operands.
OPSZ_addr
< OPSZ_4x8 but varies by the address prefix, not the data prefix.
OPSZ_vex32_evex64
< 32 or 64 bytes depending on EVEX.L and EVEX.LL’.
OPSZ_xsave
< Size is > 512 bytes: use cpuid to determine. Used for FPU, MMX, XMM, etc. state by xsave and xrstor.
OP_AFTER_LAST
OP_CONTD
OP_FIRST
< First real opcode.
OP_INVALID
OP_LABEL
OP_LAST
< Last real opcode.
OP_UNDECODED
OP_aaa
< IA-32/AMD64 aaa opcode.
OP_aad
< IA-32/AMD64 aad opcode.
OP_aam
< IA-32/AMD64 aam opcode.
OP_aas
< IA-32/AMD64 aas opcode.
OP_adc
< IA-32/AMD64 adc opcode.
OP_adcx
< IA-32/AMD64 adox opcode.
OP_add
< IA-32/AMD64 add opcode.
OP_addpd
< IA-32/AMD64 addpd opcode.
OP_addps
< IA-32/AMD64 addps opcode.
OP_addsd
< IA-32/AMD64 addsd opcode.
OP_addss
< IA-32/AMD64 addss opcode.
OP_addsubpd
< IA-32/AMD64 addsubpd opcode.
OP_addsubps
< IA-32/AMD64 addsubps opcode.
OP_adox
< IA-32/AMD64 adox opcode.
OP_aesdec
< IA-32/AMD64 aesdec opcode.
OP_aesdeclast
< IA-32/AMD64 aesdeclast opcode.
OP_aesenc
< IA-32/AMD64 aesenc opcode.
OP_aesenclast
< IA-32/AMD64 aesenclast opcode.
OP_aesimc
< IA-32/AMD64 aesimc opcode.
OP_aeskeygenassist
< IA-32/AMD64 aeskeygenassist opcode.
OP_and
< IA-32/AMD64 and opcode.
OP_andn
< IA-32/AMD64 andn opcode.
OP_andnpd
< IA-32/AMD64 andnpd opcode.
OP_andnps
< IA-32/AMD64 andnps opcode.
OP_andpd
< IA-32/AMD64 andpd opcode.
OP_andps
< IA-32/AMD64 andps opcode.
OP_arpl
< IA-32/AMD64 arpl opcode.
OP_bextr
< IA-32/AMD64 bextr opcode.
OP_blcfill
< IA-32/AMD64 blcfill opcode.
OP_blci
< IA-32/AMD64 blci opcode.
OP_blcic
< IA-32/AMD64 blcic opcode.
OP_blcmsk
< IA-32/AMD64 blcmsk opcode.
OP_blcs
< IA-32/AMD64 blcs opcode.
OP_blendpd
< IA-32/AMD64 blendpd opcode.
OP_blendps
< IA-32/AMD64 blendps opcode.
OP_blendvpd
< IA-32/AMD64 blendvpd opcode.
OP_blendvps
< IA-32/AMD64 blendvps opcode.
OP_blsfill
< IA-32/AMD64 blsfill opcode.
OP_blsi
< IA-32/AMD64 blsi opcode.
OP_blsic
< IA-32/AMD64 blsic opcode.
OP_blsmsk
< IA-32/AMD64 blsmsk opcode.
OP_blsr
< IA-32/AMD64 blsr opcode.
OP_bndcl
< IA-32/AMD64 MPX OP_bndcl opcode.
OP_bndcn
< IA-32/AMD64 MPX OP_bndcn opcode.
OP_bndcu
< IA-32/AMD64 MPX OP_bndcu opcode.
OP_bndldx
< IA-32/AMD64 MPX OP_bndldx opcode.
OP_bndmk
< IA-32/AMD64 MPX OP_bndmk opcode.
OP_bndmov
< IA-32/AMD64 MPX OP_bndmov opcode.
OP_bndstx
< IA-32/AMD64 MPX OP_bndstx opcode.
OP_bound
< IA-32/AMD64 bound opcode.
OP_bsf
< IA-32/AMD64 bsf opcode.
OP_bsr
< IA-32/AMD64 bsr opcode.
OP_bswap
< IA-32/AMD64 bswap opcode.
OP_bt
< IA-32/AMD64 bt opcode.
OP_btc
< IA-32/AMD64 btc opcode.
OP_btr
< IA-32/AMD64 btr opcode.
OP_bts
< IA-32/AMD64 bts opcode.
OP_bzhi
< IA-32/AMD64 bzhi opcode.
OP_call
< IA-32/AMD64 call opcode.
OP_call_far
< IA-32/AMD64 call_far opcode.
OP_call_far_ind
< IA-32/AMD64 call_far_ind opcode.
OP_call_ind
< IA-32/AMD64 call_ind opcode.
OP_cdq
< IA-32/AMD64 cdq opcode.
OP_clac
< IA-32/AMD64 clac opcode.
OP_clc
< IA-32/AMD64 clc opcode.
OP_cld
< IA-32/AMD64 cld opcode.
OP_cldemote
< IA-32/AMD64 cldemote opcode.
OP_clflush
< IA-32/AMD64 clflush opcode.
OP_clflushopt
< IA-32/AMD64 clflushopt opcode.
OP_clgi
< IA-32/AMD64 clgi opcode.
OP_cli
< IA-32/AMD64 cli opcode.
OP_clts
< IA-32/AMD64 clts opcode.
OP_clwb
< IA-32/AMD64 clwb opcode.
OP_cmc
< IA-32/AMD64 cmc opcode.
OP_cmovb
< IA-32/AMD64 cmovb opcode.
OP_cmovbe
< IA-32/AMD64 cmovbe opcode.
OP_cmovl
< IA-32/AMD64 cmovl opcode.
OP_cmovle
< IA-32/AMD64 cmovle opcode.
OP_cmovnb
< IA-32/AMD64 cmovnb opcode.
OP_cmovnbe
< IA-32/AMD64 cmovnbe opcode.
OP_cmovnl
< IA-32/AMD64 cmovnl opcode.
OP_cmovnle
< IA-32/AMD64 cmovnle opcode.
OP_cmovno
< IA-32/AMD64 cmovno opcode.
OP_cmovnp
< IA-32/AMD64 cmovnp opcode.
OP_cmovns
< IA-32/AMD64 cmovns opcode.
OP_cmovnz
< IA-32/AMD64 cmovnz opcode.
OP_cmovo
< IA-32/AMD64 cmovo opcode.
OP_cmovp
< IA-32/AMD64 cmovp opcode.
OP_cmovs
< IA-32/AMD64 cmovs opcode.
OP_cmovz
< IA-32/AMD64 cmovz opcode.
OP_cmp
< IA-32/AMD64 cmp opcode.
OP_cmppd
< IA-32/AMD64 cmppd opcode.
OP_cmpps
< IA-32/AMD64 cmpps opcode.
OP_cmps
< IA-32/AMD64 cmps opcode.
OP_cmpsd
< IA-32/AMD64 cmpsd opcode.
OP_cmpss
< IA-32/AMD64 cmpss opcode.
OP_cmpxchg
< IA-32/AMD64 cmpxchg opcode.
OP_cmpxchg8b
< IA-32/AMD64 cmpxchg8b opcode.
OP_comisd
< IA-32/AMD64 comisd opcode.
OP_comiss
< IA-32/AMD64 comiss opcode.
OP_cpuid
< IA-32/AMD64 cpuid opcode.
OP_crc32
< IA-32/AMD64 crc32 opcode.
OP_cvtdq2pd
< IA-32/AMD64 cvtdq2pd opcode.
OP_cvtdq2ps
< IA-32/AMD64 cvtdq2ps opcode.
OP_cvtpd2dq
< IA-32/AMD64 cvtpd2dq opcode.
OP_cvtpd2pi
< IA-32/AMD64 cvtpd2pi opcode.
OP_cvtpd2ps
< IA-32/AMD64 cvtpd2ps opcode.
OP_cvtpi2pd
< IA-32/AMD64 cvtpi2pd opcode.
OP_cvtpi2ps
< IA-32/AMD64 cvtpi2ps opcode.
OP_cvtps2dq
< IA-32/AMD64 cvtps2dq opcode.
OP_cvtps2pd
< IA-32/AMD64 cvtps2pd opcode.
OP_cvtps2pi
< IA-32/AMD64 cvtps2pi opcode.
OP_cvtsd2si
< IA-32/AMD64 cvtsd2si opcode.
OP_cvtsd2ss
< IA-32/AMD64 cvtsd2ss opcode.
OP_cvtsi2sd
< IA-32/AMD64 cvtsi2sd opcode.
OP_cvtsi2ss
< IA-32/AMD64 cvtsi2ss opcode.
OP_cvtss2sd
< IA-32/AMD64 cvtss2sd opcode.
OP_cvtss2si
< IA-32/AMD64 cvtss2si opcode.
OP_cvttpd2dq
< IA-32/AMD64 cvttpd2dq opcode.
OP_cvttpd2pi
< IA-32/AMD64 cvttpd2pi opcode.
OP_cvttps2dq
< IA-32/AMD64 cvttps2dq opcode.
OP_cvttps2pi
< IA-32/AMD64 cvttps2pi opcode.
OP_cvttsd2si
< IA-32/AMD64 cvttsd2si opcode.
OP_cvttss2si
< IA-32/AMD64 cvttss2si opcode.
OP_cwde
< IA-32/AMD64 cwde opcode.
OP_daa
< IA-32/AMD64 daa opcode.
OP_das
< IA-32/AMD64 das opcode.
OP_dec
< IA-32/AMD64 dec opcode.
OP_div
< IA-32/AMD64 div opcode.
OP_divpd
< IA-32/AMD64 divpd opcode.
OP_divps
< IA-32/AMD64 divps opcode.
OP_divsd
< IA-32/AMD64 divsd opcode.
OP_divss
< IA-32/AMD64 divss opcode.
OP_dppd
< IA-32/AMD64 dppd opcode.
OP_dpps
< IA-32/AMD64 dpps opcode.
OP_emms
< IA-32/AMD64 emms opcode.
OP_encls
< IA-32/AMD64 SGX encls opcode.
OP_enclu
< IA-32/AMD64 SGX enclu opcode.
OP_enclv
< IA-32/AMD64 SGX enclv opcode.
OP_enqcmd
< IA-32/AMD64 enqcmd opcode.
OP_enqcmds
< IA-32/AMD64 enqcmds opcode.
OP_enter
< IA-32/AMD64 enter opcode.
OP_extractps
< IA-32/AMD64 extractps opcode.
OP_extrq
< IA-32/AMD64 extrq opcode.
OP_f2xm1
< IA-32/AMD64 f2xm1 opcode.
OP_fabs
< IA-32/AMD64 fabs opcode.
OP_fadd
< IA-32/AMD64 fadd opcode.
OP_faddp
< IA-32/AMD64 faddp opcode.
OP_fbld
< IA-32/AMD64 fbld opcode.
OP_fbstp
< IA-32/AMD64 fbstp opcode.
OP_fchs
< IA-32/AMD64 fchs opcode.
OP_fcmovb
< IA-32/AMD64 fcmovb opcode.
OP_fcmovbe
< IA-32/AMD64 fcmovbe opcode.
OP_fcmove
< IA-32/AMD64 fcmove opcode.
OP_fcmovnb
< IA-32/AMD64 fcmovnb opcode.
OP_fcmovnbe
< IA-32/AMD64 fcmovnbe opcode.
OP_fcmovne
< IA-32/AMD64 fcmovne opcode.
OP_fcmovnu
< IA-32/AMD64 fcmovnu opcode.
OP_fcmovu
< IA-32/AMD64 fcmovu opcode.
OP_fcom
< IA-32/AMD64 fcom opcode.
OP_fcomi
< IA-32/AMD64 fcomi opcode.
OP_fcomip
< IA-32/AMD64 fcomip opcode.
OP_fcomp
< IA-32/AMD64 fcomp opcode.
OP_fcompp
< IA-32/AMD64 fcompp opcode.
OP_fcos
< IA-32/AMD64 fcos opcode.
OP_fdecstp
< IA-32/AMD64 fdecstp opcode.
OP_fdiv
< IA-32/AMD64 fdiv opcode.
OP_fdivp
< IA-32/AMD64 fdivp opcode.
OP_fdivr
< IA-32/AMD64 fdivr opcode.
OP_fdivrp
< IA-32/AMD64 fdivrp opcode.
OP_femms
< IA-32/AMD64 femms opcode.
OP_ffree
< IA-32/AMD64 ffree opcode.
OP_ffreep
< IA-32/AMD64 ffreep opcode.
OP_fiadd
< IA-32/AMD64 fiadd opcode.
OP_ficom
< IA-32/AMD64 ficom opcode.
OP_ficomp
< IA-32/AMD64 ficomp opcode.
OP_fidiv
< IA-32/AMD64 fidiv opcode.
OP_fidivr
< IA-32/AMD64 fidivr opcode.
OP_fild
< IA-32/AMD64 fild opcode.
OP_fimul
< IA-32/AMD64 fimul opcode.
OP_fincstp
< IA-32/AMD64 fincstp opcode.
OP_fist
< IA-32/AMD64 fist opcode.
OP_fistp
< IA-32/AMD64 fistp opcode.
OP_fisttp
< IA-32/AMD64 fisttp opcode.
OP_fisub
< IA-32/AMD64 fisub opcode.
OP_fisubr
< IA-32/AMD64 fisubr opcode.
OP_fld
< IA-32/AMD64 fld opcode.
OP_fld1
< IA-32/AMD64 fld1 opcode.
OP_fldcw
< IA-32/AMD64 fldcw opcode.
OP_fldenv
< IA-32/AMD64 fldenv opcode.
OP_fldl2e
< IA-32/AMD64 fldl2e opcode.
OP_fldl2t
< IA-32/AMD64 fldl2t opcode.
OP_fldlg2
< IA-32/AMD64 fldlg2 opcode.
OP_fldln2
< IA-32/AMD64 fldln2 opcode.
OP_fldpi
< IA-32/AMD64 fldpi opcode.
OP_fldz
< IA-32/AMD64 fldz opcode.
OP_fmul
< IA-32/AMD64 fmul opcode.
OP_fmulp
< IA-32/AMD64 fmulp opcode.
OP_fnclex
< IA-32/AMD64 fnclex opcode.
OP_fninit
< IA-32/AMD64 fninit opcode.
OP_fnop
< IA-32/AMD64 fnop opcode.
OP_fnsave
< IA-32/AMD64 fnsave opcode.
OP_fnstcw
< IA-32/AMD64 fnstcw opcode.
OP_fnstenv
< IA-32/AMD64 fnstenv opcode.
OP_fnstsw
< IA-32/AMD64 fnstsw opcode.
OP_fpatan
< IA-32/AMD64 fpatan opcode.
OP_fprem
< IA-32/AMD64 fprem opcode.
OP_fprem1
< IA-32/AMD64 fprem1 opcode.
OP_fptan
< IA-32/AMD64 fptan opcode.
OP_frndint
< IA-32/AMD64 frndint opcode.
OP_frstor
< IA-32/AMD64 frstor opcode.
OP_fscale
< IA-32/AMD64 fscale opcode.
OP_fsin
< IA-32/AMD64 fsin opcode.
OP_fsincos
< IA-32/AMD64 fsincos opcode.
OP_fsqrt
< IA-32/AMD64 fsqrt opcode.
OP_fst
< IA-32/AMD64 fst opcode.
OP_fstp
< IA-32/AMD64 fstp opcode.
OP_fsub
< IA-32/AMD64 fsub opcode.
OP_fsubp
< IA-32/AMD64 fsubp opcode.
OP_fsubr
< IA-32/AMD64 fsubr opcode.
OP_fsubrp
< IA-32/AMD64 fsubrp opcode.
OP_ftst
< IA-32/AMD64 ftst opcode.
OP_fucom
< IA-32/AMD64 fucom opcode.
OP_fucomi
< IA-32/AMD64 fucomi opcode.
OP_fucomip
< IA-32/AMD64 fucomip opcode.
OP_fucomp
< IA-32/AMD64 fucomp opcode.
OP_fucompp
< IA-32/AMD64 fucompp opcode.
OP_fwait
< IA-32/AMD64 fwait opcode.
OP_fxam
< IA-32/AMD64 fxam opcode.
OP_fxch
< IA-32/AMD64 fxch opcode.
OP_fxrstor32
< IA-32/AMD64 fxrstor opcode.
OP_fxrstor64
< IA-32/AMD64 fxrstor64 opcode.
OP_fxsave32
< IA-32/AMD64 fxsave opcode.
OP_fxsave64
< IA-32/AMD64 fxsave64 opcode.
OP_fxtract
< IA-32/AMD64 fxtract opcode.
OP_fyl2x
< IA-32/AMD64 fyl2x opcode.
OP_fyl2xp1
< IA-32/AMD64 fyl2xp1 opcode.
OP_getsec
< IA-32/AMD64 getsec opcode.
OP_gf2p8affineinvqb
< IA-32/AMD64 gf2p8affineinvqb opcode.
OP_gf2p8affineqb
< IA-32/AMD64 gf2p8affineqb opcode.
OP_gf2p8mulb
< IA-32/AMD64 gf2p8mulb opcode.
OP_haddpd
< IA-32/AMD64 haddpd opcode.
OP_haddps
< IA-32/AMD64 haddps opcode.
OP_hlt
< IA-32/AMD64 hlt opcode.
OP_hsubpd
< IA-32/AMD64 hsubpd opcode.
OP_hsubps
< IA-32/AMD64 hsubps opcode.
OP_idiv
< IA-32/AMD64 idiv opcode.
OP_imul
< IA-32/AMD64 imul opcode.
OP_in
< IA-32/AMD64 in opcode.
OP_inc
< IA-32/AMD64 inc opcode.
OP_ins
< IA-32/AMD64 ins opcode.
OP_insertps
< IA-32/AMD64 insertps opcode.
OP_insertq
< IA-32/AMD64 insertq opcode.
OP_int
< IA-32/AMD64 int opcode.
OP_int1
< IA-32/AMD64 int1 opcode.
OP_int3
< IA-32/AMD64 int3 opcode.
OP_into
< IA-32/AMD64 into opcode.
OP_invd
< IA-32/AMD64 invd opcode.
OP_invept
< IA-32/AMD64 invept opcode.
OP_invlpg
< IA-32/AMD64 invlpg opcode.
OP_invlpga
< IA-32/AMD64 invlpga opcode.
OP_invpcid
< IA-32/AMD64 invpcid opcode.
OP_invvpid
< IA-32/AMD64 invvpid opcode.
OP_iret
< IA-32/AMD64 iret opcode.
OP_jb
< IA-32/AMD64 jb opcode.
OP_jb_short
< IA-32/AMD64 jb_short opcode.
OP_jbe
< IA-32/AMD64 jbe opcode.
OP_jbe_short
< IA-32/AMD64 jbe_short opcode.
OP_jecxz
< IA-32/AMD64 jecxz opcode.
OP_jl
< IA-32/AMD64 jl opcode.
OP_jl_short
< IA-32/AMD64 jl_short opcode.
OP_jle
< IA-32/AMD64 jle opcode.
OP_jle_short
< IA-32/AMD64 jle_short opcode.
OP_jmp
< IA-32/AMD64 jmp opcode.
OP_jmp_far
< IA-32/AMD64 jmp_far opcode.
OP_jmp_far_ind
< IA-32/AMD64 jmp_far_ind opcode.
OP_jmp_ind
< IA-32/AMD64 jmp_ind opcode.
OP_jmp_short
< IA-32/AMD64 jmp_short opcode.
OP_jnb
< IA-32/AMD64 jnb opcode.
OP_jnb_short
< IA-32/AMD64 jnb_short opcode.
OP_jnbe
< IA-32/AMD64 jnbe opcode.
OP_jnbe_short
< IA-32/AMD64 jnbe_short opcode.
OP_jnl
< IA-32/AMD64 jnl opcode.
OP_jnl_short
< IA-32/AMD64 jnl_short opcode.
OP_jnle
< IA-32/AMD64 jnle opcode.
OP_jnle_short
< IA-32/AMD64 jnle_short opcode.
OP_jno
< IA-32/AMD64 jno opcode.
OP_jno_short
< IA-32/AMD64 jno_short opcode.
OP_jnp
< IA-32/AMD64 jnp opcode.
OP_jnp_short
< IA-32/AMD64 jnp_short opcode.
OP_jns
< IA-32/AMD64 jns opcode.
OP_jns_short
< IA-32/AMD64 jns_short opcode.
OP_jnz
< IA-32/AMD64 jnz opcode.
OP_jnz_short
< IA-32/AMD64 jnz_short opcode.
OP_jo
< IA-32/AMD64 jo opcode.
OP_jo_short
< IA-32/AMD64 jo_short opcode.
OP_jp
< IA-32/AMD64 jp opcode.
OP_jp_short
< IA-32/AMD64 jp_short opcode.
OP_js
< IA-32/AMD64 js opcode.
OP_js_short
< IA-32/AMD64 js_short opcode.
OP_jz
< IA-32/AMD64 jz opcode.
OP_jz_short
< IA-32/AMD64 jz_short opcode.
OP_kaddb
< IA-32/AMD64 AVX-512 kaddb opcode.
OP_kaddd
< IA-32/AMD64 AVX-512 kaddd opcode.
OP_kaddq
< IA-32/AMD64 AVX-512 kaddq opcode.
OP_kaddw
< IA-32/AMD64 AVX-512 kaddw opcode.
OP_kandb
< IA-32/AMD64 AVX-512 kandb opcode.
OP_kandd
< IA-32/AMD64 AVX-512 kandd opcode.
OP_kandnb
< IA-32/AMD64 AVX-512 kandnb opcode.
OP_kandnd
< IA-32/AMD64 AVX-512 kandnd opcode.
OP_kandnq
< IA-32/AMD64 AVX-512 kandnq opcode.
OP_kandnw
< IA-32/AMD64 AVX-512 kandnw opcode.
OP_kandq
< IA-32/AMD64 AVX-512 kandq opcode.
OP_kandw
< IA-32/AMD64 AVX-512 kandw opcode.
OP_kmovb
< IA-32/AMD64 AVX-512 kmovb opcode.
OP_kmovd
< IA-32/AMD64 AVX-512 kmovd opcode.
OP_kmovq
< IA-32/AMD64 AVX-512 kmovq opcode.
OP_kmovw
< IA-32/AMD64 AVX-512 kmovw opcode.
OP_knotb
< IA-32/AMD64 AVX-512 knotb opcode.
OP_knotd
< IA-32/AMD64 AVX-512 knotd opcode.
OP_knotq
< IA-32/AMD64 AVX-512 knotq opcode.
OP_knotw
< IA-32/AMD64 AVX-512 knotw opcode.
OP_korb
< IA-32/AMD64 AVX-512 korb opcode.
OP_kord
< IA-32/AMD64 AVX-512 kord opcode.
OP_korq
< IA-32/AMD64 AVX-512 korq opcode.
OP_kortestb
< IA-32/AMD64 AVX-512 kortestb opcode.
OP_kortestd
< IA-32/AMD64 AVX-512 kortestd opcode.
OP_kortestq
< IA-32/AMD64 AVX-512 kortestq opcode.
OP_kortestw
< IA-32/AMD64 AVX-512 kortestw opcode.
OP_korw
< IA-32/AMD64 AVX-512 korw opcode.
OP_kshiftlb
< IA-32/AMD64 AVX-512 kshiftlb opcode.
OP_kshiftld
< IA-32/AMD64 AVX-512 kshiftld opcode.
OP_kshiftlq
< IA-32/AMD64 AVX-512 kshiftlq opcode.
OP_kshiftlw
< IA-32/AMD64 AVX-512 kshiftlw opcode.
OP_kshiftrb
< IA-32/AMD64 AVX-512 kshiftrb opcode.
OP_kshiftrd
< IA-32/AMD64 AVX-512 kshiftrd opcode.
OP_kshiftrq
< IA-32/AMD64 AVX-512 kshiftrq opcode.
OP_kshiftrw
< IA-32/AMD64 AVX-512 kshiftrw opcode.
OP_ktestb
< IA-32/AMD64 AVX-512 ktestd opcode.
OP_ktestd
< IA-32/AMD64 AVX-512 ktestd opcode.
OP_ktestq
< IA-32/AMD64 AVX-512 ktestd opcode.
OP_ktestw
< IA-32/AMD64 AVX-512 ktestd opcode.
OP_kunpckbw
< IA-32/AMD64 AVX-512 kunpckbw opcode.
OP_kunpckdq
< IA-32/AMD64 AVX-512 kunpckdq opcode.
OP_kunpckwd
< IA-32/AMD64 AVX-512 kunpckwd opcode.
OP_kxnorb
< IA-32/AMD64 AVX-512 kxnorb opcode.
OP_kxnord
< IA-32/AMD64 AVX-512 kxnord opcode.
OP_kxnorq
< IA-32/AMD64 AVX-512 kxnorq opcode.
OP_kxnorw
< IA-32/AMD64 AVX-512 kxnorw opcode.
OP_kxorb
< IA-32/AMD64 AVX-512 kxorb opcode.
OP_kxord
< IA-32/AMD64 AVX-512 kxord opcode.
OP_kxorq
< IA-32/AMD64 AVX-512 kxorq opcode.
OP_kxorw
< IA-32/AMD64 AVX-512 kxorw opcode.
OP_lahf
< IA-32/AMD64 lahf opcode.
OP_lar
< IA-32/AMD64 lar opcode.
OP_lddqu
< IA-32/AMD64 lddqu opcode.
OP_ldmxcsr
< IA-32/AMD64 ldmxcsr opcode.
OP_lds
< IA-32/AMD64 lds opcode.
OP_lea
< IA-32/AMD64 lea opcode.
OP_leave
< IA-32/AMD64 leave opcode.
OP_les
< IA-32/AMD64 les opcode.
OP_lfence
< IA-32/AMD64 lfence opcode.
OP_lfs
< IA-32/AMD64 lfs opcode.
OP_lgdt
< IA-32/AMD64 lgdt opcode.
OP_lgs
< IA-32/AMD64 lgs opcode.
OP_lidt
< IA-32/AMD64 lidt opcode.
OP_lldt
< IA-32/AMD64 lldt opcode.
OP_llwpcb
< IA-32/AMD64 llwpcb opcode.
OP_lmsw
< IA-32/AMD64 lmsw opcode.
OP_lods
< IA-32/AMD64 lods opcode.
OP_loop
< IA-32/AMD64 loop opcode.
OP_loope
< IA-32/AMD64 loope opcode.
OP_loopne
< IA-32/AMD64 loopne opcode.
OP_lsl
< IA-32/AMD64 lsl opcode.
OP_lss
< IA-32/AMD64 lss opcode.
OP_ltr
< IA-32/AMD64 ltr opcode.
OP_lwpins
< IA-32/AMD64 lwpins opcode.
OP_lwpval
< IA-32/AMD64 lwpval opcode.
OP_lzcnt
< IA-32/AMD64 lzcnt opcode.
OP_maskmovdqu
< IA-32/AMD64 maskmovdqu opcode.
OP_maskmovq
< IA-32/AMD64 maskmovq opcode.
OP_maxpd
< IA-32/AMD64 maxpd opcode.
OP_maxps
< IA-32/AMD64 maxps opcode.
OP_maxsd
< IA-32/AMD64 maxsd opcode.
OP_maxss
< IA-32/AMD64 maxss opcode.
OP_mfence
< IA-32/AMD64 mfence opcode.
OP_minpd
< IA-32/AMD64 minpd opcode.
OP_minps
< IA-32/AMD64 minps opcode.
OP_minsd
< IA-32/AMD64 minsd opcode.
OP_minss
< IA-32/AMD64 minss opcode.
OP_monitor
< IA-32/AMD64 monitor opcode.
OP_monitorx
< AMD64 monitorx opcode.
OP_mov_imm
< IA-32/AMD64 mov_imm opcode.
OP_mov_ld
< IA-32/AMD64 mov_ld opcode.
OP_mov_priv
< IA-32/AMD64 mov_priv opcode.
OP_mov_seg
< IA-32/AMD64 mov_seg opcode.
OP_mov_st
< IA-32/AMD64 mov_st opcode.
OP_movapd
< IA-32/AMD64 movapd opcode.
OP_movaps
< IA-32/AMD64 movaps opcode.
OP_movbe
< IA-32/AMD64 movbe opcode.
OP_movd
< IA-32/AMD64 movd opcode.
OP_movddup
< IA-32/AMD64 movddup opcode.
OP_movdir64b
< IA-32/AMD64 movdir64b opcode.
OP_movdiri
< IA-32/AMD64 movdiri opcode.
OP_movdq2q
< IA-32/AMD64 movdq2q opcode.
OP_movdqa
< IA-32/AMD64 movdqa opcode.
OP_movdqu
< IA-32/AMD64 movdqu opcode.
OP_movhpd
< IA-32/AMD64 movhpd opcode.
OP_movhps
< IA-32/AMD64 movhps opcode.
OP_movlpd
< IA-32/AMD64 movlpd opcode.
OP_movlps
< IA-32/AMD64 movlps opcode.
OP_movmskpd
< IA-32/AMD64 movmskpd opcode.
OP_movmskps
< IA-32/AMD64 movmskps opcode.
OP_movntdq
< IA-32/AMD64 movntdq opcode.
OP_movntdqa
< IA-32/AMD64 movntdqa opcode.
OP_movnti
< IA-32/AMD64 movnti opcode.
OP_movntpd
< IA-32/AMD64 movntpd opcode.
OP_movntps
< IA-32/AMD64 movntps opcode.
OP_movntq
< IA-32/AMD64 movntq opcode.
OP_movntsd
< IA-32/AMD64 movntsd opcode.
OP_movntss
< IA-32/AMD64 movntss opcode.
OP_movq
< IA-32/AMD64 movq opcode.
OP_movq2dq
< IA-32/AMD64 movq2dq opcode.
OP_movs
< IA-32/AMD64 movs opcode.
OP_movsd
< IA-32/AMD64 movsd opcode.
OP_movshdup
< IA-32/AMD64 movshdup opcode.
OP_movsldup
< IA-32/AMD64 movsldup opcode.
OP_movss
< IA-32/AMD64 movss opcode.
OP_movsx
< IA-32/AMD64 movsx opcode.
OP_movsxd
< IA-32/AMD64 movsxd opcode.
OP_movupd
< IA-32/AMD64 movupd opcode.
OP_movups
< IA-32/AMD64 movups opcode.
OP_movzx
< IA-32/AMD64 movzx opcode.
OP_mpsadbw
< IA-32/AMD64 mpsadbw opcode.
OP_mul
< IA-32/AMD64 mul opcode.
OP_mulpd
< IA-32/AMD64 mulpd opcode.
OP_mulps
< IA-32/AMD64 mulps opcode.
OP_mulsd
< IA-32/AMD64 mulsd opcode.
OP_mulss
< IA-32/AMD64 mulss opcode.
OP_mulx
< IA-32/AMD64 mulx opcode.
OP_mwait
< IA-32/AMD64 mwait opcode.
OP_mwaitx
< AMD64 mwaitx opcode.
OP_neg
< IA-32/AMD64 neg opcode.
OP_nop
< IA-32/AMD64 nop opcode.
OP_nop_modrm
< IA-32/AMD64 nop_modrm opcode.
OP_not
< IA-32/AMD64 not opcode.
OP_or
< IA-32/AMD64 or opcode.
OP_orpd
< IA-32/AMD64 orpd opcode.
OP_orps
< IA-32/AMD64 orps opcode.
OP_out
< IA-32/AMD64 out opcode.
OP_outs
< IA-32/AMD64 outs opcode.
OP_pabsb
< IA-32/AMD64 pabsb opcode.
OP_pabsd
< IA-32/AMD64 pabsd opcode.
OP_pabsw
< IA-32/AMD64 pabsw opcode.
OP_packssdw
< IA-32/AMD64 packssdw opcode.
OP_packsswb
< IA-32/AMD64 packsswb opcode.
OP_packusdw
< IA-32/AMD64 packusdw opcode.
OP_packuswb
< IA-32/AMD64 packuswb opcode.
OP_paddb
< IA-32/AMD64 paddb opcode.
OP_paddd
< IA-32/AMD64 paddd opcode.
OP_paddq
< IA-32/AMD64 paddq opcode.
OP_paddsb
< IA-32/AMD64 paddsb opcode.
OP_paddsw
< IA-32/AMD64 paddsw opcode.
OP_paddusb
< IA-32/AMD64 paddusb opcode.
OP_paddusw
< IA-32/AMD64 paddusw opcode.
OP_paddw
< IA-32/AMD64 paddw opcode.
OP_palignr
< IA-32/AMD64 palignr opcode.
OP_pand
< IA-32/AMD64 pand opcode.
OP_pandn
< IA-32/AMD64 pandn opcode.
OP_pause
< IA-32/AMD64 pause opcode.
OP_pavgb
< IA-32/AMD64 pavgb opcode.
OP_pavgusb
< IA-32/AMD64 pavgusb opcode.
OP_pavgw
< IA-32/AMD64 pavgw opcode.
OP_pblendvb
< IA-32/AMD64 pblendvb opcode.
OP_pblendw
< IA-32/AMD64 pblendw opcode.
OP_pclmulqdq
< IA-32/AMD64 pclmulqdq opcode.
OP_pcmpeqb
< IA-32/AMD64 pcmpeqb opcode.
OP_pcmpeqd
< IA-32/AMD64 pcmpeqd opcode.
OP_pcmpeqq
< IA-32/AMD64 pcmpeqq opcode.
OP_pcmpeqw
< IA-32/AMD64 pcmpeqw opcode.
OP_pcmpestri
< IA-32/AMD64 pcmpestri opcode.
OP_pcmpestrm
< IA-32/AMD64 pcmpestrm opcode.
OP_pcmpgtb
< IA-32/AMD64 pcmpgtb opcode.
OP_pcmpgtd
< IA-32/AMD64 pcmpgtd opcode.
OP_pcmpgtq
< IA-32/AMD64 pcmpgtq opcode.
OP_pcmpgtw
< IA-32/AMD64 pcmpgtw opcode.
OP_pcmpistri
< IA-32/AMD64 pcmpistri opcode.
OP_pcmpistrm
< IA-32/AMD64 pcmpistrm opcode.
OP_pdep
< IA-32/AMD64 pdep opcode.
OP_pext
< IA-32/AMD64 pext opcode.
OP_pextrb
< IA-32/AMD64 pextrb opcode.
OP_pextrd
< IA-32/AMD64 pextrd opcode.
OP_pextrw
< IA-32/AMD64 pextrw opcode.
OP_pf2id
< IA-32/AMD64 pf2id opcode.
OP_pf2iw
< IA-32/AMD64 pf2iw opcode.
OP_pfacc
< IA-32/AMD64 pfacc opcode.
OP_pfadd
< IA-32/AMD64 pfadd opcode.
OP_pfcmpeq
< IA-32/AMD64 pfcmpeq opcode.
OP_pfcmpge
< IA-32/AMD64 pfcmpge opcode.
OP_pfcmpgt
< IA-32/AMD64 pfcmpgt opcode.
OP_pfmax
< IA-32/AMD64 pfmax opcode.
OP_pfmin
< IA-32/AMD64 pfmin opcode.
OP_pfmul
< IA-32/AMD64 pfmul opcode.
OP_pfnacc
< IA-32/AMD64 pfnacc opcode.
OP_pfpnacc
< IA-32/AMD64 pfpnacc opcode.
OP_pfrcp
< IA-32/AMD64 pfrcp opcode.
OP_pfrcpit1
< IA-32/AMD64 pfrcpit1 opcode.
OP_pfrcpit2
< IA-32/AMD64 pfrcpit2 opcode.
OP_pfrsqit1
< IA-32/AMD64 pfrsqit1 opcode.
OP_pfrsqrt
< IA-32/AMD64 pfrsqrt opcode.
OP_pfsub
< IA-32/AMD64 pfsub opcode.
OP_pfsubr
< IA-32/AMD64 pfsubr opcode.
OP_phaddd
< IA-32/AMD64 phaddd opcode.
OP_phaddsw
< IA-32/AMD64 phaddsw opcode.
OP_phaddw
< IA-32/AMD64 phaddw opcode.
OP_phminposuw
< IA-32/AMD64 phminposuw opcode.
OP_phsubd
< IA-32/AMD64 phsubd opcode.
OP_phsubsw
< IA-32/AMD64 phsubsw opcode.
OP_phsubw
< IA-32/AMD64 phsubw opcode.
OP_pi2fd
< IA-32/AMD64 pi2fd opcode.
OP_pi2fw
< IA-32/AMD64 pi2fw opcode.
OP_pinsrb
< IA-32/AMD64 pinsrb opcode.
OP_pinsrd
< IA-32/AMD64 pinsrd opcode.
OP_pinsrw
< IA-32/AMD64 pinsrw opcode.
OP_pmaddubsw
< IA-32/AMD64 pmaddubsw opcode.
OP_pmaddwd
< IA-32/AMD64 pmaddwd opcode.
OP_pmaxsb
< IA-32/AMD64 pmaxsb opcode.
OP_pmaxsd
< IA-32/AMD64 pmaxsd opcode.
OP_pmaxsw
< IA-32/AMD64 pmaxsw opcode.
OP_pmaxub
< IA-32/AMD64 pmaxub opcode.
OP_pmaxud
< IA-32/AMD64 pmaxud opcode.
OP_pmaxuw
< IA-32/AMD64 pmaxuw opcode.
OP_pminsb
< IA-32/AMD64 pminsb opcode.
OP_pminsd
< IA-32/AMD64 pminsd opcode.
OP_pminsw
< IA-32/AMD64 pminsw opcode.
OP_pminub
< IA-32/AMD64 pminub opcode.
OP_pminud
< IA-32/AMD64 pminud opcode.
OP_pminuw
< IA-32/AMD64 pminuw opcode.
OP_pmovmskb
< IA-32/AMD64 pmovmskb opcode.
OP_pmovsxbd
< IA-32/AMD64 pmovsxbd opcode.
OP_pmovsxbq
< IA-32/AMD64 pmovsxbq opcode.
OP_pmovsxbw
< IA-32/AMD64 pmovsxbw opcode.
OP_pmovsxdq
< IA-32/AMD64 pmovsxdq opcode.
OP_pmovsxwd
< IA-32/AMD64 pmovsxwd opcode.
OP_pmovsxwq
< IA-32/AMD64 pmovsxwq opcode.
OP_pmovzxbd
< IA-32/AMD64 pmovzxbd opcode.
OP_pmovzxbq
< IA-32/AMD64 pmovzxbq opcode.
OP_pmovzxbw
< IA-32/AMD64 pmovzxbw opcode.
OP_pmovzxdq
< IA-32/AMD64 pmovzxdq opcode.
OP_pmovzxwd
< IA-32/AMD64 pmovzxwd opcode.
OP_pmovzxwq
< IA-32/AMD64 pmovzxwq opcode.
OP_pmuldq
< IA-32/AMD64 pmuldq opcode.
OP_pmulhrsw
< IA-32/AMD64 pmulhrsw opcode.
OP_pmulhrw
< IA-32/AMD64 pmulhrw opcode.
OP_pmulhuw
< IA-32/AMD64 pmulhuw opcode.
OP_pmulhw
< IA-32/AMD64 pmulhw opcode.
OP_pmulld
< IA-32/AMD64 pmulld opcode.
OP_pmullw
< IA-32/AMD64 pmullw opcode.
OP_pmuludq
< IA-32/AMD64 pmuludq opcode.
OP_pop
< IA-32/AMD64 pop opcode.
OP_popa
< IA-32/AMD64 popa opcode.
OP_popcnt
< IA-32/AMD64 popcnt opcode.
OP_popf
< IA-32/AMD64 popf opcode.
OP_por
< IA-32/AMD64 por opcode.
OP_prefetch
< IA-32/AMD64 prefetch opcode.
OP_prefetchnta
< IA-32/AMD64 prefetchnta opcode.
OP_prefetcht0
< IA-32/AMD64 prefetcht0 opcode.
OP_prefetcht1
< IA-32/AMD64 prefetcht1 opcode.
OP_prefetcht2
< IA-32/AMD64 prefetcht2 opcode.
OP_prefetchw
< IA-32/AMD64 prefetchw opcode.
OP_psadbw
< IA-32/AMD64 psadbw opcode.
OP_pshufb
< IA-32/AMD64 pshufb opcode.
OP_pshufd
< IA-32/AMD64 pshufd opcode.
OP_pshufhw
< IA-32/AMD64 pshufhw opcode.
OP_pshuflw
< IA-32/AMD64 pshuflw opcode.
OP_pshufw
< IA-32/AMD64 pshufw opcode.
OP_psignb
< IA-32/AMD64 psignb opcode.
OP_psignd
< IA-32/AMD64 psignd opcode.
OP_psignw
< IA-32/AMD64 psignw opcode.
OP_pslld
< IA-32/AMD64 pslld opcode.
OP_pslldq
< IA-32/AMD64 pslldq opcode.
OP_psllq
< IA-32/AMD64 psllq opcode.
OP_psllw
< IA-32/AMD64 psllw opcode.
OP_psrad
< IA-32/AMD64 psrad opcode.
OP_psraw
< IA-32/AMD64 psraw opcode.
OP_psrld
< IA-32/AMD64 psrld opcode.
OP_psrldq
< IA-32/AMD64 psrldq opcode.
OP_psrlq
< IA-32/AMD64 psrlq opcode.
OP_psrlw
< IA-32/AMD64 psrlw opcode.
OP_psubb
< IA-32/AMD64 psubb opcode.
OP_psubd
< IA-32/AMD64 psubd opcode.
OP_psubq
< IA-32/AMD64 psubq opcode.
OP_psubsb
< IA-32/AMD64 psubsb opcode.
OP_psubsw
< IA-32/AMD64 psubsw opcode.
OP_psubusb
< IA-32/AMD64 psubusb opcode.
OP_psubusw
< IA-32/AMD64 psubusw opcode.
OP_psubw
< IA-32/AMD64 psubw opcode.
OP_pswapd
< IA-32/AMD64 pswapd opcode.
OP_ptest
< IA-32/AMD64 ptest opcode.
OP_ptwrite
< IA-32/AMD64 PT OP_ptwrite opcode.
OP_punpckhbw
< IA-32/AMD64 punpckhbw opcode.
OP_punpckhdq
< IA-32/AMD64 punpckhdq opcode.
OP_punpckhqdq
< IA-32/AMD64 punpckhqdq opcode.
OP_punpckhwd
< IA-32/AMD64 punpckhwd opcode.
OP_punpcklbw
< IA-32/AMD64 punpcklbw opcode.
OP_punpckldq
< IA-32/AMD64 punpckldq opcode.
OP_punpcklqdq
< IA-32/AMD64 punpcklqdq opcode.
OP_punpcklwd
< IA-32/AMD64 punpcklwd opcode.
OP_push
< IA-32/AMD64 push opcode.
OP_push_imm
< IA-32/AMD64 push_imm opcode.
OP_pusha
< IA-32/AMD64 pusha opcode.
OP_pushf
< IA-32/AMD64 pushf opcode.
OP_pxor
< IA-32/AMD64 pxor opcode.
OP_rcl
< IA-32/AMD64 rcl opcode.
OP_rcpps
< IA-32/AMD64 rcpps opcode.
OP_rcpss
< IA-32/AMD64 rcpss opcode.
OP_rcr
< IA-32/AMD64 rcr opcode.
OP_rdfsbase
< IA-32/AMD64 rdfsbase opcode.
OP_rdgsbase
< IA-32/AMD64 rdgsbase opcode.
OP_rdmsr
< IA-32/AMD64 rdmsr opcode.
OP_rdpid
< IA-32/AMD64 rdpid opcode.
OP_rdpkru
< IA-32/AMD64 MPK rdpkru opcode.
OP_rdpmc
< IA-32/AMD64 rdpmc opcode.
OP_rdrand
< IA-32/AMD64 rdrand opcode.
OP_rdseed
< IA-32/AMD64 rdseed opcode.
OP_rdtsc
< IA-32/AMD64 rdtsc opcode.
OP_rdtscp
< IA-32/AMD64 rdtscp opcode.
OP_rep_cmps
< IA-32/AMD64 rep_cmps opcode.
OP_rep_ins
< IA-32/AMD64 rep_ins opcode.
OP_rep_lods
< IA-32/AMD64 rep_lods opcode.
OP_rep_movs
< IA-32/AMD64 rep_movs opcode.
OP_rep_outs
< IA-32/AMD64 rep_outs opcode.
OP_rep_scas
< IA-32/AMD64 rep_scas opcode.
OP_rep_stos
< IA-32/AMD64 rep_stos opcode.
OP_repne_cmps
< IA-32/AMD64 repne_cmps opcode.
OP_repne_scas
< IA-32/AMD64 repne_scas opcode.
OP_ret
< IA-32/AMD64 ret opcode.
OP_ret_far
< IA-32/AMD64 ret_far opcode.
OP_rol
< IA-32/AMD64 rol opcode.
OP_ror
< IA-32/AMD64 ror opcode.
OP_rorx
< IA-32/AMD64 rorx opcode.
OP_roundpd
< IA-32/AMD64 roundpd opcode.
OP_roundps
< IA-32/AMD64 roundps opcode.
OP_roundsd
< IA-32/AMD64 roundsd opcode.
OP_roundss
< IA-32/AMD64 roundss opcode.
OP_rsm
< IA-32/AMD64 rsm opcode.
OP_rsqrtps
< IA-32/AMD64 rsqrtps opcode.
OP_rsqrtss
< IA-32/AMD64 rsqrtss opcode.
OP_sahf
< IA-32/AMD64 sahf opcode.
OP_salc
< IA-32/AMD64 salc opcode.
OP_sar
< IA-32/AMD64 sar opcode.
OP_sarx
< IA-32/AMD64 sarx opcode.
OP_sbb
< IA-32/AMD64 sbb opcode.
OP_scas
< IA-32/AMD64 scas opcode.
OP_serialize
< IA-32/AMD64 serialize opcode.
OP_setb
< IA-32/AMD64 setb opcode.
OP_setbe
< IA-32/AMD64 setbe opcode.
OP_setl
< IA-32/AMD64 setl opcode.
OP_setle
< IA-32/AMD64 setle opcode.
OP_setnb
< IA-32/AMD64 setnb opcode.
OP_setnbe
< IA-32/AMD64 setnbe opcode.
OP_setnl
< IA-32/AMD64 setnl opcode.
OP_setnle
< IA-32/AMD64 setnle opcode.
OP_setno
< IA-32/AMD64 setno opcode.
OP_setnp
< IA-32/AMD64 setnp opcode.
OP_setns
< IA-32/AMD64 setns opcode.
OP_setnz
< IA-32/AMD64 setnz opcode.
OP_seto
< IA-32/AMD64 seto opcode.
OP_setp
< IA-32/AMD64 setp opcode.
OP_sets
< IA-32/AMD64 sets opcode.
OP_setz
< IA-32/AMD64 setz opcode.
OP_sfence
< IA-32/AMD64 sfence opcode.
OP_sgdt
< IA-32/AMD64 sgdt opcode.
OP_sha1msg1
< IA-32/AMD64 SHA OP_sha1msg1 opcode.
OP_sha1msg2
< IA-32/AMD64 SHA OP_sha1msg2 opcode.
OP_sha1nexte
< IA-32/AMD64 SHA OP_sha1nexte opcode.
OP_sha1rnds4
< IA-32/AMD64 SHA OP_sha1rnds4 opcode.
OP_sha256msg1
< IA-32/AMD64 SHA OP_sha2msg1 opcode.
OP_sha256msg2
< IA-32/AMD64 SHA OP_sha2msg2 opcode.
OP_sha256rnds2
< IA-32/AMD64 SHA OP_sha2rnds2 opcode.
OP_shl
< IA-32/AMD64 shl opcode.
OP_shld
< IA-32/AMD64 shld opcode.
OP_shlx
< IA-32/AMD64 shlx opcode.
OP_shr
< IA-32/AMD64 shr opcode.
OP_shrd
< IA-32/AMD64 shrd opcode.
OP_shrx
< IA-32/AMD64 shrx opcode.
OP_shufpd
< IA-32/AMD64 shufpd opcode.
OP_shufps
< IA-32/AMD64 shufps opcode.
OP_sidt
< IA-32/AMD64 sidt opcode.
OP_skinit
< IA-32/AMD64 skinit opcode.
OP_sldt
< IA-32/AMD64 sldt opcode.
OP_slwpcb
< IA-32/AMD64 slwpcb opcode.
OP_smsw
< IA-32/AMD64 smsw opcode.
OP_sqrtpd
< IA-32/AMD64 sqrtpd opcode.
OP_sqrtps
< IA-32/AMD64 sqrtps opcode.
OP_sqrtsd
< IA-32/AMD64 sqrtsd opcode.
OP_sqrtss
< IA-32/AMD64 sqrtss opcode.
OP_stac
< IA-32/AMD64 stac opcode.
OP_stc
< IA-32/AMD64 stc opcode.
OP_std
< IA-32/AMD64 std opcode.
OP_stgi
< IA-32/AMD64 stgi opcode.
OP_sti
< IA-32/AMD64 sti opcode.
OP_stmxcsr
< IA-32/AMD64 stmxcsr opcode.
OP_stos
< IA-32/AMD64 stos opcode.
OP_str
< IA-32/AMD64 str opcode.
OP_sub
< IA-32/AMD64 sub opcode.
OP_subpd
< IA-32/AMD64 subpd opcode.
OP_subps
< IA-32/AMD64 subps opcode.
OP_subsd
< IA-32/AMD64 subsd opcode.
OP_subss
< IA-32/AMD64 subss opcode.
OP_swapgs
< IA-32/AMD64 swapgs opcode.
OP_syscall
< IA-32/AMD64 syscall opcode.
OP_sysenter
< IA-32/AMD64 sysenter opcode.
OP_sysexit
< IA-32/AMD64 sysexit opcode.
OP_sysret
< IA-32/AMD64 sysret opcode.
OP_t1mskc
< IA-32/AMD64 t1mskc opcode.
OP_test
< IA-32/AMD64 test opcode.
OP_tzcnt
< IA-32/AMD64 tzcnt opcode.
OP_tzmsk
< IA-32/AMD64 tzmsk opcode.
OP_ucomisd
< IA-32/AMD64 ucomisd opcode.
OP_ucomiss
< IA-32/AMD64 ucomiss opcode.
OP_ud1
< IA-32/AMD64 ud1 opcode.
OP_ud2
< IA-32/AMD64 ud2 opcode.
OP_unknown_3dnow
< IA-32/AMD64 unknown_3dnow opcode.
OP_unpckhpd
< IA-32/AMD64 unpckhpd opcode.
OP_unpckhps
< IA-32/AMD64 unpckhps opcode.
OP_unpcklpd
< IA-32/AMD64 unpcklpd opcode.
OP_unpcklps
< IA-32/AMD64 unpcklps opcode.
OP_vaddpd
< IA-32/AMD64 vaddpd opcode.
OP_vaddps
< IA-32/AMD64 vaddps opcode.
OP_vaddsd
< IA-32/AMD64 vaddsd opcode.
OP_vaddss
< IA-32/AMD64 vaddss opcode.
OP_vaddsubpd
< IA-32/AMD64 vaddsubpd opcode.
OP_vaddsubps
< IA-32/AMD64 vaddsubps opcode.
OP_vaesdec
< IA-32/AMD64 vaesdec opcode.
OP_vaesdeclast
< IA-32/AMD64 vaesdeclast opcode.
OP_vaesenc
< IA-32/AMD64 vaesenc opcode.
OP_vaesenclast
< IA-32/AMD64 vaesenclast opcode.
OP_vaesimc
< IA-32/AMD64 vaesimc opcode.
OP_vaeskeygenassist
< IA-32/AMD64 vaeskeygenassist opcode.
OP_valignd
< IA-32/AMD64 AVX-512 OP_valignd opcode.
OP_valignq
< IA-32/AMD64 AVX-512 OP_valignq opcode.
OP_vandnpd
< IA-32/AMD64 vandnpd opcode.
OP_vandnps
< IA-32/AMD64 vandnps opcode.
OP_vandpd
< IA-32/AMD64 vandpd opcode.
OP_vandps
< IA-32/AMD64 vandps opcode.
OP_vblendmpd
< IA-32/AMD64 AVX-512 OP_vblendmpd opcode.
OP_vblendmps
< IA-32/AMD64 AVX-512 OP_vblendmps opcode.
OP_vblendpd
< IA-32/AMD64 vblendpd opcode.
OP_vblendps
< IA-32/AMD64 vblendps opcode.
OP_vblendvpd
< IA-32/AMD64 vblendvpd opcode.
OP_vblendvps
< IA-32/AMD64 vblendvps opcode.
OP_vbroadcastf32x2
< IA-32/AMD64 AVX-512 OP_vbroadcastf32x2 opcode.
OP_vbroadcastf32x4
< IA-32/AMD64 AVX-512 OP_vbroadcastf32x4 opcode.
OP_vbroadcastf32x8
< IA-32/AMD64 AVX-512 OP_vbroadcastf32x8 opcode.
OP_vbroadcastf64x2
< IA-32/AMD64 AVX-512 OP_vbroadcastf64x2 opcode.
OP_vbroadcastf64x4
< IA-32/AMD64 AVX-512 OP_vbroadcastf64x4 opcode.
OP_vbroadcastf128
< IA-32/AMD64 vbroadcastf128 opcode.
OP_vbroadcasti32x2
< IA-32/AMD64 AVX-512 OP_vbroadcasti32x2 opcode.
OP_vbroadcasti32x4
< IA-32/AMD64 AVX-512 OP_vbroadcasti32x4 opcode.
OP_vbroadcasti32x8
< IA-32/AMD64 AVX-512 OP_vbroadcasti32x8 opcode.
OP_vbroadcasti64x2
< IA-32/AMD64 AVX-512 OP_vbroadcasti64x2 opcode.
OP_vbroadcasti64x4
< IA-32/AMD64 AVX-512 OP_vbroadcasti64x4 opcode.
OP_vbroadcasti128
< IA-32/AMD64 vbroadcasti128 opcode.
OP_vbroadcastsd
< IA-32/AMD64 vbroadcastsd opcode.
OP_vbroadcastss
< IA-32/AMD64 vbroadcastss opcode.
OP_vcmppd
< IA-32/AMD64 vcmppd opcode.
OP_vcmpps
< IA-32/AMD64 vcmpps opcode.
OP_vcmpsd
< IA-32/AMD64 vcmpsd opcode.
OP_vcmpss
< IA-32/AMD64 vcmpss opcode.
OP_vcomisd
< IA-32/AMD64 vcomisd opcode.
OP_vcomiss
< IA-32/AMD64 vcomiss opcode.
OP_vcompresspd
< IA-32/AMD64 AVX-512 OP_vcompresspd opcode.
OP_vcompressps
< IA-32/AMD64 AVX-512 OP_vcompressps opcode.
OP_vcvtdq2pd
< IA-32/AMD64 vcvtdq2pd opcode.
OP_vcvtdq2ps
< IA-32/AMD64 vcvtdq2ps opcode.
OP_vcvtne2ps2bf16
< IA-32/AMD64 vcvtne2ps2bf16 opcode.
OP_vcvtneps2bf16
< IA-32/AMD64 vcvtneps2bf16 opcode.
OP_vcvtpd2dq
< IA-32/AMD64 vcvtpd2dq opcode.
OP_vcvtpd2ps
< IA-32/AMD64 vcvtpd2ps opcode.
OP_vcvtpd2qq
< IA-32/AMD64 AVX-512 OP_vcvtpd2qq opcode.
OP_vcvtpd2udq
< IA-32/AMD64 AVX-512 OP_vcvtpd2udq opcode.
OP_vcvtpd2uqq
< IA-32/AMD64 AVX-512 OP_vcvtpd2uqq opcode.
OP_vcvtph2ps
< IA-32/AMD64 vcvtph2ps opcode.
OP_vcvtps2dq
< IA-32/AMD64 vcvtps2dq opcode.
OP_vcvtps2pd
< IA-32/AMD64 vcvtps2pd opcode.
OP_vcvtps2ph
< IA-32/AMD64 vcvtps2ph opcode.
OP_vcvtps2qq
< IA-32/AMD64 AVX-512 OP_vcvtps2qq opcode.
OP_vcvtps2udq
< IA-32/AMD64 AVX-512 OP_vcvtps2udq opcode.
OP_vcvtps2uqq
< IA-32/AMD64 AVX-512 OP_vcvtps2uqq opcode.
OP_vcvtqq2pd
< IA-32/AMD64 AVX-512 OP_vcvtqq2pd opcode.
OP_vcvtqq2ps
< IA-32/AMD64 AVX-512 OP_vcvtqq2ps opcode.
OP_vcvtsd2si
< IA-32/AMD64 vcvtsd2si opcode.
OP_vcvtsd2ss
< IA-32/AMD64 vcvtsd2ss opcode.
OP_vcvtsd2usi
< IA-32/AMD64 AVX-512 OP_vcvtsd2usi opcode.
OP_vcvtsi2sd
< IA-32/AMD64 vcvtsi2sd opcode.
OP_vcvtsi2ss
< IA-32/AMD64 vcvtsi2ss opcode.
OP_vcvtss2sd
< IA-32/AMD64 vcvtss2sd opcode.
OP_vcvtss2si
< IA-32/AMD64 vcvtss2si opcode.
OP_vcvtss2usi
< IA-32/AMD64 AVX-512 OP_vcvtss2usi opcode.
OP_vcvttpd2dq
< IA-32/AMD64 vcvttpd2dq opcode.
OP_vcvttpd2qq
< IA-32/AMD64 AVX-512 OP_vcvttpd2qq opcode.
OP_vcvttpd2udq
< IA-32/AMD64 AVX-512 OP_vcvttpd2udq opcode.
OP_vcvttpd2uqq
< IA-32/AMD64 AVX-512 OP_vcvttpd2uqq opcode.
OP_vcvttps2dq
< IA-32/AMD64 vcvttps2dq opcode.
OP_vcvttps2qq
< IA-32/AMD64 AVX-512 OP_vcvttps2qq opcode.
OP_vcvttps2udq
< IA-32/AMD64 AVX-512 OP_vcvttps2udq opcode.
OP_vcvttps2uqq
< IA-32/AMD64 AVX-512 OP_vcvttps2uqq opcode.
OP_vcvttsd2si
< IA-32/AMD64 vcvttsd2si opcode.
OP_vcvttsd2usi
< IA-32/AMD64 AVX-512 OP_vcvttsd2usi opcode.
OP_vcvttss2si
< IA-32/AMD64 vcvttss2si opcode.
OP_vcvttss2usi
< IA-32/AMD64 AVX-512 OP_vcvttss2usi opcode.
OP_vcvtudq2pd
< IA-32/AMD64 AVX-512 OP_vcvtudq2pd opcode.
OP_vcvtudq2ps
< IA-32/AMD64 AVX-512 OP_vcvtudq2ps opcode.
OP_vcvtuqq2pd
< IA-32/AMD64 AVX-512 OP_vcvtuqq2pd opcode.
OP_vcvtuqq2ps
< IA-32/AMD64 AVX-512 OP_vcvtuqq2ps opcode.
OP_vcvtusi2sd
< IA-32/AMD64 AVX-512 OP_vcvtusi2sd opcode.
OP_vcvtusi2ss
< IA-32/AMD64 AVX-512 OP_vcvtusi2ss opcode.
OP_vdbpsadbw
< IA-32/AMD64 AVX-512 OP_vdbpsadbw opcode.
OP_vdivpd
< IA-32/AMD64 vdivpd opcode.
OP_vdivps
< IA-32/AMD64 vdivps opcode.
OP_vdivsd
< IA-32/AMD64 vdivsd opcode.
OP_vdivss
< IA-32/AMD64 vdivss opcode.
OP_vdpbf16ps
< IA-32/AMD64 vdpbf16ps opcode.
OP_vdppd
< IA-32/AMD64 vdppd opcode.
OP_vdpps
< IA-32/AMD64 vdpps opcode.
OP_verr
< IA-32/AMD64 verr opcode.
OP_verw
< IA-32/AMD64 verw opcode.
OP_vexp2pd
< IA-32/AMD64 AVX-512 OP_vexp2pd opcode.
OP_vexp2ps
< IA-32/AMD64 AVX-512 OP_vexp2ps opcode.
OP_vexpandpd
< IA-32/AMD64 AVX-512 OP_vexpandpd opcode.
OP_vexpandps
< IA-32/AMD64 AVX-512 OP_vexpandps opcode.
OP_vextractf32x4
< IA-32/AMD64 AVX-512 OP_vextractf32x4 opcode.
OP_vextractf32x8
< IA-32/AMD64 AVX-512 OP_vextractf32x8 opcode.
OP_vextractf64x2
< IA-32/AMD64 AVX-512 OP_vextractf64x2 opcode.
OP_vextractf64x4
< IA-32/AMD64 AVX-512 OP_vextractf64x4 opcode.
OP_vextractf128
< IA-32/AMD64 vextractf128 opcode.
OP_vextracti32x4
< IA-32/AMD64 AVX-512 OP_vextracti32x4 opcode.
OP_vextracti32x8
< IA-32/AMD64 AVX-512 OP_vextracti32x8 opcode.
OP_vextracti64x2
< IA-32/AMD64 AVX-512 OP_vextracti64x2 opcode.
OP_vextracti64x4
< IA-32/AMD64 AVX-512 OP_vextracti64x4 opcode.
OP_vextracti128
< IA-32/AMD64 vextracti128 opcode.
OP_vextractps
< IA-32/AMD64 vextractps opcode.
OP_vfixupimmpd
< IA-32/AMD64 AVX-512 OP_vfixupimmpd opcode.
OP_vfixupimmps
< IA-32/AMD64 AVX-512 OP_vfixupimmps opcode.
OP_vfixupimmsd
< IA-32/AMD64 AVX-512 OP_vfixupimmsd opcode.
OP_vfixupimmss
< IA-32/AMD64 AVX-512 OP_vfixupimmss opcode.
OP_vfmadd132pd
< IA-32/AMD64 vfmadd132pd opcode.
OP_vfmadd132ps
< IA-32/AMD64 vfmadd132ps opcode.
OP_vfmadd132sd
< IA-32/AMD64 vfmadd132sd opcode.
OP_vfmadd132ss
< IA-32/AMD64 vfmadd132ss opcode.
OP_vfmadd213pd
< IA-32/AMD64 vfmadd213pd opcode.
OP_vfmadd213ps
< IA-32/AMD64 vfmadd213ps opcode.
OP_vfmadd213sd
< IA-32/AMD64 vfmadd213sd opcode.
OP_vfmadd213ss
< IA-32/AMD64 vfmadd213ss opcode.
OP_vfmadd231pd
< IA-32/AMD64 vfmadd231pd opcode.
OP_vfmadd231ps
< IA-32/AMD64 vfmadd231ps opcode.
OP_vfmadd231sd
< IA-32/AMD64 vfmadd231sd opcode.
OP_vfmadd231ss
< IA-32/AMD64 vfmadd231ss opcode.
OP_vfmaddpd
< IA-32/AMD64 vfmaddpd opcode.
OP_vfmaddps
< IA-32/AMD64 vfmaddps opcode.
OP_vfmaddsd
< IA-32/AMD64 vfmaddsd opcode.
OP_vfmaddss
< IA-32/AMD64 vfmaddss opcode.
OP_vfmaddsub132pd
< IA-32/AMD64 vfmaddsub132pd opcode.
OP_vfmaddsub132ps
< IA-32/AMD64 vfmaddsub132ps opcode.
OP_vfmaddsub213pd
< IA-32/AMD64 vfmaddsub213pd opcode.
OP_vfmaddsub213ps
< IA-32/AMD64 vfmaddsub213ps opcode.
OP_vfmaddsub231pd
< IA-32/AMD64 vfmaddsub231pd opcode.
OP_vfmaddsub231ps
< IA-32/AMD64 vfmaddsub231ps opcode.
OP_vfmaddsubpd
< IA-32/AMD64 vfmaddsubpd opcode.
OP_vfmaddsubps
< IA-32/AMD64 vfmaddsubps opcode.
OP_vfmsub132pd
< IA-32/AMD64 vfmsub132pd opcode.
OP_vfmsub132ps
< IA-32/AMD64 vfmsub132ps opcode.
OP_vfmsub132sd
< IA-32/AMD64 vfmsub132sd opcode.
OP_vfmsub132ss
< IA-32/AMD64 vfmsub132ss opcode.
OP_vfmsub213pd
< IA-32/AMD64 vfmsub213pd opcode.
OP_vfmsub213ps
< IA-32/AMD64 vfmsub213ps opcode.
OP_vfmsub213sd
< IA-32/AMD64 vfmsub213sd opcode.
OP_vfmsub213ss
< IA-32/AMD64 vfmsub213ss opcode.
OP_vfmsub231pd
< IA-32/AMD64 vfmsub231pd opcode.
OP_vfmsub231ps
< IA-32/AMD64 vfmsub231ps opcode.
OP_vfmsub231sd
< IA-32/AMD64 vfmsub231sd opcode.
OP_vfmsub231ss
< IA-32/AMD64 vfmsub231ss opcode.
OP_vfmsubadd132pd
< IA-32/AMD64 vfmsubadd132pd opcode.
OP_vfmsubadd132ps
< IA-32/AMD64 vfmsubadd132ps opcode.
OP_vfmsubadd213pd
< IA-32/AMD64 vfmsubadd213pd opcode.
OP_vfmsubadd213ps
< IA-32/AMD64 vfmsubadd213ps opcode.
OP_vfmsubadd231pd
< IA-32/AMD64 vfmsubadd231pd opcode.
OP_vfmsubadd231ps
< IA-32/AMD64 vfmsubadd231ps opcode.
OP_vfmsubaddpd
< IA-32/AMD64 vfmsubaddpd opcode.
OP_vfmsubaddps
< IA-32/AMD64 vfmsubaddps opcode.
OP_vfmsubpd
< IA-32/AMD64 vfmsubpd opcode.
OP_vfmsubps
< IA-32/AMD64 vfmsubps opcode.
OP_vfmsubsd
< IA-32/AMD64 vfmsubsd opcode.
OP_vfmsubss
< IA-32/AMD64 vfmsubss opcode.
OP_vfnmadd132pd
< IA-32/AMD64 vfnmadd132pd opcode.
OP_vfnmadd132ps
< IA-32/AMD64 vfnmadd132ps opcode.
OP_vfnmadd132sd
< IA-32/AMD64 vfnmadd132sd opcode.
OP_vfnmadd132ss
< IA-32/AMD64 vfnmadd132ss opcode.
OP_vfnmadd213pd
< IA-32/AMD64 vfnmadd213pd opcode.
OP_vfnmadd213ps
< IA-32/AMD64 vfnmadd213ps opcode.
OP_vfnmadd213sd
< IA-32/AMD64 vfnmadd213sd opcode.
OP_vfnmadd213ss
< IA-32/AMD64 vfnmadd213ss opcode.
OP_vfnmadd231pd
< IA-32/AMD64 vfnmadd231pd opcode.
OP_vfnmadd231ps
< IA-32/AMD64 vfnmadd231ps opcode.
OP_vfnmadd231sd
< IA-32/AMD64 vfnmadd231sd opcode.
OP_vfnmadd231ss
< IA-32/AMD64 vfnmadd231ss opcode.
OP_vfnmaddpd
< IA-32/AMD64 vfnmaddpd opcode.
OP_vfnmaddps
< IA-32/AMD64 vfnmaddps opcode.
OP_vfnmaddsd
< IA-32/AMD64 vfnmaddsd opcode.
OP_vfnmaddss
< IA-32/AMD64 vfnmaddss opcode.
OP_vfnmsub132pd
< IA-32/AMD64 vfnmsub132pd opcode.
OP_vfnmsub132ps
< IA-32/AMD64 vfnmsub132ps opcode.
OP_vfnmsub132sd
< IA-32/AMD64 vfnmsub132sd opcode.
OP_vfnmsub132ss
< IA-32/AMD64 vfnmsub132ss opcode.
OP_vfnmsub213pd
< IA-32/AMD64 vfnmsub213pd opcode.
OP_vfnmsub213ps
< IA-32/AMD64 vfnmsub213ps opcode.
OP_vfnmsub213sd
< IA-32/AMD64 vfnmsub213sd opcode.
OP_vfnmsub213ss
< IA-32/AMD64 vfnmsub213ss opcode.
OP_vfnmsub231pd
< IA-32/AMD64 vfnmsub231pd opcode.
OP_vfnmsub231ps
< IA-32/AMD64 vfnmsub231ps opcode.
OP_vfnmsub231sd
< IA-32/AMD64 vfnmsub231sd opcode.
OP_vfnmsub231ss
< IA-32/AMD64 vfnmsub231ss opcode.
OP_vfnmsubpd
< IA-32/AMD64 vfnmsubpd opcode.
OP_vfnmsubps
< IA-32/AMD64 vfnmsubps opcode.
OP_vfnmsubsd
< IA-32/AMD64 vfnmsubsd opcode.
OP_vfnmsubss
< IA-32/AMD64 vfnmsubss opcode.
OP_vfpclasspd
< IA-32/AMD64 AVX-512 OP_vfpclasspd opcode.
OP_vfpclassps
< IA-32/AMD64 AVX-512 OP_vfpclassps opcode.
OP_vfpclasssd
< IA-32/AMD64 AVX-512 OP_vfpclasssd opcode.
OP_vfpclassss
< IA-32/AMD64 AVX-512 OP_vfpclassss opcode.
OP_vfrczpd
< IA-32/AMD64 vfrczpd opcode.
OP_vfrczps
< IA-32/AMD64 vfrczps opcode.
OP_vfrczsd
< IA-32/AMD64 vfrczsd opcode.
OP_vfrczss
< IA-32/AMD64 vfrczss opcode.
OP_vgatherdpd
< IA-32/AMD64 vgatherdpd opcode.
OP_vgatherdps
< IA-32/AMD64 vgatherdps opcode.
OP_vgatherpf0dpd
< IA-32/AMD64 AVX-512 OP_vgatherpf0dps opcode.
OP_vgatherpf0dps
< IA-32/AMD64 AVX-512 OP_vgatherpf0dps opcode.
OP_vgatherpf0qpd
< IA-32/AMD64 AVX-512 OP_vgatherpf0qpd opcode.
OP_vgatherpf0qps
< IA-32/AMD64 AVX-512 OP_vgatherpf0qps opcode.
OP_vgatherpf1dpd
< IA-32/AMD64 AVX-512 OP_vgatherpf1dpd opcode.
OP_vgatherpf1dps
< IA-32/AMD64 AVX-512 OP_vgatherpf1dps opcode.
OP_vgatherpf1qpd
< IA-32/AMD64 AVX-512 OP_vgatherpf1qpd opcode.
OP_vgatherpf1qps
< IA-32/AMD64 AVX-512 OP_vgatherpf1qps opcode.
OP_vgatherqpd
< IA-32/AMD64 vgatherqpd opcode.
OP_vgatherqps
< IA-32/AMD64 vgatherqps opcode.
OP_vgetexppd
< IA-32/AMD64 AVX-512 OP_vgetexppd opcode.
OP_vgetexpps
< IA-32/AMD64 AVX-512 OP_vgetexpps opcode.
OP_vgetexpsd
< IA-32/AMD64 AVX-512 OP_vgetexpsd opcode.
OP_vgetexpss
< IA-32/AMD64 AVX-512 OP_vgetexpss opcode.
OP_vgetmantpd
< IA-32/AMD64 AVX-512 OP_vgetmantpd opcode.
OP_vgetmantps
< IA-32/AMD64 AVX-512 OP_vgetmantps opcode.
OP_vgetmantsd
< IA-32/AMD64 AVX-512 OP_vgetmantsd opcode.
OP_vgetmantss
< IA-32/AMD64 AVX-512 OP_vgetmantss opcode.
OP_vgf2p8affineinvqb
< IA-32/AMD64 vgf2p8affineinvqb opcode.
OP_vgf2p8affineqb
< IA-32/AMD64 vgf2p8affineqb opcode.
OP_vgf2p8mulb
< IA-32/AMD64 vgf2p8mulb opcode.
OP_vhaddpd
< IA-32/AMD64 vhaddpd opcode.
OP_vhaddps
< IA-32/AMD64 vhaddps opcode.
OP_vhsubpd
< IA-32/AMD64 vhsubpd opcode.
OP_vhsubps
< IA-32/AMD64 vhsubps opcode.
OP_vinsertf32x4
< IA-32/AMD64 AVX-512 OP_vinsertf32x4 opcode.
OP_vinsertf32x8
< IA-32/AMD64 AVX-512 OP_vinsertf32x8 opcode.
OP_vinsertf64x2
< IA-32/AMD64 AVX-512 OP_vinsertf64x2 opcode.
OP_vinsertf64x4
< IA-32/AMD64 AVX-512 OP_vinsertf64x4 opcode.
OP_vinsertf128
< IA-32/AMD64 vinsertf128 opcode.
OP_vinserti32x4
< IA-32/AMD64 AVX-512 OP_vinserti32x4 opcode.
OP_vinserti32x8
< IA-32/AMD64 AVX-512 OP_vinserti32x8 opcode.
OP_vinserti64x2
< IA-32/AMD64 AVX-512 OP_vinserti64x2 opcode.
OP_vinserti64x4
< IA-32/AMD64 AVX-512 OP_vinserti64x4 opcode.
OP_vinserti128
< IA-32/AMD64 vinserti128 opcode.
OP_vinsertps
< IA-32/AMD64 vinsertps opcode.
OP_vlddqu
< IA-32/AMD64 vlddqu opcode.
OP_vldmxcsr
< IA-32/AMD64 vldmxcsr opcode.
OP_vmaskmovdqu
< IA-32/AMD64 vmaskmovdqu opcode.
OP_vmaskmovpd
< IA-32/AMD64 vmaskmovpd opcode.
OP_vmaskmovps
< IA-32/AMD64 vmaskmovps opcode.
OP_vmaxpd
< IA-32/AMD64 vmaxpd opcode.
OP_vmaxps
< IA-32/AMD64 vmaxps opcode.
OP_vmaxsd
< IA-32/AMD64 vmaxsd opcode.
OP_vmaxss
< IA-32/AMD64 vmaxss opcode.
OP_vmcall
< IA-32/AMD64 vmcall opcode.
OP_vmclear
< IA-32/AMD64 vmclear opcode.
OP_vmfunc
< IA-32/AMD64 vmfunc opcode.
OP_vminpd
< IA-32/AMD64 vminpd opcode.
OP_vminps
< IA-32/AMD64 vminps opcode.
OP_vminsd
< IA-32/AMD64 vminsd opcode.
OP_vminss
< IA-32/AMD64 vminss opcode.
OP_vmlaunch
< IA-32/AMD64 vmlaunch opcode.
OP_vmload
< IA-32/AMD64 vmload opcode.
OP_vmmcall
< IA-32/AMD64 vmmcall opcode.
OP_vmovapd
< IA-32/AMD64 vmovapd opcode.
OP_vmovaps
< IA-32/AMD64 vmovaps opcode.
OP_vmovd
< IA-32/AMD64 vmovd opcode.
OP_vmovddup
< IA-32/AMD64 vmovddup opcode.
OP_vmovdqa
< IA-32/AMD64 vmovdqa opcode.
OP_vmovdqa32
< IA-32/AMD64 AVX-512 OP_vmovdqa32 opcode.
OP_vmovdqa64
< IA-32/AMD64 AVX-512 OP_vmovdqa64 opcode.
OP_vmovdqu
< IA-32/AMD64 vmovdqu opcode.
OP_vmovdqu8
< IA-32/AMD64 AVX-512 OP_vmovdqu8 opcode.
OP_vmovdqu16
< IA-32/AMD64 AVX-512 OP_vmovdqu16 opcode.
OP_vmovdqu32
< IA-32/AMD64 AVX-512 OP_vmovdqu32 opcode.
OP_vmovdqu64
< IA-32/AMD64 AVX-512 OP_vmovdqu64 opcode.
OP_vmovhpd
< IA-32/AMD64 vmovhpd opcode.
OP_vmovhps
< IA-32/AMD64 vmovhps opcode.
OP_vmovlpd
< IA-32/AMD64 vmovlpd opcode.
OP_vmovlps
< IA-32/AMD64 vmovlps opcode.
OP_vmovmskpd
< IA-32/AMD64 vmovmskpd opcode.
OP_vmovmskps
< IA-32/AMD64 vmovmskps opcode.
OP_vmovntdq
< IA-32/AMD64 vmovntdq opcode.
OP_vmovntdqa
< IA-32/AMD64 vmovntdqa opcode.
OP_vmovntpd
< IA-32/AMD64 vmovntpd opcode.
OP_vmovntps
< IA-32/AMD64 vmovntps opcode.
OP_vmovq
< IA-32/AMD64 vmovq opcode.
OP_vmovsd
< IA-32/AMD64 vmovsd opcode.
OP_vmovshdup
< IA-32/AMD64 vmovshdup opcode.
OP_vmovsldup
< IA-32/AMD64 vmovsldup opcode.
OP_vmovss
< IA-32/AMD64 vmovss opcode.
OP_vmovupd
< IA-32/AMD64 vmovupd opcode.
OP_vmovups
< IA-32/AMD64 vmovups opcode.
OP_vmpsadbw
< IA-32/AMD64 vmpsadbw opcode.
OP_vmptrld
< IA-32/AMD64 vmptrld opcode.
OP_vmptrst
< IA-32/AMD64 vmptrst opcode.
OP_vmread
< IA-32/AMD64 vmread opcode.
OP_vmresume
< IA-32/AMD64 vmresume opcode.
OP_vmrun
< IA-32/AMD64 vmrun opcode.
OP_vmsave
< IA-32/AMD64 vmsave opcode.
OP_vmulpd
< IA-32/AMD64 vmulpd opcode.
OP_vmulps
< IA-32/AMD64 vmulps opcode.
OP_vmulsd
< IA-32/AMD64 vmulsd opcode.
OP_vmulss
< IA-32/AMD64 vmulss opcode.
OP_vmwrite
< IA-32/AMD64 vmwrite opcode.
OP_vmxoff
< IA-32/AMD64 vmxoff opcode.
OP_vmxon
< IA-32/AMD64 vmxon opcode.
OP_vorpd
< IA-32/AMD64 vorpd opcode.
OP_vorps
< IA-32/AMD64 vorps opcode.
OP_vpabsb
< IA-32/AMD64 vpabsb opcode.
OP_vpabsd
< IA-32/AMD64 vpabsd opcode.
OP_vpabsq
< IA-32/AMD64 AVX-512 OP_vpabsq opcode.
OP_vpabsw
< IA-32/AMD64 vpabsw opcode.
OP_vpackssdw
< IA-32/AMD64 vpackssdw opcode.
OP_vpacksswb
< IA-32/AMD64 vpacksswb opcode.
OP_vpackusdw
< IA-32/AMD64 vpackusdw opcode.
OP_vpackuswb
< IA-32/AMD64 vpackuswb opcode.
OP_vpaddb
< IA-32/AMD64 vpaddb opcode.
OP_vpaddd
< IA-32/AMD64 vpaddd opcode.
OP_vpaddq
< IA-32/AMD64 vpaddq opcode.
OP_vpaddsb
< IA-32/AMD64 vpaddsb opcode.
OP_vpaddsw
< IA-32/AMD64 vpaddsw opcode.
OP_vpaddusb
< IA-32/AMD64 vpaddusb opcode.
OP_vpaddusw
< IA-32/AMD64 vpaddusw opcode.
OP_vpaddw
< IA-32/AMD64 vpaddw opcode.
OP_vpalignr
< IA-32/AMD64 vpalignr opcode.
OP_vpand
< IA-32/AMD64 vpand opcode.
OP_vpandd
< IA-32/AMD64 AVX-512 OP_vpandd opcode.
OP_vpandn
< IA-32/AMD64 vpandn opcode.
OP_vpandnd
< IA-32/AMD64 AVX-512 OP_vpandnd opcode.
OP_vpandnq
< IA-32/AMD64 AVX-512 OP_vpandnq opcode.
OP_vpandq
< IA-32/AMD64 AVX-512 OP_vpandq opcode.
OP_vpavgb
< IA-32/AMD64 vpavgb opcode.
OP_vpavgw
< IA-32/AMD64 vpavgw opcode.
OP_vpblendd
< IA-32/AMD64 vpblendd opcode.
OP_vpblendmb
< IA-32/AMD64 AVX-512 OP_vpblendmb opcode.
OP_vpblendmd
< IA-32/AMD64 AVX-512 OP_vpblendmd opcode.
OP_vpblendmq
< IA-32/AMD64 AVX-512 OP_vpblendmq opcode.
OP_vpblendmw
< IA-32/AMD64 AVX-512 OP_vpblendmw opcode.
OP_vpblendvb
< IA-32/AMD64 vpblendvb opcode.
OP_vpblendw
< IA-32/AMD64 vpblendw opcode.
OP_vpbroadcastb
< IA-32/AMD64 vpbroadcastb opcode.
OP_vpbroadcastd
< IA-32/AMD64 vpbroadcastd opcode.
OP_vpbroadcastmb2q
< IA-32/AMD64 AVX-512 OP_vpbroadcastmb2q opcode.
OP_vpbroadcastmw2d
< IA-32/AMD64 AVX-512 OP_vpbroadcastmw2d opcode.
OP_vpbroadcastq
< IA-32/AMD64 vpbroadcastq opcode.
OP_vpbroadcastw
< IA-32/AMD64 vpbroadcastw opcode.
OP_vpclmulqdq
< IA-32/AMD64 vpclmulqdq opcode.
OP_vpcmov
< IA-32/AMD64 vpcmov opcode.
OP_vpcmpb
< IA-32/AMD64 AVX-512 OP_vpcmpb opcode.
OP_vpcmpd
< IA-32/AMD64 AVX-512 OP_vpcmpd opcode.
OP_vpcmpeqb
< IA-32/AMD64 vpcmpeqb opcode.
OP_vpcmpeqd
< IA-32/AMD64 vpcmpeqd opcode.
OP_vpcmpeqq
< IA-32/AMD64 vpcmpeqq opcode.
OP_vpcmpeqw
< IA-32/AMD64 vpcmpeqw opcode.
OP_vpcmpestri
< IA-32/AMD64 vpcmpestri opcode.
OP_vpcmpestrm
< IA-32/AMD64 vpcmpestrm opcode.
OP_vpcmpgtb
< IA-32/AMD64 vpcmpgtb opcode.
OP_vpcmpgtd
< IA-32/AMD64 vpcmpgtd opcode.
OP_vpcmpgtq
< IA-32/AMD64 vpcmpgtq opcode.
OP_vpcmpgtw
< IA-32/AMD64 vpcmpgtw opcode.
OP_vpcmpistri
< IA-32/AMD64 vpcmpistri opcode.
OP_vpcmpistrm
< IA-32/AMD64 vpcmpistrm opcode.
OP_vpcmpq
< IA-32/AMD64 AVX-512 OP_vpcmpq opcode.
OP_vpcmpub
< IA-32/AMD64 AVX-512 OP_vpcmpub opcode.
OP_vpcmpud
< IA-32/AMD64 AVX-512 OP_vpcmpud opcode.
OP_vpcmpuq
< IA-32/AMD64 AVX-512 OP_vpcmpuq opcode.
OP_vpcmpuw
< IA-32/AMD64 AVX-512 OP_vpcmpuw opcode.
OP_vpcmpw
< IA-32/AMD64 AVX-512 OP_vpcmpw opcode.
OP_vpcomb
< IA-32/AMD64 vpcomb opcode.
OP_vpcomd
< IA-32/AMD64 vpcomd opcode.
OP_vpcompressb
< IA-32/AMD64 vpcompressb opcode.
OP_vpcompressd
< IA-32/AMD64 AVX-512 OP_vpcompressd opcode.
OP_vpcompressq
< IA-32/AMD64 AVX-512 OP_vpcompressq opcode.
OP_vpcompressw
< IA-32/AMD64 vpcompressw opcode.
OP_vpcomq
< IA-32/AMD64 vpcomq opcode.
OP_vpcomub
< IA-32/AMD64 vpcomub opcode.
OP_vpcomud
< IA-32/AMD64 vpcomud opcode.
OP_vpcomuq
< IA-32/AMD64 vpcomuq opcode.
OP_vpcomuw
< IA-32/AMD64 vpcomuw opcode.
OP_vpcomw
< IA-32/AMD64 vpcomw opcode.
OP_vpconflictd
< IA-32/AMD64 AVX-512 OP_vpconflictd opcode.
OP_vpconflictq
< IA-32/AMD64 AVX-512 OP_vpconflictq opcode.
OP_vpdpbusd
< IA-32/AMD64 vpdpbusd opcode.
OP_vpdpbusds
< IA-32/AMD64 vpdpbusds opcode.
OP_vpdpwssd
< IA-32/AMD64 vpdpwssd opcode.
OP_vpdpwssds
< IA-32/AMD64 vpdpwssds opcode.
OP_vperm2f128
< IA-32/AMD64 vperm2f128 opcode.
OP_vperm2i128
< IA-32/AMD64 vperm2i128 opcode.
OP_vpermb
< IA-32/AMD64 AVX-512 OP_vpermb opcode.
OP_vpermd
< IA-32/AMD64 vpermd opcode.
OP_vpermi2b
< IA-32/AMD64 AVX-512 OP_vpermi2b opcode.
OP_vpermi2d
< IA-32/AMD64 AVX-512 OP_vpermi2d opcode.
OP_vpermi2pd
< IA-32/AMD64 AVX-512 OP_vpermi2pd opcode.
OP_vpermi2ps
< IA-32/AMD64 AVX-512 OP_vpermi2ps opcode.
OP_vpermi2q
< IA-32/AMD64 AVX-512 OP_vpermi2q opcode.
OP_vpermi2w
< IA-32/AMD64 AVX-512 OP_vpermi2w opcode.
OP_vpermil2pd
< IA-32/AMD64 vpermil2pd opcode.
OP_vpermil2ps
< IA-32/AMD64 vpermil2ps opcode.
OP_vpermilpd
< IA-32/AMD64 vpermilpd opcode.
OP_vpermilps
< IA-32/AMD64 vpermilps opcode.
OP_vpermpd
< IA-32/AMD64 vpermpd opcode.
OP_vpermps
< IA-32/AMD64 vpermps opcode.
OP_vpermq
< IA-32/AMD64 vpermq opcode.
OP_vpermt2b
< IA-32/AMD64 AVX-512 OP_vpermt2b opcode.
OP_vpermt2d
< IA-32/AMD64 AVX-512 OP_vpermt2d opcode.
OP_vpermt2pd
< IA-32/AMD64 AVX-512 OP_vpermt2pd opcode.
OP_vpermt2ps
< IA-32/AMD64 AVX-512 OP_vpermt2ps opcode.
OP_vpermt2q
< IA-32/AMD64 AVX-512 OP_vpermt2q opcode.
OP_vpermt2w
< IA-32/AMD64 AVX-512 OP_vpermt2w opcode.
OP_vpermw
< IA-32/AMD64 AVX-512 OP_vpermw opcode.
OP_vpexpandb
< IA-32/AMD64 vpexpandb opcode.
OP_vpexpandd
< IA-32/AMD64 AVX-512 OP_vpexpandd opcode.
OP_vpexpandq
< IA-32/AMD64 AVX-512 OP_vpexpandq opcode.
OP_vpexpandw
< IA-32/AMD64 vpexpandw opcode.
OP_vpextrb
< IA-32/AMD64 vpextrb opcode.
OP_vpextrd
< IA-32/AMD64 vpextrd opcode.
OP_vpextrq
< IA-32/AMD64 AVX-512 OP_vpextrq opcode.
OP_vpextrw
< IA-32/AMD64 vpextrw opcode.
OP_vpgatherdd
< IA-32/AMD64 vpgatherdd opcode.
OP_vpgatherdq
< IA-32/AMD64 vpgatherdq opcode.
OP_vpgatherqd
< IA-32/AMD64 vpgatherqd opcode.
OP_vpgatherqq
< IA-32/AMD64 vpgatherqq opcode.
OP_vphaddbd
< IA-32/AMD64 vphaddbd opcode.
OP_vphaddbq
< IA-32/AMD64 vphaddbq opcode.
OP_vphaddbw
< IA-32/AMD64 vphaddbw opcode.
OP_vphaddd
< IA-32/AMD64 vphaddd opcode.
OP_vphadddq
< IA-32/AMD64 vphadddq opcode.
OP_vphaddsw
< IA-32/AMD64 vphaddsw opcode.
OP_vphaddubd
< IA-32/AMD64 vphaddubd opcode.
OP_vphaddubq
< IA-32/AMD64 vphaddubq opcode.
OP_vphaddubw
< IA-32/AMD64 vphaddubw opcode.
OP_vphaddudq
< IA-32/AMD64 vphaddudq opcode.
OP_vphadduwd
< IA-32/AMD64 vphadduwd opcode.
OP_vphadduwq
< IA-32/AMD64 vphadduwq opcode.
OP_vphaddw
< IA-32/AMD64 vphaddw opcode.
OP_vphaddwd
< IA-32/AMD64 vphaddwd opcode.
OP_vphaddwq
< IA-32/AMD64 vphaddwq opcode.
OP_vphminposuw
< IA-32/AMD64 vphminposuw opcode.
OP_vphsubbw
< IA-32/AMD64 vphsubbw opcode.
OP_vphsubd
< IA-32/AMD64 vphsubd opcode.
OP_vphsubdq
< IA-32/AMD64 vphsubdq opcode.
OP_vphsubsw
< IA-32/AMD64 vphsubsw opcode.
OP_vphsubw
< IA-32/AMD64 vphsubw opcode.
OP_vphsubwd
< IA-32/AMD64 vphsubwd opcode.
OP_vpinsrb
< IA-32/AMD64 vpinsrb opcode.
OP_vpinsrd
< IA-32/AMD64 vpinsrd opcode.
OP_vpinsrq
< IA-32/AMD64 AVX-512 OP_vpinsrq opcode.
OP_vpinsrw
< IA-32/AMD64 vpinsrw opcode.
OP_vplzcntd
< IA-32/AMD64 AVX-512 OP_vplzcntd opcode.
OP_vplzcntq
< IA-32/AMD64 AVX-512 OP_vplzcntq opcode.
OP_vpmacsdd
< IA-32/AMD64 vpmacsdd opcode.
OP_vpmacsdqh
< IA-32/AMD64 vpmacsdqh opcode.
OP_vpmacsdql
< IA-32/AMD64 vpmacsdql opcode.
OP_vpmacssdd
< IA-32/AMD64 vpmacssdd opcode.
OP_vpmacssdqh
< IA-32/AMD64 vpmacssdqh opcode.
OP_vpmacssdql
< IA-32/AMD64 vpmacssdql opcode.
OP_vpmacsswd
< IA-32/AMD64 vpmacsswd opcode.
OP_vpmacssww
< IA-32/AMD64 vpmacssww opcode.
OP_vpmacswd
< IA-32/AMD64 vpmacswd opcode.
OP_vpmacsww
< IA-32/AMD64 vpmacsww opcode.
OP_vpmadcsswd
< IA-32/AMD64 vpmadcsswd opcode.
OP_vpmadcswd
< IA-32/AMD64 vpmadcswd opcode.
OP_vpmadd52huq
< IA-32/AMD64 AVX-512 OP_vpmadd52huq opcode.
OP_vpmadd52luq
< IA-32/AMD64 AVX-512 OP_vpmadd52luq opcode.
OP_vpmaddubsw
< IA-32/AMD64 vpmaddubsw opcode.
OP_vpmaddwd
< IA-32/AMD64 vpmaddwd opcode.
OP_vpmaskmovd
< IA-32/AMD64 vpmaskmovd opcode.
OP_vpmaskmovq
< IA-32/AMD64 vpmaskmovq opcode.
OP_vpmaxsb
< IA-32/AMD64 vpmaxsb opcode.
OP_vpmaxsd
< IA-32/AMD64 vpmaxsd opcode.
OP_vpmaxsq
< IA-32/AMD64 AVX-512 OP_vpmaxsq opcode.
OP_vpmaxsw
< IA-32/AMD64 vpmaxsw opcode.
OP_vpmaxub
< IA-32/AMD64 vpmaxub opcode.
OP_vpmaxud
< IA-32/AMD64 vpmaxud opcode.
OP_vpmaxuq
< IA-32/AMD64 AVX-512 OP_vpmaxuq opcode.
OP_vpmaxuw
< IA-32/AMD64 vpmaxuw opcode.
OP_vpminsb
< IA-32/AMD64 vpminsb opcode.
OP_vpminsd
< IA-32/AMD64 vpminsd opcode.
OP_vpminsq
< IA-32/AMD64 AVX-512 OP_vpminsq opcode.
OP_vpminsw
< IA-32/AMD64 vpminsw opcode.
OP_vpminub
< IA-32/AMD64 vpminub opcode.
OP_vpminud
< IA-32/AMD64 vpminud opcode.
OP_vpminuq
< IA-32/AMD64 AVX-512 OP_vpminuq opcode.
OP_vpminuw
< IA-32/AMD64 vpminuw opcode.
OP_vpmovb2m
< IA-32/AMD64 AVX-512 OP_vpmovb2m opcode.
OP_vpmovd2m
< IA-32/AMD64 AVX-512 OP_vpmovd2m opcode.
OP_vpmovdb
< IA-32/AMD64 AVX-512 OP_vpmovdb opcode.
OP_vpmovdw
< IA-32/AMD64 AVX-512 OP_vpmovdw opcode.
OP_vpmovm2b
< IA-32/AMD64 AVX-512 OP_vpmovm2b opcode.
OP_vpmovm2d
< IA-32/AMD64 AVX-512 OP_vpmovm2d opcode.
OP_vpmovm2q
< IA-32/AMD64 AVX-512 OP_vpmovm2q opcode.
OP_vpmovm2w
< IA-32/AMD64 AVX-512 OP_vpmovm2w opcode.
OP_vpmovmskb
< IA-32/AMD64 vpmovmskb opcode.
OP_vpmovq2m
< IA-32/AMD64 AVX-512 OP_vpmovq2m opcode.
OP_vpmovqb
< IA-32/AMD64 AVX-512 OP_vpmovqb opcode.
OP_vpmovqd
< IA-32/AMD64 AVX-512 OP_vpmovqd opcode.
OP_vpmovqw
< IA-32/AMD64 AVX-512 OP_vpmovqw opcode.
OP_vpmovsdb
< IA-32/AMD64 AVX-512 OP_vpmovsdb opcode.
OP_vpmovsdw
< IA-32/AMD64 AVX-512 OP_vpmovsdw opcode.
OP_vpmovsqb
< IA-32/AMD64 AVX-512 OP_vpmovsqb opcode.
OP_vpmovsqd
< IA-32/AMD64 AVX-512 OP_vpmovsqd opcode.
OP_vpmovsqw
< IA-32/AMD64 AVX-512 OP_vpmovsqw opcode.
OP_vpmovswb
< IA-32/AMD64 AVX-512 OP_vpmovswb opcode.
OP_vpmovsxbd
< IA-32/AMD64 vpmovsxbd opcode.
OP_vpmovsxbq
< IA-32/AMD64 vpmovsxbq opcode.
OP_vpmovsxbw
< IA-32/AMD64 vpmovsxbw opcode.
OP_vpmovsxdq
< IA-32/AMD64 vpmovsxdq opcode.
OP_vpmovsxwd
< IA-32/AMD64 vpmovsxwd opcode.
OP_vpmovsxwq
< IA-32/AMD64 vpmovsxwq opcode.
OP_vpmovusdb
< IA-32/AMD64 AVX-512 OP_vpmovusdb opcode.
OP_vpmovusdw
< IA-32/AMD64 AVX-512 OP_vpmovusdw opcode.
OP_vpmovusqb
< IA-32/AMD64 AVX-512 OP_vpmovusqb opcode.
OP_vpmovusqd
< IA-32/AMD64 AVX-512 OP_vpmovusqd opcode.
OP_vpmovusqw
< IA-32/AMD64 AVX-512 OP_vpmovusqw opcode.
OP_vpmovuswb
< IA-32/AMD64 AVX-512 OP_vpmovuswb opcode.
OP_vpmovw2m
< IA-32/AMD64 AVX-512 OP_vpmovw2m opcode.
OP_vpmovwb
< IA-32/AMD64 AVX-512 OP_vpmovwb opcode.
OP_vpmovzxbd
< IA-32/AMD64 vpmovzxbd opcode.
OP_vpmovzxbq
< IA-32/AMD64 vpmovzxbq opcode.
OP_vpmovzxbw
< IA-32/AMD64 vpmovzxbw opcode.
OP_vpmovzxdq
< IA-32/AMD64 vpmovzxdq opcode.
OP_vpmovzxwd
< IA-32/AMD64 vpmovzxwd opcode.
OP_vpmovzxwq
< IA-32/AMD64 vpmovzxwq opcode.
OP_vpmuldq
< IA-32/AMD64 vpmuldq opcode.
OP_vpmulhrsw
< IA-32/AMD64 vpmulhrsw opcode.
OP_vpmulhuw
< IA-32/AMD64 vpmulhuw opcode.
OP_vpmulhw
< IA-32/AMD64 vpmulhw opcode.
OP_vpmulld
< IA-32/AMD64 vpmulld opcode.
OP_vpmullq
< IA-32/AMD64 AVX-512 OP_vpmullq opcode.
OP_vpmullw
< IA-32/AMD64 vpmullw opcode.
OP_vpmultishiftqb
< IA-32/AMD64 vpmultishiftqb opcode.
OP_vpmuludq
< IA-32/AMD64 vpmuludq opcode.
OP_vpopcntb
< IA-32/AMD64 vpopcntb opcode.
OP_vpopcntd
< IA-32/AMD64 vpopcntd opcode.
OP_vpopcntq
< IA-32/AMD64 vpopcntd opcode.
OP_vpopcntw
< IA-32/AMD64 vpopcntw opcode.
OP_vpor
< IA-32/AMD64 vpor opcode.
OP_vpord
< IA-32/AMD64 AVX-512 OP_vpord opcode.
OP_vporq
< IA-32/AMD64 AVX-512 OP_vporq opcode.
OP_vpperm
< IA-32/AMD64 vpperm opcode.
OP_vprold
< IA-32/AMD64 AVX-512 OP_vprold opcode.
OP_vprolq
< IA-32/AMD64 AVX-512 OP_vprolq opcode.
OP_vprolvd
< IA-32/AMD64 AVX-512 OP_vprolvd opcode.
OP_vprolvq
< IA-32/AMD64 AVX-512 OP_vprolvq opcode.
OP_vprord
< IA-32/AMD64 AVX-512 OP_vprord opcode.
OP_vprorq
< IA-32/AMD64 AVX-512 OP_vprorq opcode.
OP_vprorvd
< IA-32/AMD64 AVX-512 OP_vprorvd opcode.
OP_vprorvq
< IA-32/AMD64 AVX-512 OP_vprorvq opcode.
OP_vprotb
< IA-32/AMD64 vprotb opcode.
OP_vprotd
< IA-32/AMD64 vprotd opcode.
OP_vprotq
< IA-32/AMD64 vprotq opcode.
OP_vprotw
< IA-32/AMD64 vprotw opcode.
OP_vpsadbw
< IA-32/AMD64 vpsadbw opcode.
OP_vpscatterdd
< IA-32/AMD64 AVX-512 OP_vpscatterdd opcode.
OP_vpscatterdq
< IA-32/AMD64 AVX-512 OP_vpscatterdq opcode.
OP_vpscatterqd
< IA-32/AMD64 AVX-512 OP_vpscatterqd opcode.
OP_vpscatterqq
< IA-32/AMD64 AVX-512 OP_vpscatterqq opcode.
OP_vpshab
< IA-32/AMD64 vpshab opcode.
OP_vpshad
< IA-32/AMD64 vpshad opcode.
OP_vpshaq
< IA-32/AMD64 vpshaq opcode.
OP_vpshaw
< IA-32/AMD64 vpshaw opcode.
OP_vpshlb
< IA-32/AMD64 vpshlb opcode.
OP_vpshld
< IA-32/AMD64 vpshld opcode.
OP_vpshldd
< IA-32/AMD64 vpshldd opcode.
OP_vpshldq
< IA-32/AMD64 vpshldq opcode.
OP_vpshldvd
< IA-32/AMD64 vpshldvd opcode.
OP_vpshldvq
< IA-32/AMD64 vpshldvq opcode.
OP_vpshldvw
< IA-32/AMD64 vpshldvw opcode.
OP_vpshldw
< IA-32/AMD64 vpshldw opcode.
OP_vpshlq
< IA-32/AMD64 vpshlq opcode.
OP_vpshlw
< IA-32/AMD64 vpshlw opcode.
OP_vpshrdd
< IA-32/AMD64 vpshrdd opcode.
OP_vpshrdq
< IA-32/AMD64 vpshrdq opcode.
OP_vpshrdvd
< IA-32/AMD64 vpshrdvd opcode.
OP_vpshrdvq
< IA-32/AMD64 vpshrdvq opcode.
OP_vpshrdvw
< IA-32/AMD64 vpshrdvw opcode.
OP_vpshrdw
< IA-32/AMD64 vpshrdw opcode.
OP_vpshufb
< IA-32/AMD64 vpshufb opcode.
OP_vpshufbitqmb
< IA-32/AMD64 vpshufbitqmb opcode.
OP_vpshufd
< IA-32/AMD64 vpshufd opcode.
OP_vpshufhw
< IA-32/AMD64 vpshufhw opcode.
OP_vpshuflw
< IA-32/AMD64 vpshuflw opcode.
OP_vpsignb
< IA-32/AMD64 vpsignb opcode.
OP_vpsignd
< IA-32/AMD64 vpsignd opcode.
OP_vpsignw
< IA-32/AMD64 vpsignw opcode.
OP_vpslld
< IA-32/AMD64 vpslld opcode.
OP_vpslldq
< IA-32/AMD64 vpslldq opcode.
OP_vpsllq
< IA-32/AMD64 vpsllq opcode.
OP_vpsllvd
< IA-32/AMD64 vpsllvd opcode.
OP_vpsllvq
< IA-32/AMD64 vpsllvq opcode.
OP_vpsllvw
< IA-32/AMD64 AVX-512 OP_vpsllvw opcode.
OP_vpsllw
< IA-32/AMD64 vpsllw opcode.
OP_vpsrad
< IA-32/AMD64 vpsrad opcode.
OP_vpsraq
< IA-32/AMD64 AVX-512 OP_vpsraq opcode.
OP_vpsravd
< IA-32/AMD64 vpsravd opcode.
OP_vpsravq
< IA-32/AMD64 AVX-512 OP_vpsravq opcode.
OP_vpsravw
< IA-32/AMD64 AVX-512 OP_vpsravw opcode.
OP_vpsraw
< IA-32/AMD64 vpsraw opcode.
OP_vpsrld
< IA-32/AMD64 vpsrld opcode.
OP_vpsrldq
< IA-32/AMD64 vpsrldq opcode.
OP_vpsrlq
< IA-32/AMD64 vpsrlq opcode.
OP_vpsrlvd
< IA-32/AMD64 vpsrlvd opcode.
OP_vpsrlvq
< IA-32/AMD64 vpsrlvq opcode.
OP_vpsrlvw
< IA-32/AMD64 AVX-512 OP_vpsrlvw opcode.
OP_vpsrlw
< IA-32/AMD64 vpsrlw opcode.
OP_vpsubb
< IA-32/AMD64 vpsubb opcode.
OP_vpsubd
< IA-32/AMD64 vpsubd opcode.
OP_vpsubq
< IA-32/AMD64 vpsubq opcode.
OP_vpsubsb
< IA-32/AMD64 vpsubsb opcode.
OP_vpsubsw
< IA-32/AMD64 vpsubsw opcode.
OP_vpsubusb
< IA-32/AMD64 vpsubusb opcode.
OP_vpsubusw
< IA-32/AMD64 vpsubusw opcode.
OP_vpsubw
< IA-32/AMD64 vpsubw opcode.
OP_vpternlogd
< IA-32/AMD64 AVX-512 OP_vpternlogd opcode.
OP_vpternlogq
< IA-32/AMD64 AVX-512 OP_vpternlogd opcode.
OP_vptest
< IA-32/AMD64 vptest opcode.
OP_vptestmb
< IA-32/AMD64 AVX-512 OP_vptestmb opcode.
OP_vptestmd
< IA-32/AMD64 AVX-512 OP_vptestmd opcode.
OP_vptestmq
< IA-32/AMD64 AVX-512 OP_vptestmq opcode.
OP_vptestmw
< IA-32/AMD64 AVX-512 OP_vptestmw opcode.
OP_vptestnmb
< IA-32/AMD64 AVX-512 OP_vptestnmb opcode.
OP_vptestnmd
< IA-32/AMD64 AVX-512 OP_vptestnmd opcode.
OP_vptestnmq
< IA-32/AMD64 AVX-512 OP_vptestnmq opcode.
OP_vptestnmw
< IA-32/AMD64 AVX-512 OP_vptestnmw opcode.
OP_vpunpckhbw
< IA-32/AMD64 vpunpckhbw opcode.
OP_vpunpckhdq
< IA-32/AMD64 vpunpckhdq opcode.
OP_vpunpckhqdq
< IA-32/AMD64 vpunpckhqdq opcode.
OP_vpunpckhwd
< IA-32/AMD64 vpunpckhwd opcode.
OP_vpunpcklbw
< IA-32/AMD64 vpunpcklbw opcode.
OP_vpunpckldq
< IA-32/AMD64 vpunpckldq opcode.
OP_vpunpcklqdq
< IA-32/AMD64 vpunpcklqdq opcode.
OP_vpunpcklwd
< IA-32/AMD64 vpunpcklwd opcode.
OP_vpxor
< IA-32/AMD64 vpxor opcode.
OP_vpxord
< IA-32/AMD64 AVX-512 OP_vpxordvpxord opcode.
OP_vpxorq
< IA-32/AMD64 AVX-512 OP_vpxorq opcode.
OP_vrangepd
< IA-32/AMD64 AVX-512 OP_vrangepd opcode.
OP_vrangeps
< IA-32/AMD64 AVX-512 OP_vrangeps opcode.
OP_vrangesd
< IA-32/AMD64 AVX-512 OP_vrangesd opcode.
OP_vrangess
< IA-32/AMD64 AVX-512 OP_vrangess opcode.
OP_vrcp14pd
< IA-32/AMD64 AVX-512 OP_vrcp14pd opcode.
OP_vrcp14ps
< IA-32/AMD64 AVX-512 OP_vrcp14ps opcode.
OP_vrcp14sd
< IA-32/AMD64 AVX-512 OP_vrcp14sd opcode.
OP_vrcp14ss
< IA-32/AMD64 AVX-512 OP_vrcp14ss opcode.
OP_vrcp28pd
< IA-32/AMD64 AVX-512 OP_vrcp28pd opcode.
OP_vrcp28ps
< IA-32/AMD64 AVX-512 OP_vrcp28ps opcode.
OP_vrcp28sd
< IA-32/AMD64 AVX-512 OP_vrcp28sd opcode.
OP_vrcp28ss
< IA-32/AMD64 AVX-512 OP_vrcp28ss opcode.
OP_vrcpps
< IA-32/AMD64 vrcpps opcode.
OP_vrcpss
< IA-32/AMD64 vrcpss opcode.
OP_vreducepd
< IA-32/AMD64 AVX-512 OP_vreducepd opcode.
OP_vreduceps
< IA-32/AMD64 AVX-512 OP_vreduceps opcode.
OP_vreducesd
< IA-32/AMD64 AVX-512 OP_vreducesd opcode.
OP_vreducess
< IA-32/AMD64 AVX-512 OP_vreducess opcode.
OP_vrndscalepd
< IA-32/AMD64 AVX-512 OP_vrndscalepd opcode.
OP_vrndscaleps
< IA-32/AMD64 AVX-512 OP_vrndscaleps opcode.
OP_vrndscalesd
< IA-32/AMD64 AVX-512 OP_vrndscalesd opcode.
OP_vrndscaless
< IA-32/AMD64 AVX-512 OP_vrndscaless opcode.
OP_vroundpd
< IA-32/AMD64 vroundpd opcode.
OP_vroundps
< IA-32/AMD64 vroundps opcode.
OP_vroundsd
< IA-32/AMD64 vroundsd opcode.
OP_vroundss
< IA-32/AMD64 vroundss opcode.
OP_vrsqrt14pd
< IA-32/AMD64 AVX-512 OP_vrsqrt14pd opcode.
OP_vrsqrt14ps
< IA-32/AMD64 AVX-512 OP_vrsqrt14ps opcode.
OP_vrsqrt14sd
< IA-32/AMD64 AVX-512 OP_vrsqrt14sd opcode.
OP_vrsqrt14ss
< IA-32/AMD64 AVX-512 OP_vrsqrt14ss opcode.
OP_vrsqrt28pd
< IA-32/AMD64 AVX-512 OP_vrsqrt28pd opcode.
OP_vrsqrt28ps
< IA-32/AMD64 AVX-512 OP_vrsqrt28ps opcode.
OP_vrsqrt28sd
< IA-32/AMD64 AVX-512 OP_vrsqrt28sd opcode.
OP_vrsqrt28ss
< IA-32/AMD64 AVX-512 OP_vrsqrt28ss opcode.
OP_vrsqrtps
< IA-32/AMD64 vrsqrtps opcode.
OP_vrsqrtss
< IA-32/AMD64 vrsqrtss opcode.
OP_vscalefpd
< IA-32/AMD64 AVX-512 OP_vscalepd opcode.
OP_vscalefps
< IA-32/AMD64 AVX-512 OP_vscaleps opcode.
OP_vscalefsd
< IA-32/AMD64 AVX-512 OP_vscalesd opcode.
OP_vscalefss
< IA-32/AMD64 AVX-512 OP_vscalesss opcode.
OP_vscatterdpd
< IA-32/AMD64 AVX-512 OP_vscatterdpd opcode.
OP_vscatterdps
< IA-32/AMD64 AVX-512 OP_vscatterdps opcode.
OP_vscatterpf0dpd
< IA-32/AMD64 AVX-512 OP_vscatterpf0dpd opcode.
OP_vscatterpf0dps
< IA-32/AMD64 AVX-512 OP_vscatterpf0dps opcode.
OP_vscatterpf0qpd
< IA-32/AMD64 AVX-512 OP_vscatterpf0qpd opcode.
OP_vscatterpf0qps
< IA-32/AMD64 AVX-512 OP_vscatterpf0qps opcode.
OP_vscatterpf1dpd
< IA-32/AMD64 AVX-512 OP_vscatterpf1dpd opcode.
OP_vscatterpf1dps
< IA-32/AMD64 AVX-512 OP_vscatterpf1dps opcode.
OP_vscatterpf1qpd
< IA-32/AMD64 AVX-512 OP_vscatterpf1qpd opcode.
OP_vscatterpf1qps
< IA-32/AMD64 AVX-512 OP_vscatterpf1qps opcode.
OP_vscatterqpd
< IA-32/AMD64 AVX-512 OP_vscatterqpd opcode.
OP_vscatterqps
< IA-32/AMD64 AVX-512 OP_vscatterqps opcode.
OP_vshuff32x4
< IA-32/AMD64 AVX-512 OP_vshuff32x4 opcode.
OP_vshuff64x2
< IA-32/AMD64 AVX-512 OP_vshuff64x2 opcode.
OP_vshufi32x4
< IA-32/AMD64 AVX-512 OP_vshufi32x4 opcode.
OP_vshufi64x2
< IA-32/AMD64 AVX-512 OP_vshufi64x2 opcode.
OP_vshufpd
< IA-32/AMD64 vshufpd opcode.
OP_vshufps
< IA-32/AMD64 vshufps opcode.
OP_vsqrtpd
< IA-32/AMD64 vsqrtpd opcode.
OP_vsqrtps
< IA-32/AMD64 vsqrtps opcode.
OP_vsqrtsd
< IA-32/AMD64 vsqrtsd opcode.
OP_vsqrtss
< IA-32/AMD64 vsqrtss opcode.
OP_vstmxcsr
< IA-32/AMD64 vstmxcsr opcode.
OP_vsubpd
< IA-32/AMD64 vsubpd opcode.
OP_vsubps
< IA-32/AMD64 vsubps opcode.
OP_vsubsd
< IA-32/AMD64 vsubsd opcode.
OP_vsubss
< IA-32/AMD64 vsubss opcode.
OP_vtestpd
< IA-32/AMD64 vtestpd opcode.
OP_vtestps
< IA-32/AMD64 vtestps opcode.
OP_vucomisd
< IA-32/AMD64 vucomisd opcode.
OP_vucomiss
< IA-32/AMD64 vucomiss opcode.
OP_vunpckhpd
< IA-32/AMD64 vunpckhpd opcode.
OP_vunpckhps
< IA-32/AMD64 vunpckhps opcode.
OP_vunpcklpd
< IA-32/AMD64 vunpcklpd opcode.
OP_vunpcklps
< IA-32/AMD64 vunpcklps opcode.
OP_vxorpd
< IA-32/AMD64 vxorpd opcode.
OP_vxorps
< IA-32/AMD64 vxorps opcode.
OP_vzeroall
< IA-32/AMD64 vzeroall opcode.
OP_vzeroupper
< IA-32/AMD64 vzeroupper opcode.
OP_wbinvd
< IA-32/AMD64 wbinvd opcode.
OP_wrfsbase
< IA-32/AMD64 wrfsbase opcode.
OP_wrgsbase
< IA-32/AMD64 wrgsbase opcode.
OP_wrmsr
< IA-32/AMD64 wrmsr opcode.
OP_wrpkru
< IA-32/AMD64 MPK wrpkru opcode.
OP_xabort
< IA-32/AMD64 xabort opcode.
OP_xadd
< IA-32/AMD64 xadd opcode.
OP_xbegin
< IA-32/AMD64 xbegin opcode.
OP_xchg
< IA-32/AMD64 xchg opcode.
OP_xend
< IA-32/AMD64 xend opcode.
OP_xgetbv
< IA-32/AMD64 xgetbv opcode.
OP_xlat
< IA-32/AMD64 xlat opcode.
OP_xor
< IA-32/AMD64 xor opcode.
OP_xorpd
< IA-32/AMD64 xorpd opcode.
OP_xorps
< IA-32/AMD64 xorps opcode.
OP_xresldtrk
< IA-32/AMD64 xresldtrk opcode.
OP_xrstor32
< IA-32/AMD64 xrstor opcode.
OP_xrstor64
< IA-32/AMD64 xrstor64 opcode.
OP_xrstors32
< IA-32/AMD64 xrstors32 opcode.
OP_xrstors64
< IA-32/AMD64 xrstors64 opcode.
OP_xsave32
< IA-32/AMD64 xsave opcode.
OP_xsave64
< IA-32/AMD64 xsave64 opcode.
OP_xsavec32
< IA-32/AMD64 xsavec opcode.
OP_xsavec64
< IA-32/AMD64 xsavec64 opcode.
OP_xsaveopt32
< IA-32/AMD64 xsaveopt opcode.
OP_xsaveopt64
< IA-32/AMD64 xsaveopt64 opcode.
OP_xsaves32
< IA-32/AMD64 xsaves32 opcode.
OP_xsaves64
< IA-32/AMD64 xsaves64 opcode.
OP_xsetbv
< IA-32/AMD64 xsetbv opcode.
OP_xsusldtrk
< IA-32/AMD64 xsusldtrk opcode.
OP_xtest
< IA-32/AMD64 xtest opcode.
RESERVED_OPMASK
RESERVED_XMM
RESERVED_YMM
RESERVED_ZMM
_DR_ANNOTATION_H_
_DR_API_H_
_DR_APP_H_
_DR_CLIENT_AVX512_CODE_IN_USE_
_DR_CONFIG_H_
_DR_DEFINES_H_
_DR_EVENTS_H_
_DR_IR_DECODE_H_
_DR_IR_DISASSEMBLE_H_
_DR_IR_ENCODE_H_
_DR_IR_INSTRLIST_H_
_DR_IR_INSTR_H_
_DR_IR_INSTR_INLINE_H_
_DR_IR_MACROS_H_
_DR_IR_MACROS_X86_H_
_DR_IR_OPCODES_H_
_DR_IR_OPCODES_X86_H_
_DR_IR_OPND_H_
_DR_IR_UTILS_H_
_DR_MODULES_H_
_DR_OS_UTILS_H_
_DR_PROC_H_
_DR_TOOLS_H_
_DR_TRACEDUMP_H_
_USES_DR_VERSION_
_dr_annotation_calling_convention_t_DR_ANNOTATION_CALL_TYPE_FASTCALL
< calling convention “fastcall”
_dr_annotation_calling_convention_t_DR_ANNOTATION_CALL_TYPE_LAST
< Sentinel value for iterator convenience
_dr_annotation_calling_convention_t_DR_ANNOTATION_CALL_TYPE_VARARG
The calling convention for vararg functions on x64, which must be “fastcall”.
_dr_encoding_hint_type_t_DR_ENCODING_HINT_NONE
< No encoding hint is present.
_dr_encoding_hint_type_t_DR_ENCODING_HINT_X86_EVEX
< x86: Encode in EVEX form if available.
_dr_extend_type_t_DR_EXTEND_DEFAULT
< Default value.
_dr_extend_type_t_DR_EXTEND_SXTB
< Signed extend byte.
_dr_extend_type_t_DR_EXTEND_SXTH
< Signed extend halfword.
_dr_extend_type_t_DR_EXTEND_SXTW
< Signed extend word.
_dr_extend_type_t_DR_EXTEND_SXTX
< Signed extend doubleword (a no-op).
_dr_extend_type_t_DR_EXTEND_UXTB
< Unsigned extend byte.
_dr_extend_type_t_DR_EXTEND_UXTH
< Unsigned extend halfword.
_dr_extend_type_t_DR_EXTEND_UXTW
< Unsigned extend word.
_dr_extend_type_t_DR_EXTEND_UXTX
< Unsigned extend doubleword (a no-op).
_dr_isa_mode_t_DR_ISA_AMD64
AMD64 (Intel/AMD 64-bit mode).
_dr_isa_mode_t_DR_ISA_ARM_A32
ARM A32 (AArch32 ARM).
_dr_isa_mode_t_DR_ISA_ARM_A64
ARM A64 (AArch64).
_dr_isa_mode_t_DR_ISA_ARM_THUMB
Thumb (ARM T32).
_dr_isa_mode_t_DR_ISA_IA32
IA-32 (Intel/AMD 32-bit mode).
_dr_isa_mode_t_DR_ISA_REGDEPS
A synthetic ISA that has the purpose of preserving register dependencies and giving hints on the type of operation an instruction performs.
_dr_isa_mode_t_DR_ISA_RV64
RISC-V (RV64).
_dr_isa_mode_t_DR_ISA_X86
Alias for DR_ISA_IA32.
_dr_opnd_flags_t_DR_OPND_DEFAULT
Default (no additional flags).
_dr_opnd_flags_t_DR_OPND_EXTENDED
This register’s value is extended prior to use in the containing instruction. This flag is for informational purposes only and is not guaranteed to be consistent with the shift type of an index register or displacement if the latter are set without using opnd_set_index_extend() or if an instruction is created without using high-level API routines. This flag is also ignored for encoding and will not apply a shift on its own.
_dr_opnd_flags_t_DR_OPND_IMM_PRINT_DECIMAL
This is used by RISCV64 for immediates display format.
_dr_opnd_flags_t_DR_OPND_IMPLICIT
The register number is not in the instruction encoding but is calculated based on another register
_dr_opnd_flags_t_DR_OPND_IN_LIST
A hint indicating that this register operand is part of a register list.
_dr_opnd_flags_t_DR_OPND_IS_CONDITION
This immediate integer operand should be interpreted as an AArch64 condition.
_dr_opnd_flags_t_DR_OPND_IS_EXTEND
This immediate integer operand should be interpreted as an AArch64 extend type.
_dr_opnd_flags_t_DR_OPND_IS_GOVERNING
The register is a SVE governing predicate register: it is used to select which elements of a vector are actually read or written to in AArch64 SVE
_dr_opnd_flags_t_DR_OPND_IS_MERGE_PREDICATE
SVE predicate registers can either be merging, zero or neither. If one of these are set then they are either a merge or zero otherwise aren’t either.
_dr_opnd_flags_t_DR_OPND_IS_PREDICATE_CONSTRAINT
This immediate integer operand should be treated as an AArch64 SVE predicate constraint
_dr_opnd_flags_t_DR_OPND_IS_SHIFT
This immediate integer operand should be interpreted as an ARM/AArch64 shift type.
_dr_opnd_flags_t_DR_OPND_IS_VECTOR
Registers with this flag should be considered vectors and have an element size representing their element size.
_dr_opnd_flags_t_DR_OPND_IS_ZERO_PREDICATE
SVE predicate registers can either be merging, zero or neither. If one of these are set then they are either a merge or zero otherwise aren’t either.
_dr_opnd_flags_t_DR_OPND_MULTI_PART
This operand should be combined with an adjacent operand to create a single value. This flag is typically used on immediates: e.g., for ARM’s OP_vbic_i64, two 32-bit immediate operands should be interpreted as the low and high parts of a 64-bit value.
_dr_opnd_flags_t_DR_OPND_NEGATED
This register’s value is negated prior to use in the containing instruction.
_dr_opnd_flags_t_DR_OPND_SHIFTED
This register’s value is shifted prior to use in the containing instruction. This flag is for informational purposes only and is not guaranteed to be consistent with the shift type of an index register or displacement if the latter are set without using opnd_set_index_shift() or if an instruction is created without using high-level API routines. This flag is also ignored for encoding and will not apply a shift on its own.
_dr_opnd_query_flags_t_DR_QUERY_DEFAULT
The default value that typical liveness analysis would want to use.
_dr_opnd_query_flags_t_DR_QUERY_INCLUDE_ALL
Includes all operands whether conditional or not.
_dr_opnd_query_flags_t_DR_QUERY_INCLUDE_COND_DSTS
By default, routines that take in these flags will only consider destinations that are always written. Thus, all destinations are skipped for an instruction that is predicated and executes conditionally (see instr_is_predicated()). If this flag is set, a conditionally executed instruction’s destinations are included just like any other instruction’s. As a special case, the addressing registers inside a destination memory operand are covered by DR_QUERY_INCLUDE_COND_SRCS rather than this flag.
_dr_opnd_query_flags_t_DR_QUERY_INCLUDE_COND_SRCS
By default, routines that take in these flags will only consider sources that are always read. Thus, all sources are skipped for an instruction that is predicated and executes conditionally (see instr_is_predicated()), except for predication conditions that involve the source operand values. If this flag is set, a conditionally executed instruction’s sources are included just like any other instruction’s. As a special case, the addressing registers inside a destination memory operand are covered by this flag rather than DR_QUERY_INCLUDE_COND_DSTS.
_dr_pred_constr_type_t_DR_PRED_CONSTR_ALL
< all elements active.
_dr_pred_constr_type_t_DR_PRED_CONSTR_FIRST_NUMBER
_dr_pred_constr_type_t_DR_PRED_CONSTR_LAST_NUMBER
_dr_pred_constr_type_t_DR_PRED_CONSTR_MUL3
< Largest multiple of 3 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_MUL4
< Largest multiple of 4 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_POW2
< POW2 pattern.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_14
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_15
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_16
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_17
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_18
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_19
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_20
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_21
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_22
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_23
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_24
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_25
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_26
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_27
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_UIMM5_28
< Unspecified constraint.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL1
< 1 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL2
< 2 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL3
< 3 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL4
< 4 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL5
< 5 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL6
< 6 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL7
< 7 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL8
< 8 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL16
< 16 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL32
< 32 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL64
< 64 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL128
< 128 active elements.
_dr_pred_constr_type_t_DR_PRED_CONSTR_VL256
< 256 active elements.
_dr_pred_trigger_t_DR_PRED_TRIGGER_INVALID
An invalid parameter was passed.
_dr_pred_trigger_t_DR_PRED_TRIGGER_MATCH
The predicate matches and the instruction will execute.
_dr_pred_trigger_t_DR_PRED_TRIGGER_MISMATCH
The predicate does not match and the instruction will not execute.
_dr_pred_trigger_t_DR_PRED_TRIGGER_NOPRED
This instruction is not predicated.
_dr_pred_trigger_t_DR_PRED_TRIGGER_UNKNOWN
It is unknown whether the predicate matches.
_dr_pred_type_t_DR_PRED_B
< x86 condition: below (CF=1).
_dr_pred_type_t_DR_PRED_BE
< x86 condition: below or equal (CF=1 or ZF=1).
_dr_pred_type_t_DR_PRED_COMPLEX
x86 condition: special opcode-specific condition that depends on the values of the source operands. Thus, unlike all of the other conditions, the source operands will be accessed even if the condition then fails and the destinations are not touched. Any written eflags are unconditionally written, unlike regular destination operands.
_dr_pred_type_t_DR_PRED_EQ
< Condition code: equal.
_dr_pred_type_t_DR_PRED_GE
< Condition code: signed greater than or equal.
_dr_pred_type_t_DR_PRED_GT
< Condition code: signed greater than.
_dr_pred_type_t_DR_PRED_L
< x86 condition: less (SF != OF).
_dr_pred_type_t_DR_PRED_LE
< x86 condition: less or equal (ZF=1 or SF != OF).
_dr_pred_type_t_DR_PRED_LT
< Condition code: signed less than.
_dr_pred_type_t_DR_PRED_NB
< x86 condition: not below (CF=0).
_dr_pred_type_t_DR_PRED_NBE
< x86 condition: not below or equal (CF=0 and ZF=0).
_dr_pred_type_t_DR_PRED_NE
< Condition code: not equal.
_dr_pred_type_t_DR_PRED_NL
< x86 condition: not less (SF=OF).
_dr_pred_type_t_DR_PRED_NLE
< x86 condition: not less or equal (ZF=0 and SF=OF).
_dr_pred_type_t_DR_PRED_NO
< x86 condition: no overflow (OF=0).
_dr_pred_type_t_DR_PRED_NONE
< No predicate is present.
_dr_pred_type_t_DR_PRED_NP
< x86 condition: not parity (PF=0).
_dr_pred_type_t_DR_PRED_NS
< x86 condition: not sign (SF=0).
_dr_pred_type_t_DR_PRED_NZ
< x86 condition: not zero (ZF=0).
_dr_pred_type_t_DR_PRED_O
< x86 condition: overflow (OF=1).
_dr_pred_type_t_DR_PRED_P
< x86 condition: parity (PF=1).
_dr_pred_type_t_DR_PRED_S
< x86 condition: sign (SF=1).
_dr_pred_type_t_DR_PRED_Z
< x86 condition: zero (ZF=1).
_dr_shift_type_t_DR_SHIFT_ASR
< Arithmetic shift right.
_dr_shift_type_t_DR_SHIFT_LSL
< Logical shift left.
_dr_shift_type_t_DR_SHIFT_LSR
< Logical shift right.
_dr_shift_type_t_DR_SHIFT_MUL
< Multiply.
_dr_shift_type_t_DR_SHIFT_NONE
No shift. Only valid for shifts whose amount is stored in an immediate, not a register.
_dr_shift_type_t_DR_SHIFT_ROR
< Rotate right.
_dr_shift_type_t_DR_SHIFT_RRX
The register is rotated right by 1 bit, with the carry flag (rather than bit 0) being shifted in to the most-significant bit. (For shifts of general source registers, if the instruction writes the condition codes, bit 0 is then shifted into the carry flag: but for memory references bit 0 is simply dropped.) Only valid for shifts whose amount is stored in an immediate, not a register.
_dr_valgrind_request_id_t_DR_VG_ID__DISCARD_TRANSLATIONS
Request that DynamoRIO discard all fragments in the code cache that were translated from the specified range of addresses. The request takes 2 args, start and length. It is implemented in core DR with JIT optimization enabled, though clients may implement additional functionality.
_dr_valgrind_request_id_t_DR_VG_ID__DO_LEAK_CHECK
Request an immediate memory scan to look for leaks. Not currently implemented in core DR.
_dr_valgrind_request_id_t_DR_VG_ID__LAST
Sentinel value for iterator convenience.
_dr_valgrind_request_id_t_DR_VG_ID__MAKE_MEM_DEFINED_IF_ADDRESSABLE
Indicate that the specified range of addresses should be considered defined if it is addressable. Not currently implemented in core DR.
_dr_valgrind_request_id_t_DR_VG_ID__RUNNING_ON_VALGRIND
Return true if running in DynamoRIO with Valgrind annotation support. No args.
dr_alloc_flags_t_DR_ALLOC_CACHE_REACHABLE
Allocate memory that is 32-bit-displacement reachable from the code caches and from the client library. Memory allocated through dr_thread_alloc(), dr_global_alloc(), and dr_nonheap_alloc() is also reachable, but for dr_custom_alloc(), the resulting memory is not reachable unless this flag is specified. If this flag is passed, the requested location (\p addr parameter) must be NULL. This flag is not compatible with #DR_ALLOC_LOW_2GB, #DR_ALLOC_FIXED_LOCATION, or #DR_ALLOC_NON_DR.
dr_alloc_flags_t_DR_ALLOC_FIXED_LOCATION
This flag only applies to non-heap memory (i.e., when #DR_ALLOC_NON_HEAP is specified). The flag requests that memory be allocated at a specific address, given in the \p addr parameter. Without this flag, the \p addr parameter is not honored. This flag is not compatible with #DR_ALLOC_LOW_2GB or #DR_ALLOC_CACHE_REACHABLE.
dr_alloc_flags_t_DR_ALLOC_LOW_2GB
This flag only applies to non-heap memory (i.e., when #DR_ALLOC_NON_HEAP is specified) in 64-bit mode. The flag requests that memory be allocated in the low 2GB of the address space. If this flag is passed, the requested location (\p addr parameter) must be NULL. This flag is not compatible with #DR_ALLOC_FIXED_LOCATION.
dr_alloc_flags_t_DR_ALLOC_NON_DR
This flag only applies to non-heap memory (i.e., when #DR_ALLOC_NON_HEAP is specified). When this flag is specified, the allocated memory is not considered to be DynamoRIO or tool memory and thus is not kept separate from the application. This is similar to dr_raw_mem_alloc(). Use of this memory is at the client’s own risk. This flag is not compatible with #DR_ALLOC_CACHE_REACHABLE.
dr_alloc_flags_t_DR_ALLOC_NON_HEAP
If this flag is not specified, dr_custom_alloc() uses a managed heap to allocate the memory, just like dr_thread_alloc() or dr_global_alloc(). In that case, it ignores any requested protection bits (\p prot parameter), and the location (\p addr parameter) must be NULL. If this flag is specified, a page-aligned, separate block of memory is allocated, in a similar fashion to dr_nonheap_alloc().
dr_alloc_flags_t_DR_ALLOC_THREAD_PRIVATE
This flag only applies to heap memory (i.e., when #DR_ALLOC_NON_HEAP is not specified). If this flag is not specified, global heap is used (just like dr_global_alloc()) and the \p drcontext parameter is ignored. If it is specified, thread-private heap specific to \p drcontext is used, just like dr_thread_alloc().
dr_app_arg_encoding_t_DR_APP_ARG_CSTR_COMPAT
C String Encoding.
dr_app_arg_encoding_t_DR_APP_ARG_UTF_16
UTF 16 String Encoding.
dr_cleancall_save_t_DR_CLEANCALL_ALWAYS_OUT_OF_LINE
Requests that out-of-line state save and restore routines be used even when a subset of the state does not need to be preserved for this callee. Also disables inlining. This helps guarantee that the inserted code remains small.
dr_cleancall_save_t_DR_CLEANCALL_INDIRECT
Requests that an indirect call be used to ensure reachability, both for reaching the callee and for any out-of-line helper routine calls. Only honored for 64-bit mode, where r11 will be used for the indirection.
dr_cleancall_save_t_DR_CLEANCALL_MULTIPATH
dr_cleancall_save_t_DR_CLEANCALL_NOSAVE_FLAGS
Skip saving the flags and skip clearing the flags (including DF) for client execution. Note that this can cause problems if dr_redirect_execution() is called from a clean call, as an uninitialized flags value can cause subtle errors.
dr_cleancall_save_t_DR_CLEANCALL_NOSAVE_XMM
Skip saving any XMM or YMM registers (saved by default).
dr_cleancall_save_t_DR_CLEANCALL_NOSAVE_XMM_NONPARAM
Skip saving any XMM or YMM registers that are never used as parameters.
dr_cleancall_save_t_DR_CLEANCALL_NOSAVE_XMM_NONRET
Skip saving any XMM or YMM registers that are never used as return values.
dr_cleancall_save_t_DR_CLEANCALL_READS_APP_CONTEXT
Indicates that the callee will access the application context (either as passed parameters or by calling dr_get_mcontext()). This flag is passed to callbacks registered with dr_register_clean_call_insertion_event() requesting that register reservation code in clients and libraries restore application values to all registers. Without this flag, register values observed by the callee may be values written by instrumentation rather than application values. If the intent is to have a mixture of application and tool values in registers, manual restoration is required rather than passing this automation flag.
dr_cleancall_save_t_DR_CLEANCALL_RETURNS_TO_NATIVE
Requests that an indirect call be used to ensure reachability, both for reaching the callee and for any out-of-line helper routine calls. Only honored for 64-bit mode, where r11 will be used for the indirection.
dr_cleancall_save_t_DR_CLEANCALL_SAVE_FLOAT
Save legacy floating-point state (x86-specific; not saved by default). The last floating-point instruction address (FIP) in the saved state is left in an untranslated state (i.e., it may point into the code cache). This flag is orthogonal to the saving of SIMD registers and related flags below.
dr_cleancall_save_t_DR_CLEANCALL_WRITES_APP_CONTEXT
Indicates that the callee will modify the application context (by calling dr_set_mcontext()). This flag is passed to callbacks registered with dr_register_clean_call_insertion_event() requesting that register reservation code in clients and libraries update spilled application register values. Without this flag, changes made by dr_set_mcontext() may be undone by later restores of spilled values.
dr_config_status_t_DR_CONFIG_CLIENT_NOT_FOUND
A primary client configuration was not found at the time an alternate bitwidth client was attempted to be registered.
dr_config_status_t_DR_CONFIG_DIR_NOT_FOUND
Failed to locate a valid config dir. Consider calling dr_get_config_dir(, true, ,).
dr_config_status_t_DR_CONFIG_FILE_WRITE_FAILED
Failed to write to the config file.
dr_config_status_t_DR_CONFIG_INVALID_PARAMETER
A parameter was not set.
dr_config_status_t_DR_CONFIG_OPTIONS_INVALID
Client options contain invalid characters (‘;’ or all 3 quotes).
dr_config_status_t_DR_CONFIG_STRING_TOO_LONG
Field length exceeded, probably due to a too-long option string
dr_config_status_t_DR_FAILURE
Unknown failure. Check that caller has adequate permissions for this operation.
dr_config_status_t_DR_ID_CONFLICTING
Client registration failed due to a conflicting ID.
dr_config_status_t_DR_ID_INVALID
Client operation failed due to an invalid client ID.
dr_config_status_t_DR_NUDGE_PID_NOT_FOUND
Nudge operation failed because the specified process id does not exist.
dr_config_status_t_DR_NUDGE_PID_NOT_INJECTED
Nudge operation failed because the specified process id is not under DR.
dr_config_status_t_DR_NUDGE_TIMEOUT
Nudge operation timed out waiting for target process to finish handling a nudge.
dr_config_status_t_DR_PRIORITY_INVALID
Client registration failed due to an invalid priority value.
dr_config_status_t_DR_PROC_REG_EXISTS
Process registration failed due to an existing registration.
dr_config_status_t_DR_PROC_REG_INVALID
Operation failed because the supplied process is not registered.
dr_config_status_t_DR_SUCCESS
Operation succeeded.
dr_custom_trace_action_t_CUSTOM_TRACE_CONTINUE
dr_custom_trace_action_t_CUSTOM_TRACE_DR_DECIDES
dr_custom_trace_action_t_CUSTOM_TRACE_END_NOW
dr_disasm_flags_t_DR_DISASM_ARM
Requests standard ARM (32-bit) assembler syntax for disassembly. This sets the same option that is controlled by the runtime option \p -syntax_arm. Implicit operands are not displayed.
dr_disasm_flags_t_DR_DISASM_ATT
Requests AT&T syntax for disassembly. This sets the same option that is controlled by the runtime option \p -syntax_att. Implicit operands are not displayed.
dr_disasm_flags_t_DR_DISASM_DR
The default: displays all operands, including implicit operands. Lists source operands first, then “->”, and then destination operands.
dr_disasm_flags_t_DR_DISASM_INTEL
Requests Intel syntax for disassembly. This sets the same option that is controlled by the runtime option \p -syntax_intel. Implicit operands are not displayed.
dr_disasm_flags_t_DR_DISASM_NO_OPND_SIZE
This flag only applies to the default DR style (i.e., it does not apply when DR_DISASM_INTEL or DR_DISASM_ATT is selected). That style by default displays the size of memory or sub-register operands via a suffix “[Nbytes]”. Setting this flag removes that suffix.
dr_disasm_flags_t_DR_DISASM_RISCV
Requests RISC-V assembler syntax for disassembly. This set the same option that is controlled by the runtime option \p -syntax_riscv. Implicit oprands are not displayed.
dr_disasm_flags_t_DR_DISASM_STRICT_INVALID
Certain reserved or unspecified opcodes are in a gray area where they could be decoded with their length and operands understood, but they are not fully defined and in fact they may raise an illegal instruction fault when executed. By default, DR does not treat them as invalid. If this option is set, DR tightens up its decoding and does treat them as invalid.
dr_error_code_t_DR_ERROR_INSUFFICIENT_SPACE
Insufficient size of passed buffer.
dr_error_code_t_DR_ERROR_INVALID_PARAMETER
Invalid parameter passed to the API routine.
dr_error_code_t_DR_ERROR_NOT_IMPLEMENTED
Feature of API routine not yet implemented.
dr_error_code_t_DR_ERROR_UNKNOWN_ENCODING
String encoding is unknown.
dr_fp_type_t_DR_FP_CONVERT
< Converts to or from floating point values.
dr_fp_type_t_DR_FP_MATH
< Performs arithmetic or conditional operations.
dr_fp_type_t_DR_FP_MOVE
< Moves floating point values from one location to another.
dr_fp_type_t_DR_FP_STATE
< Saves, restores, or queries processor state.
dr_indirect_branch_type_t_DR_INDIRECT_CALL
< Indirect call instruction type.
dr_indirect_branch_type_t_DR_INDIRECT_JUMP
< Indirect jump instruction type.
dr_indirect_branch_type_t_DR_INDIRECT_RETURN
< Return instruction type.
dr_instr_category_t_DR_INSTR_CATEGORY_BRANCH
< Branches.
dr_instr_category_t_DR_INSTR_CATEGORY_CONVERT
< Converts to or from value.
dr_instr_category_t_DR_INSTR_CATEGORY_FP
< Floating-Point operations.
dr_instr_category_t_DR_INSTR_CATEGORY_LOAD
< Loads.
dr_instr_category_t_DR_INSTR_CATEGORY_MATH
< Performs arithmetic or conditional operations.
dr_instr_category_t_DR_INSTR_CATEGORY_MOVE
< Moves value from one location to another.
dr_instr_category_t_DR_INSTR_CATEGORY_OTHER
< Other types of instructions.
dr_instr_category_t_DR_INSTR_CATEGORY_SIMD
< Operations with vector registers (SIMD).
dr_instr_category_t_DR_INSTR_CATEGORY_STATE
< Saves, restores, or queries processor state.
dr_instr_category_t_DR_INSTR_CATEGORY_STORE
< Stores.
dr_instr_category_t_DR_INSTR_CATEGORY_UNCATEGORIZED
< Uncategorized.
dr_kernel_xfer_type_t_DR_XFER_APC_DISPATCHER
< Asynchronous procedure call dispatcher.
dr_kernel_xfer_type_t_DR_XFER_CALLBACK_DISPATCHER
< Callback dispatcher.
dr_kernel_xfer_type_t_DR_XFER_CALLBACK_RETURN
< A return from a callback by syscall or interrupt.
dr_kernel_xfer_type_t_DR_XFER_CLIENT_REDIRECT
< dr_redirect_execution() or #DR_SIGNAL_REDIRECT.
dr_kernel_xfer_type_t_DR_XFER_CONTINUE
< NtContinue system call.
dr_kernel_xfer_type_t_DR_XFER_EXCEPTION_DISPATCHER
< Exception dispatcher.
dr_kernel_xfer_type_t_DR_XFER_RAISE_DISPATCHER
< Raised exception dispatcher.
dr_kernel_xfer_type_t_DR_XFER_RSEQ_ABORT
A Linux restartable sequence was aborted. The interrupted PC for a signal in the execution instrumentation points to the precise interrupted instruction; but for an abort in the native exeuction, the PC always points to the abort handler, rather than the precise instruction that was aborted. This aligns with kernel behavior: the interrupted PC is not saved anywhere.
dr_kernel_xfer_type_t_DR_XFER_SET_CONTEXT_THREAD
< NtSetContextThread system call.
dr_kernel_xfer_type_t_DR_XFER_SIGNAL_DELIVERY
< Signal delivery to application handler.
dr_kernel_xfer_type_t_DR_XFER_SIGNAL_RETURN
< Signal return system call.
dr_map_executable_flags_t_DR_MAPEXE_SKIP_WRITABLE
Requests that writable segments are not mapped, to save address space. This may be ignored on some platforms and may only be honored for a writable segment that is at the very end of the loaded module.
dr_mem_type_t_DR_MEMTYPE_DATA
< Some other data is allocated here
dr_mem_type_t_DR_MEMTYPE_ERROR
< Query failed for unspecified reason
dr_mem_type_t_DR_MEMTYPE_ERROR_WINKERNEL
Query failed due to the address being located in Windows kernel space. No further information is available so iteration must stop.
dr_mem_type_t_DR_MEMTYPE_FREE
< No memory is allocated here
dr_mem_type_t_DR_MEMTYPE_IMAGE
< An executable file is mapped here
dr_mem_type_t_DR_MEMTYPE_RESERVED
< Reserved address space with no physical storage
dr_memory_dump_flags_t_DR_MEMORY_DUMP_ELF
Memory dump in Executable and Linkable Format. This API has the same restrictions in where it can be called from as dr_suspend_all_other_threads_ex().
dr_memory_dump_flags_t_DR_MEMORY_DUMP_LDMP
A “livedump”, or “ldmp”, DynamoRIO’s own custom memory dump format. The ldmp format does not currently support specifying a context for the calling thread, so it will always include the call frames to dr_create_memory_dump(). The \p ldmp.exe tool can be used to create a dummy process (using the \p dummy.exe executable) which can then be attached to by the debugger (use a non-invasive attach) in order to view the memory dump contents.
dr_operation_mode_t_DR_MODE_CODE_MANIPULATION
Run DynamoRIO in Code Manipulation mode. This does not preclude using the Probe API.
dr_operation_mode_t_DR_MODE_DO_NOT_RUN
Do not run this application under DynamoRIO control. Useful for following all child processes except a handful (blocklist).
dr_operation_mode_t_DR_MODE_MEMORY_FIREWALL
Run DynamoRIO in security Memory Firewall mode. \warning This mode is not fully supported at this time.
dr_operation_mode_t_DR_MODE_NONE
No mode. Clients should not attempt to register a process in this mode.
dr_operation_mode_t_DR_MODE_PROBE
Run DynamoRIO in Probe mode. This mode has no code cache. \warning This mode is not fully supported at this time.
dr_platform_t_DR_PLATFORM_32BIT
< 32-bit settings (for 32-bit processes).
dr_platform_t_DR_PLATFORM_64BIT
< 64-bit settings (for native 64-bit processes).
dr_platform_t_DR_PLATFORM_DEFAULT
< The platform this tool is compiled for.
dr_platform_t_DR_PLATFORM_NONE
< Invalid platform.
dr_signal_action_t_DR_SIGNAL_BYPASS
Deliver signal according to the default SIG_DFL action, as would happen if the application had no handler.
dr_signal_action_t_DR_SIGNAL_DELIVER
Deliver signal to the application as normal.
dr_signal_action_t_DR_SIGNAL_REDIRECT
Do not deliver the signal. Instead, redirect control to the application state specified in dr_siginfo_t.mcontext. Clients may modify dr_siginfo_t.mcontext.pc to redirect control to a desired pc, but beware that it is important to set the app state (like the register values) as expected by the transfer point.
dr_signal_action_t_DR_SIGNAL_SUPPRESS
Suppress signal as though it never happened.
dr_state_flags_t_DR_STATE_ALL
< Switch all normal state.
dr_state_flags_t_DR_STATE_DR_TLS
On Linux, DR’s own TLS can optionally be swapped, but this is risky and not recommended as incoming signals are not properly handled when in such a state. Thus DR_STATE_ALL does not swap it.
dr_state_flags_t_DR_STATE_GO_NATIVE
< Switch all state. Use with care.
dr_suspend_flags_t_DR_SUSPEND_NATIVE
By default, native threads are not suspended by dr_suspend_all_other_threads_ex(). This flag requests that native threads (including those temporarily-native due to actions such as #DR_EMIT_GO_NATIVE) be suspended as well.
dr_where_am_i_t_DR_WHERE_APP
< Control is in native application code.
dr_where_am_i_t_DR_WHERE_CLEAN_CALLEE
< Control is in a clean call.
dr_where_am_i_t_DR_WHERE_CONTEXT_SWITCH
< Control is in context switching.
dr_where_am_i_t_DR_WHERE_DISPATCH
< Control is in d_r_dispatch.
dr_where_am_i_t_DR_WHERE_FCACHE
< Control is in the code cache.
dr_where_am_i_t_DR_WHERE_IBL
< Control is in inlined indirect branch lookup.
dr_where_am_i_t_DR_WHERE_INTERP
< Control is in basic block building.
dr_where_am_i_t_DR_WHERE_LAST
< Equals the count of DR_WHERE_xxx locations.
dr_where_am_i_t_DR_WHERE_MONITOR
< Control is in trace building.
dr_where_am_i_t_DR_WHERE_SIGNAL_HANDLER
< Control is in signal handling.
dr_where_am_i_t_DR_WHERE_SYSCALL_HANDLER
< Control is in system call handling.
dr_where_am_i_t_DR_WHERE_TRAMPOLINE
< Control is in trampoline hooks.
dr_where_am_i_t_DR_WHERE_UNKNOWN
< Control is in an unknown location.
drfront_access_mode_t_DRFRONT_EXEC
< Test for execute access
drfront_access_mode_t_DRFRONT_EXIST
< Test existence
drfront_access_mode_t_DRFRONT_READ
< Test for read access
drfront_access_mode_t_DRFRONT_WRITE
< Test for write access
drfront_status_t_DRFRONT_ERROR
< Operation failed
drfront_status_t_DRFRONT_ERROR_ACCESS_DENIED
< Operation failed: access denied
drfront_status_t_DRFRONT_ERROR_FILE_EXISTS
< Operation failed: dir or file already exists
drfront_status_t_DRFRONT_ERROR_INVALID_PARAMETER
< Operation failed: invalid parameter
drfront_status_t_DRFRONT_ERROR_INVALID_PATH
< Operation failed: wrong path
drfront_status_t_DRFRONT_ERROR_INVALID_SIZE
< Operation failed: invalid size
drfront_status_t_DRFRONT_ERROR_LIB_UNSUPPORTED
< Operation failed: old version or invalid library
drfront_status_t_DRFRONT_SUCCESS
< Operation succeeded

Functions§

__wrap_calloc
Allocates memory from DR’s global memory pool, but mimics the behavior of calloc. Memory must be freed with __wrap_free(). The __wrap routines are intended to be used with ld’s -wrap option; see __wrap_malloc() for more information. The returned address is guaranteed to be double-pointer-aligned: aligned to 16 bytes for 64-bit; aligned to 8 bytes for 32-bit.
__wrap_free
Frees memory from DR’s global memory pool. Memory must have been allocated with __wrap_malloc(). The __wrap routines are intended to be used with ld’s -wrap option; see __wrap_malloc() for more information.
__wrap_malloc
Allocates memory from DR’s global memory pool, but mimics the behavior of malloc. Memory must be freed with __wrap_free(). The __wrap routines are intended to be used with ld’s -wrap option to replace a client’s use of malloc, realloc, and free with internal versions that allocate memory from DR’s private pool. With -wrap, clients can link to libraries that allocate heap memory without interfering with application allocations. The returned address is guaranteed to be double-pointer-aligned: aligned to 16 bytes for 64-bit; aligned to 8 bytes for 32-bit.
__wrap_realloc
Reallocates memory from DR’s global memory pool, but mimics the behavior of realloc. Memory must be freed with __wrap_free(). The __wrap routines are intended to be used with ld’s -wrap option; see __wrap_malloc() for more information. The returned address is guaranteed to be double-pointer-aligned: aligned to 16 bytes for 64-bit; aligned to 8 bytes for 32-bit.
__wrap_strdup
Allocates memory for a new string identical to ‘str’ and copies the contents of ‘str’ into the new string, including a terminating null. Memory must be freed with __wrap_free(). The __wrap routines are intended to be used with ld’s -wrap option; see __wrap_malloc() for more information. The returned address is guaranteed to be double-pointer-aligned: aligned to 16 bytes for 64-bit; aligned to 8 bytes for 32-bit.
dr_abort
Aborts the process immediately without any cleanup (i.e., the exit event will not be called).
dr_abort_with_code
Aborts the process immediately without any cleanup (i.e., the exit event will not be called) with the exit code \p exit_code.
dr_allow_unsafe_static_behavior
The #DR_DISALLOW_UNSAFE_STATIC declaration requests that DR perform sanity checks to ensure that client libraries will also operate safely when linked statically into an application. This overrides that request, facilitating having runtime options that are not supported in a static context.
dr_annotation_pass_pc
Can only be called on an annotation already registered with dr_annotation_register_call(). When the annotation is encountered, the PC of the annotation interruption point will be available in DR scratch slot #SPILL_SLOT_2, which can be read with dr_read_saved_reg().
dr_annotation_register_call
Register a handler for a DR annotation. When the annotation is encountered, it will be replaced with a clean call to the specified callee, which must have the specified number of arguments. Returns true on successful registration.
dr_annotation_register_return
Register a return value substitution for a DR annotation. When the annotation is encountered, it will be replaced with the specified return value. This function returns true on successful registration.
dr_annotation_register_valgrind
Register a callback for a Valgrind client request id. When the request is encountered, the specified callback will be invoked by an internal routing function. Returns true on successful registration.
dr_annotation_unregister_call
Unregister the specified handler from a DR annotation. Instances of the annotation that have already been substituted with a clean call to the registered callee will remain in the code cache, but any newly encountered instances of the annotation will no longer be substituted with this callee. This function does nothing in the case that the specified callee was never registered for this annotation (or has already been unregistered). Returns true if the registration was successfully unregistered.
dr_annotation_unregister_return
Unregister the (universal) return value from a DR annotation. Instances of the annotation that have already been substituted with the return value will remain in the code cache, but any newly encountered instances of the annotation will no longer be substituted. This function does nothing in the case that no return value is currently registered for the specified annotation (or has already been unregistered). Note that if another client has registered a return value, this function will remove that other client’s registration. Returns true if the registration was successfully unregistered.
dr_annotation_unregister_valgrind
Unregister the specified callback from a Valgrind client request. The registered callback will not be invoked in association with this client request again (though if the same callback function is also registered for other Valgrind client requests, it will still be invoked in association with those client requests). This function does nothing in the case that no handler was ever registered for this callback function. Returns true if the registration was found and successfully unregistered.
dr_app_arg_as_cstring
Returns the passed argument \p app_arg as a string. \p buf is used only if needed, and therefore the caller should not assume that the string is in the \p buf. In other words, always use the returned value to refer to the string. Returns NULL on error such as when \p buf is needed as storage and the size of the buffer \p buf_size is not sufficient.
dr_app_cleanup
Application-wide cleanup. Prints statistics. Returns zero on success. Once this is invoked, calling dr_app_start() or dr_app_setup() is not supported. This should be invoked at application exit, after joining with application threads. If the application wants to continue executing significant code or executing additional threads after cleanup, it should use dr_app_stop_and_cleanup() instead.
dr_app_handle_mbr_target
DynamoRIO’s (experimental) native execution mode supports running some modules natively while the others run under DynamoRIO. When a module is running natively, it may jump to a module that should be executed under DynamoRIO directly without going through DynamoRIO. To handle this situation, the application code should call this routine and use the returned stub pc as the branch target instead. \note Linux only. \note Native execution mode only. \note Experimental support.
dr_app_pc_as_jump_target
Given an application program counter value, returns the corresponding value to use as an indirect branch target for the given \p isa_mode. For ARM’s Thumb mode (#DR_ISA_ARM_THUMB), this involves setting the least significant bit of the address.
dr_app_pc_as_load_target
Given an application program counter value, returns the corresponding value to use as a memory load target for the given \p isa_mode, or for comparing to the application address inside a basic block or trace. For ARM’s Thumb mode (#DR_ISA_ARM_THUMB), this involves clearing the least significant bit of the address.
dr_app_pc_for_decoding
Given an application PC, returns a PC that contains the application code corresponding to the original PC. In some circumstances on Windows DR inserts a jump on top of the original code, which the client will not see in the bb and trace hooks due to DR replacing it there with the displaced original application code in order to present the client with an unmodified view of the application code. A client should use this routine when attempting to decode the original application instruction that caused a fault from the translated fault address, as the translated address may actually point in the middle of DR’s jump.
dr_app_pc_from_cache_pc
Given a code cache pc, returns the corresponding application pc. This involves translating the state and thus may incur calls to the basic block and trace events (see dr_register_bb_event()). If translation fails, returns NULL. This routine may not be called from a thread exit event.
dr_app_recurlock_lock
Acquires \p reclock, or increments the ownership count if already owned. Calls to this method which block (i.e. when the lock is already held) are marked safe to suspend AND transfer; in that case the provided mcontext \p mc will overwrite the current thread’s mcontext. \p mc must have a valid PC and its flags must be DR_MC_ALL.
dr_app_running_under_dynamorio
Indicates whether the current thread is running within the DynamoRIO code cache. Returns \p true only if the current thread is running within the DynamoRIO code cache and returns false othrewise.
dr_app_setup
Application-wide initialization. Must be called before any other API function. Returns zero on success.
dr_app_setup_and_start
Calls dr_app_setup() and, if it succeeds, calls dr_app_start(). Returns the result of dr_app_setup(), which returns zero on success. This routine is intended as a convenient single point of entry for callers who are using dlsym() or GetProcAddress() to access the app API.
dr_app_start
Causes the application to run under DR control upon return from this call. Attempts to take over any existing threads in the application.
dr_app_stop
Causes all of the application’s threads to run directly on the machine upon return from this call; no effect if the application is not currently running under DR control.
dr_app_stop_and_cleanup
Causes all of the application’s threads to run directly on the machine upon return from this call, and additionally frees the resources used by DR. Once this is invoked, calling dr_app_start() is not supported until dr_app_setup() or dr_app_setup_and_start() is called for a re-attach.
dr_app_stop_and_cleanup_with_stats
Same as dr_app_stop_and_cleanup, additionally filling in the provided dr_stats_t object, after all threads have been detached and right before clearing stats. The parameter may be NULL, in which case stats are not collected, the API behaving identically to dr_app_stop_and_cleanup().
dr_app_take_over
Causes application to run under DR control upon return from this call. DR never releases control. Useful for overriding dr_app_start/dr_app_stop calls in the rest of a program.
dr_atomic_add32_return_sum
Atomically adds \p val to \p *dest and returns the sum. \p dest must not straddle two cache lines.
dr_atomic_add64_return_sum
Atomically adds \p val to \p *dest and returns the sum. \p dest must not straddle two cache lines. Currently 64-bit-build only.
dr_atomic_load32
Atomically and visibly loads the value at \p src and returns it.
dr_atomic_load64
Atomically and visibly loads the value at \p src and returns it. Currently 64-bit-build only.
dr_atomic_store32
Atomically and visibly stores \p val to \p dest.
dr_atomic_store64
Atomically and visibly stores \p val to \p dest. Currently 64-bit-build only.
dr_bb_exists_at
Returns true if a basic block with tag \p tag exists in the code cache.
dr_call_on_clean_stack
Calls the specified function \p func after switching to the DR stack for the thread corresponding to \p drcontext. Passes in 8 arguments. Uses the C calling convention, so \p func will work just fine even if if takes fewer than 8 args. Swaps the stack back upon return and returns the value returned by \p func.
dr_cleanup_after_call
Inserts into \p ilist prior to \p where meta-instruction(s) to restore state after a call.
dr_client_iterator_hasnext
\param[in] iter A client iterator created with dr_client_iterator_start()
dr_client_iterator_next
Return information about a client.
dr_client_iterator_next_ex
Return information about a client.
dr_client_iterator_start
Creates and starts an iterator for iterating over all clients registered for the given process.
dr_client_iterator_stop
Stops and frees a client iterator.
dr_client_main
When registering a process, users must provide a list of paths to client libraries and their associated client-specific options. DR looks up “dr_client_main” in each client library and calls that function when the process starts. Clients can register to receive callbacks for the various events within dr_client_main(). Note that client paths and options cannot include semicolons.
dr_client_thread_set_suspendable
Can only be called from a client thread: returns false if called from a non-client thread.
dr_clobber_retaddr_after_read
Causes DynamoRIO to insert code that stores \p value into the return address slot on the stack immediately after the original value is read by the return instruction \p instr. \p instr must be a return instruction or this routine will fail.
dr_close_file
Closes file \p f.
dr_copy_module_data
Makes a copy of \p data. Copy must be freed with dr_free_module_data(). Useful for making persistent copies of module_data_t’s received as part of image load and unload event callbacks.
dr_create_client_thread
Creates a new thread that is marked as a non-application thread (i.e., DR will let it run natively and not execute its code from the code cache). The thread will terminate automatically simply by returning from \p func; if running when the application terminates its last thread, the client thread will also terminate when DR shuts the process down.
dr_create_dir
Creates a new directory. Fails if the directory already exists or if it can’t be created. Relative path support on Windows is identical to that described in dr_open_file().
dr_create_memory_dump
Requests that DR create a memory dump file of the current process. The type of dump is specified by \p spec.
dr_custom_alloc
Allocates memory with the properties requested by \p flags.
dr_custom_free
Frees memory allocated by dr_custom_alloc(). The same \p flags and \p size must be passed here as were passed to dr_custom_alloc().
dr_delay_flush_region
Request a flush of all fragments containing code from the region [\p start, \p start + \p size). The flush will be performed at the next safe point in time (usually before any new code is added to the cache after this routine is called). If \p flush_completion_callback is non-NULL, it will be called with the \p flush_id provided to this routine when the flush completes, after which no execution will occur out of the fragments flushed. Returns true if the flush was successfully queued.
dr_delete_dir
Deletes the given directory. Fails if the directory is not empty. Relative path support on Windows is identical to that described in dr_open_file().
dr_delete_file
Deletes the file referred to by \p filename. Returns true if successful. On both Linux and Windows, if filename refers to a symlink, the symlink will be deleted and not the target of the symlink. On Windows, this will fail to delete any file that was not opened with FILE_SHARE_DELETE and is still open. Relative path support on Windows is identical to that described in dr_open_file().
dr_delete_fragment
Deletes the fragment with tag \p tag. This routine is only valid with the -thread_private option; it deletes the fragment in the current thread only. After deletion, the existing fragment is allowed to complete execution. For example, a clean call deleting the currently executing fragment will safely return to the existing code. Subsequent executions will cause DynamoRIO to reconstruct the fragment, and therefore call the appropriate fragment-creation event hook, if registered.
dr_directory_exists
Checks for the existence of a directory. Relative path support on Windows is identical to that described in dr_open_file().
dr_dup_file_handle
Returns a new copy of the file handle \p f. Returns INVALID_FILE on error.
dr_event_create
Creates an event object on which threads can wait and be signaled.
dr_event_destroy
Destroys an event object.
dr_event_reset
Resets \p event to no longer be in a signaled state.
dr_event_signal
Wakes up at most one thread waiting on \p event.
dr_event_wait
Suspends the current thread until \p event is signaled.
dr_exit_process
Exits the process, first performing a full cleanup that will trigger the exit event (dr_register_exit_event()). The process exit code is set to \p exit_code.
dr_file_exists
Checks the existence of a file. Relative path support on Windows is identical to that described in dr_open_file().
dr_file_seek
Sets the current file position for file \p f to \p offset bytes from the specified origin, where \p origin is one of the DR_SEEK_* values. Returns true if successful.
dr_file_size
Determines the size of the file \p fd. On success, returns the size in \p size. \return whether successful.
dr_file_tell
Returns the current position for the file \p f in bytes from the start of the file. Returns -1 on an error.
dr_flush_file
Flushes any buffers for file \p f.
dr_flush_region
Equivalent to dr_flush_region_ex(start, size, NULL).
dr_flush_region_ex
Flush all fragments containing any code from the region [\p start, \p start + \p size). Once this routine returns no execution will occur out of the fragments flushed. This routine may only be called during a clean call from the cache, from a nudge event handler, or from a pre- or post-system call event handler. It may not be called from any other event callback. No locks can held when calling this routine. If called from a clean call, caller can NOT return to the cache (the fragment that was called out of may have been flushed even if it doesn’t apparently overlap the flushed region). Instead the caller must redirect execution via dr_redirect_execution() (or DR_SIGNAL_REDIRECT from a signal callback) after this routine to continue execution. Returns true if successful.
dr_fprintf
Printing to a file that won’t interfere with the application’s own printing. It is not buffered, which means that it should not be used for very frequent, small print amounts: for that the client should either do its own buffering or it should use printf from the C library via DR’s private loader. \note On Windows 7 and earlier, this routine is not able to print to STDOUT or STDERR in the \p cmd window unless dr_enable_console_printing() is called ahead of time, and even then there are limitations: see dr_enable_console_printing(). \note This routine supports printing wide characters via the ls or S format specifiers. On Windows, they are assumed to be UTF-16, and are converted to UTF-8. On Linux, they are converted by simply dropping the high-order bytes. \note If the data to be printed is large it will be truncated to an internal buffer size. Use dr_snprintf() and dr_write_file() for large output. \note On Linux this routine does not check for errors like EINTR. Use dr_write_file() if that is a concern. \note When printing floating-point values, the caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state, unless it can prove that its compiler will not use x87 operations. On success, the number of bytes written is returned. On error, -1 is returned.
dr_fragment_app_pc
Retrieves the application PC of a fragment with tag \p tag.
dr_fragment_exists_at
Returns whether or not there is a fragment in code cache with tag \p tag.
dr_fragment_persistable
Takes in the \p perscxt opaque parameter passed to various persistence events and returns whether the fragment identified by \p tag is being persisted. This routine can be called outside of a persistence event, in which case the \p perscxt parameter should be NULL.
dr_fragment_size
Looks up the fragment with tag \p tag. If not found, returns 0. If found, returns the total size occupied in the cache by the fragment.
dr_free_module_data
Frees a module_data_t returned by dr_module_iterator_next(), dr_lookup_module(), dr_lookup_module_by_name(), or dr_copy_module_data(). \note Should NOT be used with a module_data_t obtained as part of a module load or unload event.
dr_get_app_args
Provides information about the app’s arguments by setting \p args_array up to the count denoted by \p args_count. Therefore, \p args_count is not the size of the buffer in bytes but the number of #dr_app_arg_t values that \p args_array can store. Returns the number of args set or -1 on error.
dr_get_application_name
Returns the image name (without path) of the current application.
dr_get_client_base
Returns the base address of the client library. \p client_id is the client ID passed to a client’s dr_client_main() function.
dr_get_client_info
Retrieve client registration information for a particular process for the current user. If multiple clients are registered (alternative bitwidth clients are considered separate), information on the highest-priority client is returned.
dr_get_client_info_ex
Retrieve client registration information for a particular process for the current user. If multiple clients are registered (alternative bitwidth clients are considered separate), information on the highest-priority client is returned.
dr_get_client_path
Returns the client library name and path that were originally specified to load the library. If the resulting string is longer than #MAXIMUM_PATH it will be truncated. \p client_id is the client ID passed to a client’s dr_client_main() function.
dr_get_config_dir
Returns in \p config_dir the configuration directory used to store config files. In order to use local config files when the normal interactive user home directory environment variable (HOME on Linux or MacOS; USERPROFILE on Windows) is not set and when using one-step configure-and-run, call this routine prior to creating the child process and pass true for \p alternative_local. For multi-step, the caller must set the DYNAMORIO_CONFIGDIR environment variable (in the child process) to point at the resulting \p config_dir.
dr_get_current_directory
Returns the current directory for this process in \p buf. On Windows, reading the current directory is considered unsafe except during initialization, as it is stored in user memory and access is not controlled via any standard synchronization.
dr_get_current_drcontext
Returns the DR context of the current thread.
dr_get_dr_segment_base
Get DR’s thread local storage segment base pointed at by \p tls_register. It can be used to get the base of the thread-local storage segment used by #dr_raw_tls_calloc.
dr_get_error_code
Returns the error code of the last failed API routine. Users should check whether or not the API routine that they just called has failed prior to calling this function.
dr_get_integer_option
Read the value of an integer DynamoRIO runtime option named \p option_name into \p val. This includes boolean options. Options are listed in \ref sec_options. DynamoRIO has many other undocumented options which may be queried through this API, but they are not officially supported. \warning Always pass a full uint64 for \p val even if the option is a smaller integer to avoid overwriting nearby data. \return false if no option named \p option_name exists, and true otherwise.
dr_get_isa_mode
The decode and encode routines use a per-thread persistent flag that indicates which processor mode to use. This routine returns the value of that flag.
dr_get_itimer
If an interval timer is already installed in the itimer sharing group that contains the calling thread, returns its frequency. Else returns 0.
dr_get_logfile
Returns the log file for the thread with drcontext \p drcontext. If \p drcontext is NULL, returns the main log file.
dr_get_main_module
Looks up module data for the main executable. \note Returned module_data_t must be freed with dr_free_module_data().
dr_get_mcontext
Copies the fields of the current application machine context selected by the \p flags field of \p context into \p context.
dr_get_microseconds
Returns the number of microseconds since Jan 1, 1601 (this is the current UTC time).
dr_get_milliseconds
Returns the number of milliseconds since Jan 1, 1601 (this is the current UTC time).
dr_get_option_array
Returns the client-specific option string specified at client registration, parsed into an array of \p argc separate option tokens stored in \p argv. This is the same array of arguments passed to the dr_client_main() routine.
dr_get_options
Returns the client-specific option string specified at client registration. \p client_id is the client ID passed to dr_client_main().
dr_get_parent_id
Returns the process id of the parent of the current process. \note Linux only.
dr_get_proc_address
Returns the entry point of the exported function with the given name in the module with the given base. Returns NULL on failure.
dr_get_proc_address_ex
Returns information in \p info about the symbol \p name exported by the module \p lib. Returns false if the symbol is not found. See the information in dr_get_proc_address() about what an “exported” function is on Linux.
dr_get_process_id
Returns the process id of the current process.
dr_get_process_id_from_drcontext
Returns the process id of the process associated with drcontext \p drcontext. The returned value may be different from dr_get_process_id() if the passed context was created in a different process, which may happen in thread exit callbacks.
dr_get_random_seed
Returns the seed used for dr_get_random_value().
dr_get_random_value
Returns a pseudo-random number in the range [0..max). The pseudo-random sequence can be repeated by passing the seed used during a run to the next run via the -prng_seed runtime option.
dr_get_stats
Retrieves various statistics exported by DR as global, process-wide values. The API is not thread-safe. The caller is expected to pass a pointer to a valid, initialized #dr_stats_t value, with the size field set (see #dr_stats_t). Returns false if stats are not enabled.
dr_get_stderr_file
Returns a handle to stderr.
dr_get_stdin_file
Returns a handle to stdin.
dr_get_stdout_file
Returns a handle to stdout.
dr_get_stolen_reg
Returns the register that is stolen and used by DynamoRIO. Reference \ref sec_reg_stolen for more information.
dr_get_string_option
Read the value of a string DynamoRIO runtime option named \p option_name into \p buf. Options are listed in \ref sec_options. DynamoRIO has many other undocumented options which may be queried through this API, but they are not officially supported. The option value is truncated to \p len bytes and null-terminated. \return false if no option named \p option_name exists, and true otherwise.
dr_get_thread_id
Returns the thread id of the thread with drcontext \p drcontext.
dr_get_time
Retrieves the current time.
dr_get_tls_field
Returns the user-controlled thread-local-storage field. To generate an instruction sequence that reads the drcontext field inline in the code cache, use dr_insert_read_tls_field().
dr_get_token
Utility function that aids in tokenizing a string, such as a client options string from dr_get_options(). The function scans \p str until a non-whitespace character is found. It then starts copying into \p buf until a whitespace character is found denoting the end of the token. If the token begins with a quote, the token continues (including across whitespace) until the matching end quote is found. Characters considered whitespace are ’ ’, ‘\t’, ‘\r’, and ‘\n’; characters considered quotes are ‘\’’, ‘\“’, and ‘`’.
dr_get_vector_length
Read AArch64 SVE or RISC-V Vector’s vector length, in bits.
dr_global_alloc
Allocates \p size bytes of memory from DR’s global memory pool. This memory is only guaranteed to be aligned to the pointer size: 8 byte alignment for 64-bit; 4-byte alignment for 32-bit. (The wrapped malloc() guarantees the more standard double-pointer-size.)
dr_global_free
Frees memory allocated by dr_global_alloc(). \p size must be the same as that passed to dr_global_alloc().
dr_hashtable_add
Adds a new entry to the hashtable.
dr_hashtable_clear
Removes all entries in a hashtable created by dr_hashtable_create().
dr_hashtable_create
Allocates and initializes an open-address library-independent hashtable:
dr_hashtable_destroy
Destroys a hashtable created by dr_hashtable_create().
dr_hashtable_lookup
Queries whether an entry for the given key exists.
dr_hashtable_remove
Removes an entry for the given key.
dr_init
Legacy, deprecated initialization routine. \deprecated
dr_insert_call
Inserts into \p ilist prior to \p where meta-instruction(s) to set up the passed-in parameters, make a call to \p callee, and clean up the parameters.
dr_insert_call_ex
Identical to dr_insert_call() except it takes in \p encode_pc indicating roughly where the call sequence will be encoded. If \p callee is not reachable from \p encode_pc plus or minus one page, an indirect call will be used instead of the direct call used by dr_insert_call(). The indirect call overwrites the r11 register.
dr_insert_call_instrumentation
Assumes that \p instr is a near call. Inserts into \p ilist prior to \p instr instruction(s) to call callee passing two arguments: -# address of call instruction (caller) -# target address of call (callee) \note Sets #DR_CLEANCALL_READS_APP_CONTEXT and #DR_CLEANCALL_WRITES_APP_CONTEXT. Conditionally skipping the instrumentation inserted by this routine is not supported (i.e., #DR_CLEANCALL_MULTIPATH is not supported here).
dr_insert_call_noreturn
dr_insert_cbr_instrumentation
Assumes that \p instr is a conditional branch Inserts into \p ilist prior to \p instr instruction(s) to call callee passing three arguments: -# address of branch instruction -# target address of branch -# 0 if the branch is not taken, 1 if it is taken \note Sets #DR_CLEANCALL_READS_APP_CONTEXT and #DR_CLEANCALL_WRITES_APP_CONTEXT. Conditionally skipping the instrumentation inserted by this routine is not supported (i.e., #DR_CLEANCALL_MULTIPATH is not supported here).
dr_insert_cbr_instrumentation_ex
Assumes that \p instr is a conditional branch Inserts into \p ilist prior to \p instr instruction(s) to call callee passing four arguments: -# address of branch instruction -# target address of branch -# fall-through address of branch -# 0 if the branch is not taken, 1 if it is taken -# user defined operand (e.g., TLS slot, immed value, register, etc.) \note The user defined operand cannot use register ebx! \note Sets #DR_CLEANCALL_READS_APP_CONTEXT and #DR_CLEANCALL_WRITES_APP_CONTEXT. Conditionally skipping the instrumentation inserted by this routine is not supported (i.e., #DR_CLEANCALL_MULTIPATH is not supported here).
dr_insert_clean_call
Inserts into \p ilist prior to \p where meta-instruction(s) to save state for a call, switch to this thread’s DR stack, set up the passed-in parameters, make a call to \p callee, clean up the parameters, and then restore the saved state.
dr_insert_clean_call_ex
Identical to dr_insert_clean_call() except it takes in \p save_flags which allows requests to not save certain state. This is intended for use at application call entry points or other contexts where a client is comfortable making assumptions. Keep in mind that any register that is not saved will not be present in a context obtained from dr_get_mcontext().
dr_insert_clean_call_ex_varg
dr_insert_get_app_tls
Insert code to get the application value of the thread pointer register into register \p reg.
dr_insert_get_seg_base
Insert code to get the segment base address pointed to by seg into register reg. In Linux, it is only supported with -mangle_app_seg option. In Windows, it only supports getting base address of the TLS segment.
dr_insert_get_stolen_reg_value
Insert code to get the application value of the register stolen by DynamoRIO into register \p reg. Reference \ref sec_reg_stolen for more information.
dr_insert_it_instrs
Inserts enough OP_it instructions with proper parameters into \p ilist to make all predicated instructions in \p ilist legal in Thumb mode (#DR_ISA_ARM_THUMB). Treats predicated app and tool instructions identically, but marks inserted OP_it instructions as app instructions (see instr_set_app()).
dr_insert_mbr_instrumentation
Assumes that \p instr is an indirect branch. Inserts into \p ilist prior to \p instr instruction(s) to call callee passing two arguments: -# address of branch instruction -# target address of branch \note Only the address portion of a far indirect branch is considered. \note \p scratch_slot must be <= dr_max_opnd_accessible_spill_slot(). \p scratch_slot is used internally to this routine and will be clobbered. \note Sets #DR_CLEANCALL_READS_APP_CONTEXT and #DR_CLEANCALL_WRITES_APP_CONTEXT. Conditionally skipping the instrumentation inserted by this routine is not supported (i.e., #DR_CLEANCALL_MULTIPATH is not supported here).
dr_insert_read_raw_tls
Inserts into ilist prior to “where” instruction(s) to read into the general-purpose full-size register \p reg from the raw TLS slot with offset \p tls_offs from the TLS base \p tls_register.
dr_insert_read_tls_field
Inserts into \p ilist prior to \p where meta-instruction(s) to read into the general-purpose full-size register \p reg from the user-controlled drcontext field for this thread. Reads from the same field as dr_get_tls_field().
dr_insert_restore_fpstate
Inserts into \p ilist prior to \p where meta-instruction(s) to restore the x87 floating point state from the 16-byte-aligned buffer referred to by buf, which must be 512 bytes for processors with the FXSR feature, and 108 bytes for those without (where this routine does not support 16-bit operand sizing). \p buf should have size of OPSZ_512; this routine will automatically adjust it to OPSZ_108 if necessary. \note proc_fpstate_save_size() can be used to determine the particular size needed.
dr_insert_save_fpstate
Inserts into \p ilist prior to \p where meta-instruction(s) to save the x87 floating point state into the 16-byte-aligned buffer referred to by \p buf, which must be 512 bytes for processors with the FXSR feature, and 108 bytes for those without (where this routine does not support 16-bit operand sizing). \p buf should have size of OPSZ_512; this routine will automatically adjust it to OPSZ_108 if necessary. \note proc_fpstate_save_size() can be used to determine the particular size needed.
dr_insert_set_stolen_reg_value
Insert code to set the value of register \p reg as the application value of the register stolen by DynamoRIO Reference \ref sec_reg_stolen for more information.
dr_insert_ubr_instrumentation
Assumes that \p instr is a direct, near, unconditional branch. Inserts into \p ilist prior to \p instr instruction(s) to call callee passing two arguments: -# address of branch instruction -# target address of branch
dr_insert_write_raw_tls
Inserts into ilist prior to “where” instruction(s) to store the value in the general-purpose full-size register \p reg into the raw TLS slot with offset \p tls_offs from the TLS base \p tls_register.
dr_insert_write_tls_field
Inserts into \p ilist prior to \p where meta-instruction(s) to write the general-purpose full-size register \p reg to the user-controlled drcontext field for this thread. Writes to the same field as dr_set_tls_field().
dr_is_detaching
Query whether detach is in progress. This is useful for clients that want to avoid the cost of resetting their global state on exit if there is no detaching and thus no chance of re-attaching.
dr_is_notify_on
Returns true iff the -stderr_mask runtime option is non-zero, indicating that the user wants notification messages printed to stderr.
dr_is_thread_native
Returns whether the thread represented by \p drcontext is currently executing natively (typically due to an earlier #DR_EMIT_GO_NATIVE return value).
dr_is_tracking_where_am_i
Returns whether DR is using accurate tracking of the #dr_where_am_i value. Typically this is enabled by calling dr_track_where_am_i().
dr_load_aux_library
Loads the library with the given path as an auxiliary client library. The library is not treated as an application module but as an extension of DR. The library will be included in dr_memory_is_in_client() and any faults in the library will be considered client faults. The bounds of the loaded library are returned in the optional out variables. On failure, returns NULL.
dr_log
Writes to DR’s log file for the thread with drcontext \p drcontext if the current loglevel is >= \p level and the current \p logmask & \p mask != 0. The mask constants are the DR_LOG_* defines below. Logging is disabled for the release build. If \p drcontext is NULL, writes to the main log file.
dr_lookup_aux_library_routine
Looks up the exported routine with the given name in the given client auxiliary library loaded by dr_load_aux_library(). Returns NULL on failure.
dr_lookup_module
Looks up the module containing \p pc. If a module containing \p pc is found returns a module_data_t describing that module. Returns NULL if \p pc is outside all known modules, which is the case for most dynamically generated code. Can be used to obtain a module_handle_t for dr_lookup_module_section() or dr_get_proc_address() via the \p handle field inside module_data_t.
dr_lookup_module_by_name
Looks up the module with name \p name ignoring case. If an exact name match is found returns a module_data_t describing that module else returns NULL. User must call dr_free_module_data() on the returned module_data_t once finished. Can be used to obtain a module_handle_t for dr_get_proc_address(). \note Returned module_data_t must be freed with dr_free_module_data().
dr_map_executable_file
Loads \p filename as an executable file for examination, rather than for execution. No entry point, initialization, or constructor code is executed, nor is any thread-local storage or other resources set up. Returns the size (which may include unmappped gaps) in \p size. The return value of the function is the base address at which the file is mapped.
dr_map_file
Memory-maps \p size bytes starting at offset \p offs from the file \p f at address \p addr with privileges \p prot.
dr_mark_safe_to_suspend
Use this function to mark a region of code as safe for DR to suspend the client while inside the region. DR will not relocate the client from the region and will resume it at precisely the suspend point.
dr_mark_trace_head
Marks the fragment associated with tag \p tag as a trace head. The fragment need not exist yet – once it is created it will be marked as a trace head.
dr_max_opnd_accessible_spill_slot
Returns the largest dr_spill_slot_t that can be accessed with an opnd_t from dr_reg_spill_slot_opnd().
dr_mcontext_xmm_fields_valid
Returns true if the simd fields in dr_mcontext_t are valid xmm, ymm, or zmm values (i.e., whether the underlying processor supports SSE). \note If #DR_MC_MULTIMEDIA is not specified when calling dr_get_mcontext(), the simd fields will not be filled in regardless of the return value of this routine.
dr_mcontext_zmm_fields_valid
Returns true if the simd fields in dr_mcontext_t are valid zmm values (i.e., whether the underlying processor and OS support AVX-512 and AVX-512 code is present). \note If #DR_MC_MULTIMEDIA is not specified when calling dr_get_mcontext(), the simd fields will not be filled in regardless of the return value of this routine.
dr_memory_is_dr_internal
Returns true iff pc is memory allocated by DR for its own purposes, and would not exist if the application were run natively.
dr_memory_is_in_client
Returns true iff pc is located inside a client library, an Extension library used by a client, or an auxiliary client library (see dr_load_aux_library()).
dr_memory_is_readable
Checks to see that all bytes with addresses in the range [\p pc, \p pc + \p size - 1] are readable and that reading from that range won’t generate an exception (see also dr_safe_read() and DR_TRY_EXCEPT()). \note Nothing guarantees that the memory will stay readable for any length of time. \note On Linux, especially if the app is in the middle of loading a library and has not properly set up the .bss yet, a page that seems readable can still generate SIGBUS if beyond the end of an mmapped file. Use dr_safe_read() or DR_TRY_EXCEPT() to avoid such problems.
dr_memory_protect
Modifies the memory protections of the region from \p start through \p start + \p size. Modification of memory allocated by DR or of the DR or client libraries themselves is allowed under the assumption that the client knows what it is doing. Modification of the ntdll.dll library on Windows is not allowed. Returns true if successful.
dr_merge_arith_flags
A convenience routine to aid restoring the arith flags done by outlined code, such as when handling restore state events. The routine takes the current value of the flags register \p cur_xflags, as well as the saved value \p saved_xflag, in order to return the original app value.
dr_module_contains_addr
Returns whether \p addr is contained inside any segment of the module \p data. We recommend using this routine rather than checking against the \p start and \p end fields of \p data, as modules are not always contiguous.
dr_module_import_iterator_hasnext
Returns true if there is another module import in the iterator.
dr_module_import_iterator_next
Advances the passed-in iterator and returns the current module import in the iterator. The pointer returned is only valid until the next call to dr_module_import_iterator_next() or dr_module_import_iterator_stop().
dr_module_import_iterator_start
Creates a module import iterator. Iterates over the list of modules that a given module imports from.
dr_module_import_iterator_stop
Stops import iteration and frees a module import iterator.
dr_module_iterator_hasnext
Returns true if there is another loaded module in the iterator.
dr_module_iterator_next
Retrieves the module_data_t for the next loaded module in the iterator. User must call dr_free_module_data() on the returned module_data_t once finished. \note Returned module_data_t must be freed with dr_free_module_data().
dr_module_iterator_start
Initialize a new module iterator. The returned module iterator contains a snapshot of the modules loaded at the time it was created. Use dr_module_iterator_hasnext() and dr_module_iterator_next() to walk the loaded modules. Call dr_module_iterator_stop() when finished to release the iterator. \note The iterator does not prevent modules from being loaded or unloaded while the iterator is being walked.
dr_module_iterator_stop
User should call this routine to free the module iterator.
dr_module_preferred_name
Returns the preferred name for the module described by \p data from \p data->module_names.
dr_module_set_should_instrument
Set whether or not the module referred to by \p handle should be instrumented. If \p should_instrument is false, code from the module will not be passed to the basic block event. If traces are enabled, code from the module will still reach the trace event. Must be called from the module load event for the module referred to by \p handle. \return whether successful.
dr_module_should_instrument
Return whether code from the module should be instrumented, meaning passed to the basic block event.
dr_mutex_create
Initializes a mutex.
dr_mutex_destroy
Deletes \p mutex.
dr_mutex_lock
Locks \p mutex. Waits until the mutex is successfully held.
dr_mutex_mark_as_app
Instructs DR to treat this lock as an application lock. Primarily this avoids debug-build checks that no DR locks are held in situations where locks are disallowed.
dr_mutex_self_owns
Returns true iff \p mutex is owned by the calling thread. This routine is only available in debug builds. In release builds it always returns true.
dr_mutex_trylock
Tries once to lock \p mutex and returns whether or not successful.
dr_mutex_unlock
Unlocks \p mutex. Asserts that mutex is currently locked by the current thread.
dr_nonheap_alloc
Allocates \p size bytes of memory as a separate allocation from DR’s heap, allowing for separate protection. The \p prot protection should use the DR_MEMPROT_READ, DR_MEMPROT_WRITE, and DR_MEMPROT_EXEC bits. When creating a region to hold dynamically generated code, use this routine in order to create executable memory.
dr_nonheap_free
Frees memory allocated by dr_nonheap_alloc(). \p size must be the same as that passed to dr_nonheap_alloc().
dr_nudge_client
Triggers an asynchronous nudge event in the current process. The callback function registered with dr_register_nudge_event() will be called with the supplied \p argument (in a new non-application thread on Windows).
dr_nudge_client_ex
Triggers an asynchronous nudge event in a target process. The callback function registered with dr_register_nudge_event() for the specified client in the specified process will be called with the supplied \p argument (in a new non-application thread on Windows).
dr_nudge_pid
Provides a mechanism for an external entity on the guest OS to communicate with a client. Requires administrative privileges. A process ‘nudge’ causes a client event handler to be invoked (use dr_register_nudge_event() to register the handler function). A nudge is ignored if the process is not running under DynamoRIO, the specified client is not loaded, or if the client does not provide a handler.
dr_num_app_args
Returns the number of command-line arguments passed to the application.
dr_num_registered_clients
Retrieve the number of clients registered for a particular process for the current user.
dr_open_file
Opens the file \p fname. If no such file exists then one is created. The file access mode is set by the \p mode_flags argument which is drawn from the DR_FILE_* defines ORed together. Returns INVALID_FILE if unsuccessful.
dr_page_size
Returns the size of a page of memory.
dr_persist_size
Takes in the \p perscxt opaque parameter passed to various persistence events and returns the size of the code region being persisted.
dr_persist_start
Takes in the \p perscxt opaque parameter passed to various persistence events and returns the beginning address of the code region being persisted.
dr_prepare_for_call
Inserts into \p ilist prior to \p where meta-instruction(s) to save state for a call. Stores the application state information on the DR stack. Returns the size of the data stored on the DR stack (in case the caller needs to align the stack pointer).
dr_prepopulate_cache
Intended to be called between dr_app_setup() and dr_app_start() to pre-create code cache fragments for each basic block address in the \p tags array. This speeds up the subsequent attach when dr_app_start() is called. If any code in the passed-in tags array is not readable, it is up to the caller to handle any fault, as DR’s own signal handlers are not enabled at this point. Returns whether successful.
dr_prepopulate_indirect_targets
Intended to augment dr_prepopulate_cache() by populating DR’s indirect branch tables, avoiding trips back to the dispatcher during initial execution. This is only effective when one of the the runtime options -shared_trace_ibt_tables and -shared_bb_ibt_tables (depending on whether traces are enabled) is turned on, as this routine does not try to populate tables belonging to threads other than the calling thread.
dr_print_instr
Prints \p msg followed by the instruction \p instr to file \p f.
dr_print_opnd
Prints \p msg followed by the operand \p opnd to file \p f.
dr_printf
Stdout printing that won’t interfere with the application’s own printing. It is not buffered, which means that it should not be used for very frequent, small print amounts: for that the client should either do its own buffering or it should use printf from the C library via DR’s private loader. \note On Windows 7 and earlier, this routine is not able to print to the \p cmd window unless dr_enable_console_printing() is called ahead of time, and even then there are limitations: see dr_enable_console_printing(). \note This routine supports printing wide characters via the ls or S format specifiers. On Windows, they are assumed to be UTF-16, and are converted to UTF-8. On Linux, they are converted by simply dropping the high-order bytes. \note If the data to be printed is large it will be truncated to an internal buffer size. Use dr_snprintf() and dr_write_file() for large output. \note When printing floating-point values on x86, the caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state, unless it can prove that its compiler will not use x87 operations.
dr_process_is_registered
Check if a process is registered to run under DynamoRIO. To obtain client information, use dr_get_client_info().
dr_query_memory
An os neutral method for querying a memory address. Returns true iff a memory region containing \p pc is found. If found additional information about the memory region is returned in the optional out arguments \p base_pc, \p size, and \p prot where \p base_pc is the start address of the memory region continaing \p pc, \p size is the size of said memory region and \p prot is an ORed combination of DR_MEMPROT_* flags describing its current protection.
dr_query_memory_ex
Provides additional information beyond dr_query_memory(). Returns true if it was able to obtain information (including about free regions) and sets the fields of \p info. This routine can be used to iterate over the entire address space. Such an iteration should stop on reaching the top of the address space, or on reaching kernel memory (look for #DR_MEMTYPE_ERROR_WINKERNEL) on Windows.
dr_raw_brk
Sets the program break to the specified value. Invokes the SYS_brk system call and returns the result. This is the application’s program break, so use this system call only when deliberately changing the application’s behavior. \note Linux-only.
dr_raw_mem_alloc
\warning This raw memory allocation interface is in flux and is subject to change in the next release. Consider it experimental in this release.
dr_raw_mem_free
Frees memory allocated by dr_raw_mem_alloc(). \p addr and \p size must be the same as that passed to dr_raw_mem_alloc() on Windows.
dr_raw_mremap
Calls mremap with the specified parameters and returns the result. The old memory must be non-DR memory, and the new memory is also considered to be non-DR memory (see #DR_ALLOC_NON_DR). \note Linux-only.
dr_raw_tls_calloc
Allocates \p num_slots contiguous thread-local storage (TLS) slots that can be directly accessed via an offset from \p tls_register. If \p alignment is non-zero, the slots will be aligned to \p alignment. These slots will be initialized to 0 for each new thread. The slot offsets are [\p offset .. \p offset + (num_slots - 1)]. These slots are disjoint from the #dr_spill_slot_t register spill slots and the client tls field (dr_get_tls_field()). Returns whether or not the slots were successfully obtained. The linear address of the TLS base pointed at by \p tls_register can be obtained using #dr_get_dr_segment_base. Raw TLs slots can be read directly using dr_insert_read_raw_tls() and written using dr_insert_write_raw_tls().
dr_raw_tls_cfree
Frees \p num_slots raw thread-local storage slots starting at offset \p offset that were allocated with dr_raw_tls_calloc(). Returns whether or not the slots were successfully freed.
dr_raw_tls_opnd
Returns an operand that refers to the raw TLS slot with offset \p tls_offs from the TLS base \p tls_register.
dr_read_file
Reads up to \p count bytes from file \p f into \p buf. Returns the actual number read.
dr_read_saved_reg
Can be used from a clean call or a restore_state_event (see dr_register_restore_state_event()) to see the value saved in spill slot \p slot by dr_save_reg().
dr_recurlock_create
Creates and initializes a recursive lock. A recursive lock allows the same thread to acquire it multiple times. The lock restrictions for mutexes apply (see dr_mutex_create()).
dr_recurlock_destroy
Deletes \p reclock.
dr_recurlock_lock
Acquires \p reclock, or increments the ownership count if already owned.
dr_recurlock_mark_as_app
Instructs DR to treat this lock as an application lock. Primarily this avoids debug-build checks that no DR locks are held in situations where locks are disallowed.
dr_recurlock_self_owns
Returns whether the calling thread owns \p reclock.
dr_recurlock_trylock
Tries once to acquire \p reclock and returns whether successful.
dr_recurlock_unlock
Decrements the ownership count of \p reclock and releases if zero.
dr_redirect_execution
Immediately resumes application execution from a clean call out of the cache (see dr_insert_clean_call() or dr_prepare_for_call()) or an exception event with the state specified in \p mcontext (including pc, and including the xmm fields that are valid according to dr_mcontext_xmm_fields_valid()). The flags field of \p context must contain DR_MC_ALL; using a partial set of fields is not suported.
dr_redirect_native_target
Returns the target to use for a native context transfer to a target application address.
dr_reg_spill_slot_opnd
Returns an opnd_t that directly accesses the spill slot \p slot. Only slots <= dr_max_opnd_accessible_spill_slot() can be used with this routine. \note \p slot must be <= dr_max_opnd_accessible_spill_slot()
dr_register_bb_event
Registers a callback function for the basic block event. DR calls \p func before inserting a new basic block into the code cache. When adding a basic block to a new trace, DR calls \p func again with \p for_trace set to true, giving the client the opportunity to keep its same instrumentation in the trace, or to change it. The original basic block’s instrumentation is unchanged by whatever action is taken in the \p for_trace call.
dr_register_clean_call_insertion_event
Registers a callback function that is invoked whenever a clean call is inserted in instrumentation, such as by dr_insert_clean_call(), dr_insert_clean_call_ex(), or dr_insert_clean_call_ex_varg(). ‘where’ is a label with note value #DR_NOTE_CLEAN_CALL_END; the clean call sequence will be inserted prior to the label after all clean call callbacks are finished (so the clean call sequence is not yet visible at the time this callback is invoked).
dr_register_client
Register a client for a particular process. Note that the process must first be registered via dr_register_process() before calling this routine.
dr_register_client_ex
Register a client for a particular process. Note that the process must first be registered via dr_register_process() before calling this routine. The #dr_config_client_t structure allows specifying additional options beyond what dr_register_client() supports, such as an alternate bitwidth client. For an alternate bitwidth client, the main client must first be registered by an earlier call. Unregistering a client with dr_unregister_client() will also unregister the alternate bitwidth client.
dr_register_delete_event
Registers a callback function for the fragment deletion event. DR calls \p func whenever it removes a fragment from the code cache. Due to DR’s high-performance non-precise flushing, a fragment can be made inaccessible but not actually freed for some time. A new fragment can thus be created before the deletion event for the old fragment is raised. We recommended using a counter to ignore subsequent deletion events when using per-fragment data structures and duplicate fragments are seen.
dr_register_end_trace_event
Registers a callback function for the end-trace event. DR calls \p func before extending a trace with a new basic block. The \p func should return one of the #dr_custom_trace_action_t enum values.
dr_register_exit_event
Registers a callback function for the process exit event. DR calls \p func when the process exits. By default, the process exit event will be executed with only a single live thread. dr_set_process_exit_behavior() can provide superior exit performance for clients that have flexible exit event requirements.
dr_register_filter_syscall_event
Registers a callback function for the syscall filter event. DR calls \p func to decide whether to invoke the syscall events for each system call site encountered with a statically-determinable system call number. If \p func returns true, the pre-syscall (dr_register_pre_syscall_event()) and post-syscall (dr_register_post_syscall_event()) events will be invoked. Otherwise, the events may or may not occur, depending on whether DR itself needs to intercept them and whether the system call number is statically determinable. System call number determination can depend on whether the -opt_speed option is enabled. If a system call number is not determinable, the filter event will not be called, but the pre and post events will be called.
dr_register_fork_init_event
Registers a callback function for the fork event. DR calls \p func whenever the application forks a new process. \note Valid on Linux only.
dr_register_inject_paths
Sets the paths to the DynamoRIO library and the alternate-bitwidth DynamoRIO library for a process that has already been registered via dr_register_process(). If this routine is not called, default library paths will be used which assume a default path layout within the \p dr_root_dir passed to dr_register_process().
dr_register_kernel_xfer_event
Registers a callback function for the kernel transfer event. DR calls \p func whenever the kernel is about to directly transfer control without an explicit user-mode control transfer instruction. This includes the following scenarios, which are distinguished by \p type:
dr_register_low_on_memory_event
Registers a callback function for the low on memory event. DR calls \p func whenever virtual memory is tight and enables the client to help free space.
dr_register_module_load_event
Registers a callback function for the module load event. DR calls \p func whenever the application loads a module (typically a library but this term includes the executable). The \p loaded parameter indicates whether the module is fully initialized by the loader or in the process of being loaded. This parameter is present only for backward compatibility: current versions of DR always pass true, and the client can assume that relocating, rebinding, and (on Linux) segment remapping have already occurred.
dr_register_module_unload_event
Registers a callback function for the module unload event. DR calls \p func whenever the application unloads a module. \note The module_data_t \p *info passed to the callback routine is valid only for the duration of the callback and should not be freed; a persistent copy can be made with dr_copy_module_data().
dr_register_nudge_event
Registers a callback function for nudge events. External entities can nudge a process through the dr_nudge_process() or dr_nudge_pid() drconfig API routines on Windows or using the \p drnudgeunix tool on Linux. A client in this process can use dr_nudge_client() to raise a nudge, while a client in another process can use dr_nudge_client_ex().
dr_register_persist_patch
\warning This patching interface is in flux and is subject to change in the next release. Consider it experimental in this release.
dr_register_persist_ro
Registers callback functions for storing read-only data in each persisted cache file. When generating a new persisted cache file, DR first calls \p func_size to obtain the size required for read-only data in each persisted cache file. DR subsequently calls \p func_persist to write the actual data. DR ensures that no other thread will execute in between the calls to \p func_size and \p func_persist.
dr_register_persist_rw
Registers callback functions for storing writable data in each persisted cache file. When generating a new persisted cache file, DR first calls \p func_size to obtain the size required for writable data in each persisted cache file. DR subsequently calls \p func_persist to write the actual data. DR ensures that no other thread will execute in between the calls to \p func_size and \p func_persist.
dr_register_persist_rx
Registers callback functions for storing executable code (outside of normal code blocks) in each persisted cache file. When generating a new persisted cache file, DR first calls \p func_size to obtain the size required for executable code in each persisted cache file. DR subsequently calls \p func_persist to write the actual code. DR ensures that no other thread will execute in between the calls to \p func_size and \p func_persist.
dr_register_post_attach_event
Registers a function which is called after all other threads have been taken over during a process attach event, whether externally triggered or internally triggered (via dr_app_start() or related functions). If this process instance was not initiated by an attach or takeover methodology where multiple application threads may exist at the time of takeover (such as a process newly created on Linux), this registration function returns false.
dr_register_post_syscall_event
Registers a callback function for the post-syscall event. DR calls \p func whenever the application just finished invoking a system call, if any client asked for that system call number to be intercepted via the filter event (dr_register_filter_syscall_event()) or if DR itself needs to intercept the system call. Any client registering a pre- or post-syscall event should also register a filter event.
dr_register_pre_detach_event
Registers a function which is called at the start of a full detach of DR from the current process, whether externally triggered or internally triggered (via dr_app_stop_and_cleanup() or related functions), as well as at the start of DR sending all threads native but not cleaning up its own state (through dr_app_stop()).
dr_register_pre_syscall_event
Registers a callback function for the pre-syscall event. DR calls \p func whenever the application is about to invoke a system call, if any client asked for that system call number to be intercepted via the filter event (dr_register_filter_syscall_event()). Any client registering a pre- or post-syscall event should also register a filter event.
dr_register_process
Register a process to run under DynamoRIO. Note that this routine only sets the base options to run a process under DynamoRIO. To register one or more clients, call dr_register_client() subsequently.
dr_register_restore_state_event
Registers a callback function for the machine state restoration event. DR calls \p func whenever it needs to translate a code cache machine context from the code cache to its corresponding original application context. DR needs to translate when instructions fault in the cache as well as when a suspended thread is examined or relocated for internal purposes.
dr_register_restore_state_ex_event
Registers a callback function for the machine state restoration event with extended information.
dr_register_signal_event
Requests that DR call the provided callback function \p func whenever a signal is received by any application thread. The return value of \p func determines whether DR delivers the signal to the application. To redirect execution return DR_SIGNAL_REDIRECT (do not call dr_redirect_execution() from a signal callback). The callback function will be called even if the application has no handler or has registered a SIG_IGN or SIG_DFL handler. If multiple callbacks are registered, the first one that returns other than DR_SIGNAL_DELIVER will short-circuit event delivery to later callbacks.
dr_register_thread_exit_event
Registers a callback function for the thread exit event. DR calls \p func whenever an application thread exits. The passed-in drcontext should be used instead of calling dr_get_current_drcontext(), as the thread exit event may be invoked from other threads, and using dr_get_current_drcontext() can result in failure to clean up the right resources, and at process exit time it may return NULL.
dr_register_thread_init_event
Registers a callback function for the thread initialization event. DR calls \p func whenever the application creates a new thread.
dr_register_trace_event
Registers a callback function for the trace event. DR calls \p func before inserting a new trace into the code cache. DR may call \p func again if it needs to translate from code cache addresses back to application addresses, which happens on faulting instructions as well as in certain situations involving suspended threads or forcibly relocated threads. The \p translating parameter distinguishes the two types of calls and behaves identically to the same parameter in the basic block callback: see #dr_register_bb_event() for further details.
dr_remove_it_instrs
Removes all OP_it instructions from \p ilist without changing the instructions that were inside each IT block. This is intended to be paired with dr_insert_it_instrs(), where a client’s examination of the application instruction list and insertion of instrumentation occurs in between the two calls and thus does not have to worry about groups of instructions that cannot be separated or changed. The resulting predicated instructions are not encodable in Thumb mode (#DR_ISA_ARM_THUMB): dr_insert_it_instrs() must be called before encoding.
dr_rename_file
Renames the file \p src to \p dst, replacing an existing file named \p dst if \p replace is true. Atomic if \p src and \p dst are on the same filesystem. Returns true if successful.
dr_replace_fragment
Replaces the fragment with tag \p tag with the instructions in \p ilist. This routine is only valid with the -thread_private option; it replaces the fragment for the current thread only. After replacement, the existing fragment is allowed to complete if currently executing. For example, a clean call replacing the currently executing fragment will safely return to the existing code. Subsequent executions will use the new instructions.
dr_request_synchronized_exit
\deprecated Replaced by dr_set_process_exit_behavior()
dr_restore_app_stack
Inserts into \p ilist prior to \p where meta-instruction(s) to restore into esp the value saved by dr_swap_to_clean_stack().
dr_restore_arith_flags
Inserts into \p ilist prior to \p where meta-instruction(s) to restore the 6 arithmetic flags, assuming they were saved using dr_save_arith_flags() with slot \p slot and that xax holds the same value it did after the save.
dr_restore_arith_flags_from_reg
Inserts into \p ilist prior to \p where meta-instruction(s) to restore the arithmetic flags (6 arithmetic flags on X86 or APSR on ARM) from \p reg. The caller must ensure that \p reg contains the program status flags, most likely from dr_save_arith_flags_to_reg().
dr_restore_arith_flags_from_xax
Inserts into \p ilist prior to \p where meta-instruction(s) to restore the 6 arithmetic flags from xax. This currently uses DynamoRIO’s “add $0x7f %al ; sahf” code sequence, which is faster and easier than popf. The caller must ensure that xax contains the arithmetic flags, most likely from dr_save_arith_flags_to_xax(). \note X86-only
dr_restore_reg
Inserts into \p ilist prior to \p where meta-instruction(s) to restore the register \p reg from the spill slot \p slot. See dr_save_reg() for notes on lifetime and alternative access to spill slots.
dr_resume_all_other_threads
May only be used after invoking dr_suspend_all_other_threads(). This routine resumes the threads that were suspended by dr_suspend_all_other_threads() and must be passed the same array and count of suspended threads that were returned by dr_suspend_all_other_threads(). It also frees the \p drcontexts array and releases the locks acquired by dr_suspend_all_other_threads(). The return value indicates whether all resumption attempts were successful.
dr_retakeover_suspended_native_thread
Causes the thread owning \p drcontext to begin executing in the code cache again once it is resumed. The thread must currently be suspended (typically by dr_suspend_all_other_threads_ex() with #DR_SUSPEND_NATIVE) and must be currently native (typically from #DR_EMIT_GO_NATIVE). \return whether successful.
dr_running_under_dynamorio
Returns false if DynamoRIO is being used as a “regular” standalone library (see dr_standalone_init() and \ref page_standalone). Returns true if DynamoRIO is controlling the application by running its code through a software code cache.
dr_rwlock_create
Creates and initializes a read-write lock. A read-write lock allows multiple readers or alternatively a single writer. The lock restrictions for mutexes apply (see dr_mutex_create()).
dr_rwlock_destroy
Deletes \p rwlock.
dr_rwlock_mark_as_app
Instructs DR to treat this lock as an application lock. Primarily this avoids debug-build checks that no DR locks are held in situations where locks are disallowed.
dr_rwlock_read_lock
Acquires a read lock on \p rwlock.
dr_rwlock_read_unlock
Releases a read lock on \p rwlock.
dr_rwlock_self_owns_write_lock
Returns whether the calling thread owns the write lock on \p rwlock.
dr_rwlock_write_lock
Acquires a write lock on \p rwlock.
dr_rwlock_write_trylock
Tries once to acquire a write lock on \p rwlock and returns whether successful.
dr_rwlock_write_unlock
Releases a write lock on \p rwlock.
dr_safe_read
Safely reads \p size bytes from address \p base into buffer \p out_buf. Reading is done without the possibility of an exception occurring. Returns true if the entire \p size bytes were read; otherwise returns false and if \p bytes_read is non-NULL returns the partial number of bytes read in \p bytes_read. \note See also DR_TRY_EXCEPT().
dr_safe_write
Safely writes \p size bytes from buffer \p in_buf to address \p base. Writing is done without the possibility of an exception occurring. Returns true if the entire \p size bytes were written; otherwise returns false and if \p bytes_written is non-NULL returns the partial number of bytes written in \p bytes_written. \note See also DR_TRY_EXCEPT().
dr_save_arith_flags
Inserts into \p ilist prior to \p where meta-instruction(s) to save the 6 arithmetic flags into xax after first saving xax to the spill slot \p slot. This is equivalent to dr_save_reg() of xax to \p slot followed by lahf and seto al instructions. See dr_restore_arith_flags().
dr_save_arith_flags_to_reg
Inserts into \p ilist prior to \p where meta-instruction(s) to save the arithmetic flags (6 arithmetic flags on X86 or APSR on ARM) into \p reg. If the caller wishes to use \p reg between saving and restoring these flags, they must save and restore \p reg, potentially using dr_save_reg()/dr_restore_reg(). If the caller needs to save both the current value of \p reg and the flags stored to \p reg by this routine, they must use separate spill slots, or they will overwrite the original \p reg value in memory.
dr_save_arith_flags_to_xax
Inserts into \p ilist prior to \p where meta-instruction(s) to save the 6 arithmetic flags into xax. This currently uses DynamoRIO’s “lahf ; seto al” code sequence, which is faster and easier than pushf. If the caller wishes to use xax between saving and restoring these flags, they must save and restore xax, potentially using dr_save_reg()/dr_restore_reg(). If the caller needs to save both the current value of xax and the flags stored to xax by this routine, they must use separate spill slots, or they will overwrite the original xax value in memory. \note X86-only
dr_save_reg
Inserts into \p ilist prior to \p where meta-instruction(s) to save the register \p reg in the spill slot \p slot. See dr_restore_reg(). Use dr_read_saved_reg() and dr_write_saved_reg() to access spill slots from clean calls and restore_state_events (see dr_register_restore_state_event()). \note The stored value remains available only until the next non-meta (i.e. application) instruction. Use dr_insert_write_tls_field() and dr_insert_read_tls_field() for a persistent (but more costly to access) thread-local-storage location. See also dr_raw_tls_calloc().
dr_set_client_name
Sets information presented to users in diagnostic messages. Only one name is supported, regardless of how many clients are in use. If this routine is called a second time, the new values supersede the original. The \p report_URL is meant to be a bug tracker location where users should go to report errors in the client end-user tool.
dr_set_client_version_string
Sets the version string presented to users in diagnostic messages. This has a maximum length of 96 characters; anything beyond that is silently truncated.
dr_set_isa_mode
The decode and encode routines use a per-thread persistent flag that indicates which processor mode to use. This routine sets that flag to the indicated value and optionally returns the old value. Be sure to restore the old value prior to any further application execution to avoid problems in mis-interpreting application code.
dr_set_itimer
Installs an interval timer in the itimer sharing group that contains the calling thread.
dr_set_mcontext
Sets the fields of the application machine context selected by the flags field of \p context to the values in \p context.
dr_set_process_exit_behavior
Specifies how process exit should be handled with respect to thread exit events and thread synchronization in release build. In debug build, and in release build by default, all threads are always synchronized at exit time, resulting in a single-threaded process exit event, and all thread exit event callbacks are always called. This routine can provide more performant exits in release build by avoiding the synchronization if the client is willing to skip thread exit events at process exit and is willing to execute its process exit event with multiple live threads.
dr_set_random_seed
Sets the seed used for dr_get_random_value(). Generally this would only be called during client initialization.
dr_set_tls_field
Sets the user-controlled thread-local-storage field. To generate an instruction sequence that reads the drcontext field inline in the code cache, use dr_insert_write_tls_field().
dr_set_vector_length
AArch64 Scalable Vector Extension’s vector length in bits is one of: 128 256 384 512 640 768 896 1024 1152 1280 1408 1536 1664 1792 1920 2048RISC-V Vector Extension’s vector length in bit is from 64 to 65536 in the power of 2. Returns whether successful. TODO i#3044: This function will only allow setting vector length if not running on SVE or RVV.
dr_sleep
Current thread sleeps for \p time_ms milliseconds.
dr_snprintf
Utility routine to print a formatted message to a string. Will not print more than max characters. If successful, returns the number of characters printed, not including the terminating null character. If the number of characters to write equals max, then the caller is responsible for supplying a terminating null character. If the number of characters to write exceeds max, then max characters are written and -1 is returned. If an error occurs, a negative value is returned. \note This routine supports printing wide characters via the ls or S format specifiers. On Windows, they are assumed to be UTF-16, and are converted to UTF-8. On Linux, they are converted by simply dropping the high-order bytes. \note When printing floating-point values, the caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state, unless it can prove that its compiler will not use x87 operations..
dr_snwprintf
Wide character version of dr_snprintf(). All of the comments for dr_snprintf() apply, except for the hs or S format specifiers. On Windows, these will assume that the input is UTF-8, and will convert to UTF-16. On Linux, they will widen a single-byte character string into a wchar_t character string with zero as the high-order bytes.
dr_sscanf
Utility routine to parse strings that match a pre-defined format string, similar to the sscanf() C routine.
dr_standalone_exit
Restores application state modified by dr_standalone_init(), which can include some signal handlers.
dr_standalone_init
dr_stderr
dr_stdin
dr_stdout
dr_suspend_all_other_threads
Identical to dr_suspend_all_other_threads_ex() with \p flags set to 0.
dr_suspend_all_other_threads_ex
Suspends all other threads in the process and returns an array of contexts in \p drcontexts with one context per successfully suspended thread. The contexts can be passed to routines like dr_get_thread_id() or dr_get_mcontext(). However, the contexts may not be modified: dr_set_mcontext() is not supported. dr_get_mcontext() can be called on the caller of this routine, unless in a Windows nudge callback.
dr_swap_to_clean_stack
Inserts into \p ilist prior to \p where meta-instruction(s) to save the current esp and switch to this thread’s DR stack. \note The DR stack is limited to 20KB by default; this can be changed with the -stack_size DR runtime parameter. This stack cannot be used to store state that persists beyond a single clean call, code cache execution, or probe callback function execution.
dr_switch_to_app_state
Equivalent to dr_switch_to_app_state_ex(drcontext, DR_STATE_ALL).
dr_switch_to_app_state_ex
Swaps to the application version of any system state for the given thread. This is meant to be used prior to examining application memory, when private libraries are in use and there are two versions of system state. Invoking non-DR library routines while the application state is in place can lead to unpredictable results: call dr_switch_to_dr_state() (or the _ex version) before doing so.
dr_switch_to_dr_state
Equivalent to dr_switch_to_dr_state_ex(drcontext, DR_STATE_ALL).
dr_switch_to_dr_state_ex
Should only be called after calling dr_switch_to_app_state() (or the _ex version), or in certain cases where a client is running its own code in an application state. Swaps from the application version of system state for the given thread back to the DR and client version.
dr_symbol_export_iterator_hasnext
Returns true if there is another exported symbol in the iterator.
dr_symbol_export_iterator_next
Returns the next exported symbol. The returned pointer is valid until the next call to dr_symbol_export_iterator_next() or dr_symbol_export_iterator_stop().
dr_symbol_export_iterator_start
Creates an iterator over symbols exported by a module. The iterator returned is invalid until after the first call to dr_symbol_export_iterator_next().
dr_symbol_export_iterator_stop
Stops symbol export iteration and frees the iterator.
dr_symbol_import_iterator_hasnext
Returns true if there is another imported symbol in the iterator.
dr_symbol_import_iterator_next
Returns the next imported symbol. The returned pointer is valid until the next call to dr_symbol_import_iterator_next() or dr_symbol_import_iterator_stop().
dr_symbol_import_iterator_start
Creates an iterator over symbols imported by a module. If \p from_module is NULL, all imported symbols are yielded, regardless of which module they were imported from.
dr_symbol_import_iterator_stop
Stops symbol import iteration and frees the iterator.
dr_syscall_get_param
Usable only from a pre-syscall (dr_register_pre_syscall_event()) event. Returns the value of system call parameter number \p param_num.
dr_syscall_get_result
Usable only from a post-syscall (dr_register_post_syscall_event()) event. Returns the return value of the system call that will be presented to the application.
dr_syscall_get_result_ex
Usable only from a post-syscall (dr_register_post_syscall_event()) event. Returns whether it successfully retrieved the results of the system call into \p info.
dr_syscall_invoke_another
Usable only from a post-syscall (dr_register_post_syscall_event()) event. An additional system call will be invoked immediately, using the current values of the parameters, which can be set with dr_syscall_set_param(). The system call to be invoked should be specified with dr_syscall_set_sysnum().
dr_syscall_set_param
Usable only from a pre-syscall (dr_register_pre_syscall_event()) event, or from a post-syscall (dr_register_post_syscall_event()) event when also using dr_syscall_invoke_another(). Sets the value of system call parameter number \p param_num to \p new_value.
dr_syscall_set_result
Usable only from a pre-syscall (dr_register_pre_syscall_event()) or post-syscall (dr_register_post_syscall_event()) event. For pre-syscall, should only be used when skipping the system call. This sets the return value of the system call that the application sees to \p value.
dr_syscall_set_result_ex
Usable only from a pre-syscall (dr_register_pre_syscall_event()) or post-syscall (dr_register_post_syscall_event()) event. For pre-syscall, should only be used when skipping the system call.
dr_syscall_set_sysnum
Usable only from a pre-syscall (dr_register_pre_syscall_event()) event, or from a post-syscall (dr_register_post_syscall_event()) event when also using dr_syscall_invoke_another(). Sets the system call number of the system call about to be invoked to \p new_num.
dr_thread_alloc
Allocates \p size bytes of memory from DR’s memory pool specific to the thread associated with \p drcontext. This memory is only guaranteed to be aligned to the pointer size: 8 byte alignment for 64-bit; 4-byte alignment for 32-bit. (The wrapped malloc() guarantees the more standard double-pointer-size.)
dr_thread_free
Frees thread-specific memory allocated by dr_thread_alloc(). \p size must be the same as that passed to dr_thread_alloc().
dr_thread_yield
Current thread gives up its time quantum.
dr_trace_exists_at
Checks to see that if there is a trace in the code cache at tag \p tag.
dr_trace_head_at
Checks to see if the fragment (or future fragment) with tag \p tag is marked as a trace head.
dr_track_where_am_i
Should be called during process initialization. Requests more accurate tracking of the #dr_where_am_i_t value for use with dr_where_am_i(). By default, if this routine is not called, DR avoids some updates to the value that incur extra overhead, such as identifying clean callees.
dr_try_setup
Do not call this directly: use the DR_TRY_EXCEPT macro instead.
dr_try_start
Do not call this directly: use the DR_TRY_EXCEPT macro instead.
dr_try_stop
Do not call this directly: use the DR_TRY_EXCEPT macro instead.
dr_unlink_flush_region
Flush all fragments containing any code from the region [\p start, \p start + \p size). Control will not enter a fragment containing code from the region after this returns, but a thread already in such a fragment will finish out the fragment. This includes the current thread if this is called from a clean call that returns to the cache. This routine may only be called during a clean call from the cache, from a nudge event handler, or from a pre- or post-system call event handler. It may not be called from any other event callback. No locks can be held when calling this routine. Returns true if successful.
dr_unload_aux_library
Unloads the given library, which must have been loaded by dr_load_aux_library(). Returns whether successful.
dr_unmap_executable_file
Unmaps a file loaded by dr_map_executable_file().
dr_unmap_file
Unmaps a portion of a file mapping previously created by dr_map_file(). \return whether successful.
dr_unregister_bb_event
Unregister a callback function for the basic block event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_clean_call_insertion_event
Unregisters a callback function that was registered with dr_register_call_insertion_event().
dr_unregister_client
Unregister a client for a particular process.
dr_unregister_delete_event
Unregister a callback function for the fragment deletion event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_end_trace_event
Unregister a callback function for the end-trace event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_exit_event
Unregister a callback function for the process exit event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_filter_syscall_event
Unregister a callback function for the syscall filter event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_fork_init_event
Unregister a callback function for the fork event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_kernel_xfer_event
Unregister a callback function for the kernel transfer event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_low_on_memory_event
Unregister a callback function for low on memory events. \return true if unregistration is successful and false if it is not (e.g., the function was not registered).
dr_unregister_module_load_event
Unregister a callback for the module load event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_module_unload_event
Unregister a callback function for the module unload event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_nudge_event
Unregister a callback function for the nudge event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_persist_patch
Unregister a callback function for patching persisted code. \return true if unregistration is successful and false if it is not (e.g., the function was not registered).
dr_unregister_persist_ro
Unregister callback functions for storing read-only data in a persisted cache file. \return true if unregistration is successful and false if it is not (e.g., one of the functions was not registered).
dr_unregister_persist_rw
Unregister callback functions for storing writable data in a persisted cache file. \return true if unregistration is successful and false if it is not (e.g., one of the functions was not registered).
dr_unregister_persist_rx
Unregister callback functions for storing executable code in a persisted cache file. \return true if unregistration is successful and false if it is not (e.g., one of the functions was not registered).
dr_unregister_post_attach_event
Unregister a callback function for the post-attach event (see dr_register_post_attach_event()). \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_post_syscall_event
Unregister a callback function for the post-syscall event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_pre_detach_event
Unregister a callback function for the post-attach event (see dr_register_pre_detach_event()). \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_pre_syscall_event
Unregister a callback function for the pre-syscall event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_process
Unregister a process from running under DynamoRIO.
dr_unregister_restore_state_event
Unregister a callback function for the machine state restoration event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_restore_state_ex_event
Unregister a callback function for the machine state restoration event with extended ifnormation. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_signal_event
Unregister a callback function for the signal event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_thread_exit_event
Unregister a callback function for the thread exit event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_thread_init_event
Unregister a callback function for the thread initialization event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_unregister_trace_event
Unregister a callback function for the trace event. \return true if unregistration is successful and false if it is not (e.g., \p func was not registered).
dr_using_all_private_caches
Returns true if all DynamoRIO caches are thread private.
dr_using_app_state
Returns whether the given thread indicated by \p drcontext is currently using the application version of its system state. \sa dr_switch_to_dr_state(), dr_switch_to_app_state().
dr_vfprintf
Identical to dr_fprintf() but exposes va_list.
dr_vsnprintf
Identical to dr_snprintf() but exposes va_list.
dr_vsnwprintf
Identical to dr_snwprintf() but exposes va_list.
dr_where_am_i
Returns the #dr_where_am_i_t value indicating in which area of code \p pc resides. This is meant for use with dr_set_itimer() for PC sampling for profiling purposes. If the optional \p tag is non-NULL and \p pc is inside a fragment in the code cache, the fragment’s tag is returned in \p tag. It is recommended that the user of this routine also call dr_track_where_am_i() during process initialization for more accurate results.
dr_write_file
Writes \p count bytes from \p buf to file \p f. Returns the actual number written.
dr_write_saved_reg
Can be used from a clean call to modify the value saved in the spill slot \p slot by dr_save_reg() such that a later dr_restore_reg() will see the new value.
drand48
drand48_r
drem
dremf
dreml
drfront_access
Checks \p fname for the permssions specified by \p mode for the current effective user. If \p fname is a directory and \p mode includes \p DRFRONT_WRITE, this function additionally attempts to create a temporary file (by calling drfront_dir_try_writable()) to ensure that the filesystem is not mounted read-only. On Linux or Mac, if the current effective user is 0, this routine assumes that the user has read and write access to every file and has execute access to any file with at least one execute bit set.
drfront_appdata_logdir
If a tool is installed into a “Program Files” directory on Windows, or into “/usr/…” on Linux, it needs to store its log files elsewhere. This utility function helps to select that alternative location. First, it checks whether \p root is in a location where log files should not be created, and returns that result in \p use_root. If \p use_root is false, this function returns a suggested alternative directory for log files in \p buf. It looks in standard locations such as “$APPDATA” or “$USERPROFILE/Application Data” on Windows or in temp directories if those fail or if on Linux. It appends \p subdir to the base application data or temp directory. It is up to the caller to create the returned directory if it does not exist.
drfront_bufprint
Concatenate onto a buffer. The buffer is not resized if the content does not fit.
drfront_char_to_tchar
Converts from UTF-8 to UTF-16.
drfront_cleanup_args
Frees the UTF-8 array of command-line arguments.
drfront_convert_args
Converts the command-line arguments to UTF-8.
drfront_create_dir
This routine creates the directory specified in \p dir.
drfront_dir_exists
This routine checks whether \p path is a valid directory.
drfront_dir_try_writable
This routine checks whether a file can be created inside the directory specified by \p path.
drfront_fetch_module_symbols
This routine tries to fetch all missed symbols for module specified in \p modpath using _NT_SYMBOL_PATH environment var. User should call \p drfront_sym_init, drfront_sym_set_search_path() and drfront_sym_set_search_path() before calling this routine. If success function returns full path to fetched symbol file in \p symbol_path.
drfront_get_absolute_path
Gets the absolute path of \p src.
drfront_get_app_full_path
Gets the full path of \p app, which is located by searching the PATH if necessary.
drfront_get_env_var
Stores the contents of the environment variable \p name in \p buf.
drfront_is_64bit_app
Reads the file header to determine if \p exe is a 64-bit application.
drfront_is_graphical_app
Reads the PE header to determine if \p exe has a GUI.
drfront_remove_dir
This routine removes the empty directory specified in \p dir.
drfront_searchenv
Implements a normal path search for \p fname on the paths in \p env_var. Resolves symlinks.
drfront_set_client_symbol_search_path
Sets the environment variable _NT_SYMBOL_PATH and the dbghelp search path for symbol lookup in a client, without any network symbol server component (such components are unsafe in a client).
drfront_set_symbol_search_path
Sets the symbol search path for this frontend process to the specified value. Typically this would be used with the output value from drfront_set_client_symbol_search_path().
drfront_set_verbose
Sets the verbosity level for additional diagnostics from the drfrontendlib library. The default level is 0 which is quiet. Diagnostics are printed to stderr.
drfront_string_replace_character
Replace occurences of \p old_char with \p new_char in \p str. Typically used to canonicalize Windows paths into using forward slashes.
drfront_string_replace_character_wide
Replace occurences of \p old_char with \p new_char in TCHAR \p str. Typically used to canonicalize Windows paths into using forward slashes.
drfront_sym_exit
This routine deallocates all symbol-related resources associated with the current process.
drfront_sym_init
This routine initializes the symbol handler for the current process. Should be called before drfront_set_symbol_search_path() and drfront_fetch_module_symbols().
drfront_tchar_to_char
Converts from UTF-16 to UTF-8.
drfront_tchar_to_char_size_needed
Gets the necessary size of a UTF-8 buffer to hold the content in \p wstr.
instr_allocate_raw_bits
Allocates \p num_bytes of memory for \p instr’s raw bits. If \p instr currently points to raw bits, the allocated memory is initialized with the bytes pointed to. \p instr is then set to point to the allocated memory.
instr_build
Convenience routine: calls
instr_build_bits
Convenience routine: calls
instr_clear_label_callback
Removes the callback set by instr_set_label_callback().
instr_clone
Returns a copy of \p orig with separately allocated memory for operands and raw bytes if they were present in \p orig. Only a shallow copy of the \p note field is made. The \p label_cb field will not be copied at all if \p orig is a label instruction.
instr_cmovcc_to_jcc
Converts a cmovcc opcode \p cmovcc_opcode to the OP_jcc opcode that tests the same bits in eflags.
instr_cmovcc_triggered
Given \p eflags, returns whether or not the conditional move instruction \p instr would execute the move. The conditional move can be an OP_cmovcc or an OP_fcmovcc instruction.
instr_compute_address
Returns NULL if none of \p instr’s operands is a memory reference. Otherwise, returns the effective address of the first memory operand when the operands are considered in this order: destinations and then sources. The address is computed using the passed-in registers. \p mc->flags must include DR_MC_CONTROL and DR_MC_INTEGER. For instructions that use vector addressing (VSIB, introduced in AVX2), mc->flags must additionally include DR_MC_MULTIMEDIA.
instr_compute_address_ex
Performs address calculation in the same manner as instr_compute_address() but handles multiple memory operands. The \p index parameter should be initially set to 0 and then incremented with each successive call until this routine returns false, which indicates that there are no more memory operands. The address of each is computed in the same manner as instr_compute_address() and returned in \p addr; whether it is a write is returned in \p is_write. Either or both OUT variables can be NULL. \p mc->flags must include DR_MC_CONTROL and DR_MC_INTEGER. For instructions that use vector addressing (x86 VSIB, introduced in AVX2, or AArch64 scatter/gather instructions introduced in SVE/SVE2), mc->flags must additionally include DR_MC_MULTIMEDIA.
instr_compute_address_ex_pos
Performs address calculation in the same manner as instr_compute_address_ex() with additional information of which opnd is used for address computation returned in \p pos. If \p pos is NULL, it is the same as instr_compute_address_ex().
instr_convert_short_meta_jmp_to_long
Assumes that instr is a meta instruction (instr_is_meta()) and an instr_is_cti_short() (<=8-bit reach). Converts instr’s opcode to a long form (32-bit reach for x86). If instr’s opcode is OP_loop* or OP_jecxz for x86 or OP_cbnz or OP_cbz for ARM, converts it to a sequence of multiple instructions (which is different from instr_is_cti_short_rewrite()). Each added instruction is marked instr_is_meta(). Returns the long form of the instruction, which is identical to \p instr unless \p instr is OP_{loop*,jecxz,cbnz,cbz}, in which case the return value is the final instruction in the sequence, the one that has long reach. \note DR automatically converts app short ctis to long form.
instr_convert_to_isa_regdeps
Converts a real ISA (e.g., #DR_ISA_AMD64) instruction \p instr_real_isa into a #DR_ISA_REGDEPS instruction and stores it into \p instr_regdeps_isa. Assumes \p instr_regdeps_isa has been allocated by the caller (e.g., using instr_create()). Assumes \p instr_real_isa is a fully-decoded or synthesized instruction of a real ISA with valid operand information. \note \p instr_regdeps_isa will contain only the information of a #DR_ISA_REGDEPS synthetic instruction.
instr_create
Returns an initialized instr_t allocated on the thread-local heap. Sets the x86/x64 mode of the returned instr_t to the mode of dcontext. The instruction should be de-allocated with instr_destroy(), which will be called automatically if this instruction is added to the instruction list passed to the basic block or trace events.
instr_create_0dst_0src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and no sources or destinations.
instr_create_0dst_1src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and a single source (\p src).
instr_create_0dst_2src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and two sources (\p src1, \p src2).
instr_create_0dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and three sources (\p src1, \p src2, \p src3).
instr_create_0dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and four sources (\p src1, \p src2, \p src3, \p src4).
instr_create_1dst_0src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode and one destination (\p dst).
instr_create_1dst_1src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination(\p dst), and one source (\p src).
instr_create_1dst_2src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination (\p dst), and two sources (\p src1, \p src2).
instr_create_1dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination (\p dst), and three sources (\p src1, \p src2, \p src3).
instr_create_1dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination (\p dst), and four sources (\p src1, \p src2, \p src3, \p src4).
instr_create_1dst_5src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination (\p dst), and five sources (\p src1, \p src2, \p src3, \p src4, \p src5).
instr_create_1dst_6src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, one destination (\p dst), and six sources (\p src1, \p src2, \p src3, \p src4, \p src5, \p src6).
instr_create_2dst_0src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and no sources.
instr_create_2dst_1src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and one source (\p src).
instr_create_2dst_2src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and two sources (\p src1, \p src2).
instr_create_2dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and three sources (\p src1, \p src2, \p src3).
instr_create_2dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and four sources (\p src1, \p src2, \p src3, \p src4).
instr_create_2dst_5src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, two destinations (\p dst1, \p dst2) and five sources (\p src1, \p src2, \p src3, \p src4, \p src5).
instr_create_3dst_0src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and no sources.
instr_create_3dst_1src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations
instr_create_3dst_2src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and two sources (\p src1, \p src2).
instr_create_3dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and three sources (\p src1, \p src2, \p src3).
instr_create_3dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and four sources (\p src1, \p src2, \p src3, \p src4).
instr_create_3dst_5src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and five sources (\p src1, \p src2, \p src3, \p src4, \p src5).
instr_create_3dst_6src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, three destinations (\p dst1, \p dst2, \p dst3) and six sources (\p src1, \p src2, \p src3, \p src4, \p src5, \p src6).
instr_create_4dst_1src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and 1 source (\p src).
instr_create_4dst_2src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and 2 sources (\p src1 and \p src2).
instr_create_4dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and 3 sources (\p src1, \p src2 and \p src3).
instr_create_4dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and four sources (\p src1, \p src2, \p src3, \p src4).
instr_create_4dst_5src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and five sources (\p src1, \p src2, \p src3, \p src4, \p src5).
instr_create_4dst_6src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and six sources (\p src1, \p src2, \p src3, \p src4, \p src5, \p src6).
instr_create_4dst_7src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, four destinations (\p dst1, \p dst2, \p dst3, \p dst4) and seven sources (\p src1, \p src2, \p src3, \p src4, \p src5, \p src6, \p src7).
instr_create_5dst_3src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, five destinations (\p dst1, \p dst2, \p dst3, \p dst4, \p dst5) and five sources (\p src1, \p src2, \p src3).
instr_create_5dst_4src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, five destinations (\p dst1, \p dst2, \p dst3, \p dst4, \p dst5) and five sources (\p src1, \p src2, \p src3, \p src4).
instr_create_5dst_5src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, five destinations (\p dst1, \p dst2, \p dst3, \p dst4, \p dst5) and five sources (\p src1, \p src2, \p src3, \p src4, \p src5).
instr_create_5dst_8src
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, five destinations (\p dst1, \p dst2, \p dst3, \p dst4, \p dst5) and eight sources (\p src1, \p src2, \p src3, \p src4, \p src5, \p src6, \p src7, \p src8).
instr_create_Ndst_Msrc_vardst
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, \p fixed_dsts plus \p var_dsts destination operands, and \p fixed_srcs source operands. The variable arguments must start with the fixed destinations, followed by the (fixed) sources, followed by the variable destinations. The \p var_ord parameter specifies the (0-based) ordinal position within the resulting instruction’s destination array at which the variable destinations should be placed, allowing them to be inserted in the middle of the fixed destinations.
instr_create_Ndst_Msrc_varsrc
Convenience routine that returns an initialized instr_t allocated on the thread-local heap with opcode \p opcode, \p fixed_dsts destination operands, and \p fixed_srcs plus \p var_srcs source operands. The variable arguments must start with the (fixed) destinations, followed by the fixed sources, followed by the variable sources. The \p var_ord parameter specifies the (0-based) ordinal position within the resulting instruction’s source array at which the variable sources should be placed, allowing them to be inserted in the middle of the fixed sources.
instr_create_popa
Convenience routine that returns an initialized instr_t for OP_popa.
instr_create_pusha
Convenience routine that returns an initialized instr_t for OP_pusha.
instr_destroy
Performs instr_free() and then deallocates the thread-local heap storage for \p instr that was performed by instr_create().
instr_disassemble
Prints the instruction \p instr to file \p outfile. Does not print address-size or data-size prefixes for other than just-decoded instrs, and does not check that the instruction has a valid encoding. Prints each operand with leading zeros indicating the size. The default is to use DR’s custom syntax (see disassemble_set_syntax()).
instr_disassemble_to_buffer
Prints the instruction \p instr to the buffer \p buf. Always null-terminates, and will not print more than \p bufsz characters, which includes the final null character. Returns the number of characters printed, not including the final null.
instr_encode
Encodes \p instr into the memory at \p pc. Uses the x86/x64 mode stored in instr, not the mode of the current thread. Returns the pc after the encoded instr, or NULL if the encoding failed. If instr is a cti with an instr_t target, the offset fields of instr and of the target must be set with the respective offsets of each instr_t! (instrlist_encode does this automatically, if the target is in the list). x86 instructions can occupy up to 17 bytes, so the caller should ensure the target location has enough room to avoid overflow. \note: In Thumb mode, some instructions have different behavior depending on whether they are in an IT block. To correctly encode such instructions, they should be encoded within an instruction list with the corresponding IT instruction using instrlist_encode().
instr_encode_to_copy
Encodes \p instr into the memory at \p copy_pc in preparation for copying to \p final_pc. Any pc-relative component is encoded as though the instruction were located at \p final_pc. This allows for direct copying of the encoded bytes to \p final_pc without re-relativization.
instr_free
Deallocates all memory that was allocated by \p instr. This includes raw bytes allocated by instr_allocate_raw_bits() and operands allocated by instr_set_num_opnds(). Does not deallocate the storage for \p instr itself (use instr_destroy() instead if \p instr was created with instr_create()).
instr_free_raw_bits
If \p instr has raw bits allocated, frees them.
instr_from_noalloc
Given an #instr_noalloc_t where all operands are included, returns an #instr_t pointer corresponding to that no-alloc structure suitable for passing to instruction API functions.
instr_get_app_pc
Get the original application PC of \p instr if it exists.
instr_get_arith_flags
Returns \p instr’s arithmetic flags (bottom 6 eflags) use as EFLAGS_ constants (e.g., EFLAGS_READ_CF, EFLAGS_WRITE_OF, etc.) or’ed together. If \p instr’s eflags behavior has not been calculated yet or is invalid, the entire eflags use is calculated and returned (not just the arithmetic flags). Which eflags are considered to be accessed for conditionally executed instructions are controlled by \p flags.
instr_get_branch_target_pc
Return the taken target pc of the (direct branch) instruction.
instr_get_category
Returns \p instr’s set of categories (set of DR_INSTR_CATEGORY_ constants). See #dr_instr_category_t. This API is only supported for decoded instructions, not for synthetic ones. Currently this is only supported for AArch64.
instr_get_category_name
Assumes \p category is a DR_INSTR_CATEGORY_ constant. See #dr_instr_category_t. Returns \p category name in string format.
instr_get_dst
Returns \p instr’s destination operand at position \p pos (0-based).
instr_get_eflags
Returns \p instr’s eflags use as EFLAGS_ constants (e.g., EFLAGS_READ_CF, EFLAGS_WRITE_OF, etc.) or’ed together. Which eflags are considered to be accessed for conditionally executed instructions are controlled by \p flags.
instr_get_interrupt_number
Assumes that \p instr’s opcode is OP_int and that either \p instr’s operands or its raw bits are valid. Returns the first source operand if \p instr’s operands are valid, else if \p instr’s raw bits are valid returns the first raw byte.
instr_get_isa_mode
Each instruction stores the processor mode under which it should be interpreted. This routine returns the mode for \p instr.
instr_get_label_data_area
\return a pointer to user-controlled data fields in a label instruction. These fields are available for use by clients for their own purposes. Returns NULL if \p instr is not a label instruction. \note These data fields are copied (shallowly) across instr_clone().
instr_get_next
Returns the next instr_t in the instrlist_t that contains \p instr. \note The next pointer for an instr_t is inside the instr_t data structure itself, making it impossible to have on instr_t in two different InstrLists (but removing the need for an extra data structure for each element of the instrlist_t).
instr_get_next_app
Returns the next application (non-meta) instruction in the instruction list that contains \p instr.
instr_get_note
Gets the value of the user-controlled note field in \p instr. \note The note field is copied (shallowly) by instr_clone().
instr_get_offset
Get the relative offset of \p instr in an encoded instruction list.
instr_get_opcode
Returns \p instr’s opcode (an OP_ constant).
instr_get_opcode_eflags
Returns the eflags usage of instructions with opcode \p opcode, as EFLAGS_ constants (e.g., EFLAGS_READ_CF, EFLAGS_WRITE_OF, etc.) or’ed together. If \p opcode is predicated (see instr_is_predicated()) or if the set of flags read or written varies with an operand value, this routine returns the maximal set that might be accessed or written.
instr_get_operation_size
Returns the operation size of \p instr if it’s a #DR_ISA_REGDEPS instruction, #OPSZ_NA otherwise.
instr_get_predicate
Returns the DR_PRED_ constant for \p instr that describes what its conditional execution is dependent on.
instr_get_prefix_flag
Assumes that \p prefix is a PREFIX_ constant. Returns true if \p instr’s prefixes contain the flag \p prefix.
instr_get_prefixes
instr_get_prev
Returns the previous instr_t in the instrlist_t that contains \p instr.
instr_get_prev_app
Returns the previous application (non-meta) instruction in the instruction list that contains \p instr.
instr_get_raw_bits
Assumes that \p instr’s raw bits are valid. Returns a pointer to \p instr’s raw bits. \note A freshly-decoded instruction has valid raw bits that point to the address from which it was decoded. However, for instructions presented in the basic block or trace events, use instr_get_app_pc() to retrieve the corresponding application address, as the raw bits will not be set for instructions added after decoding, and may point to a different location for insructions that have been modified.
instr_get_raw_byte
Assumes that \p instr’s raw bits are valid and have > \p pos bytes. Returns a pointer to \p instr’s raw byte at position \p pos (beginning with 0).
instr_get_raw_word
Assumes that \p instr’s raw bits are valid and have > \p pos + 3 bytes. Returns the 4 bytes beginning at position \p pos (0-based).
instr_get_rel_addr_dst_idx
If any of \p instr’s destination operands is a rip-relative data memory reference, returns the operand position. If there is no such destination operand, returns -1.
instr_get_rel_addr_src_idx
If any of \p instr’s source operands is a rip-relative memory reference, returns the operand position. If there is no such source operand, returns -1.
instr_get_rel_addr_target
If any of \p instr’s operands is a rip-relative data memory reference, returns the address that reference targets. Else returns false.
instr_get_rel_data_or_instr_target
If any of \p instr’s operands is a rip-relative data or instruction memory reference, returns the address that reference targets. Else returns false. For instruction references, only PC operands are considered: not instruction pointer operands.
instr_get_src
Returns \p instr’s source operand at position \p pos (0-based).
instr_get_target
Assumes that \p cti_instr is a control transfer instruction Returns the first source operand of \p cti_instr (its target).
instr_get_x86_mode
Returns true if \p instr is an x86 instruction (32-bit) and false if \p instr is an x64 instruction (64-bit).
instr_has_allocated_bits
Returns true iff \p instr has its own allocated memory for raw bits.
instr_has_encoding_hint
Each instruction may store a hint for how the instruction should be encoded if redundant encodings are available. This presumes that the user knows that a redundant encoding is available. This routine returns whether the \p hint is set for \p instr.
instr_has_rel_addr_reference
Returns true iff any of \p instr’s operands is a rip-relative data memory reference.
instr_init
Initializes \p instr. Sets the x86/x64 mode of \p instr to the mode of dcontext. When finished with it, the instruction’s internal memory should be freed with instr_free(), or instr_reset() for reuse.
instr_invert_cbr
Assumes that \p instr is a conditional branch instruction Reverses the logic of \p instr’s conditional e.g., changes OP_jb to OP_jnb. Works on cti_short_rewrite as well.
instr_is_3DNow
Returns true iff \p instr is part of AMD’s 3D-Now! instructions.
instr_is_app
Return true iff \p instr is an application (non-meta) instruction (see instr_set_app() for more information).
instr_is_call
Returns true iff \p instr’s opcode is OP_call, OP_call_far, OP_call_ind, or OP_call_far_ind on x86; OP_bl, OP_blx, or OP_blx_ind on ARM.
instr_is_call_direct
Returns true iff \p instr’s opcode is OP_call or OP_call_far.
instr_is_call_indirect
Returns true iff \p instr’s opcode is OP_call_ind or OP_call_far_ind on x86; OP_blx_ind on ARM.
instr_is_cbr
Returns true iff \p instr is a conditional branch: OP_jcc, OP_jcc_short, OP_loop*, or OP_jecxz on x86; OP_cbnz, OP_cbz, or when a predicate is present any of OP_b, OP_b_short, OP_bx, OP_bxj, OP_bl, OP_blx, OP_blx_ind on ARM.
instr_is_cti
Returns true iff \p instr is a control transfer instruction of any kind, whether direct, indirect, conditional, or unconditional.
instr_is_cti_loop
Returns true iff \p instr is one of OP_loop* or OP_jecxz on x86.
instr_is_cti_short
Returns true iff \p instr is a control transfer instruction that takes an 8-bit offset on x86 (OP_loop*, OP_jecxz, OP_jmp_short, or OP_jcc_short) or a small offset on ARM (OP_cbz, OP_cbnz, OP_b_short). / /** This routine does NOT try to decode an opcode in a Level 1 or Level 0 routine, and can thus be called on Level 0 routines. Levels are not exposed in the API anymore, however.
instr_is_cti_short_rewrite
Returns true iff \p instr’s opcode is OP_loop* or OP_jecxz on x86 or OP_cbz or OP_cbnz on ARM and instr has been transformed to a sequence of instruction that will allow a larger offset. If \p pc != NULL, \p pc is expected to point to the beginning of the encoding of \p instr, and the following instructions are assumed to be encoded in sequence after \p instr. Otherwise, the encoding is expected to be found in \p instr’s allocated bits. / /** This routine does NOT try to decode an opcode in a Level 1 or Level 0 routine, and can thus be called on Level 0 routines. Levels are not exposed in the API anymore, however.
instr_is_encoding_possible
Returns true iff \p instr can be encoded as
instr_is_exclusive_load
Returns true iff \p instr is an exclusive load instruction, e.g., #OP_ldrex on ARM.
instr_is_exclusive_store
Returns true iff \p instr is an exclusive store instruction, e.g., #OP_strex on ARM.
instr_is_exit_cti
Returns true iff \p instr is a conditional branch, unconditional branch, or indirect branch with a program address target (NOT an instr_t address target) and \p instr is ok to mangle.
instr_is_far_abs_cti
Returns true if \p instr is an absolute call or jmp that is far.
instr_is_far_cti
Returns true iff \p instr is a far control transfer instruction: OP_jmp_far, OP_call_far, OP_jmp_far_ind, OP_call_far_ind, OP_ret_far, or OP_iret, on x86.
instr_is_floating
Returns true iff \p instr is a floating point instruction.
instr_is_floating_ex
Returns true iff \p instr is a floating point instruction. @param[in] instr The instruction to query @param[out] type If the return value is true and \p type is non-NULL, the type of the floating point operation is written to \p type. \deprecated Prefer instr_is_floating_type() which uses the more general #dr_instr_category_t.
instr_is_floating_type
Returns true iff \p instr is a floating point instruction. @param[in] instr The instruction to query @param[out] type If the return value is true and \p type is non-NULL, the type of the floating point operation is written to \p type.
instr_is_gather
Returns true iff \p instr is a gather-load instruction.
instr_is_interrupt
Return true iff \p instr’s opcode is OP_int, OP_into, or OP_int3.
instr_is_jump_mem
instr_is_label
Returns true iff \p instr is a label meta-instruction.
instr_is_mbr
Returns true iff \p instr is a multi-way (indirect) branch: OP_jmp_ind, OP_call_ind, OP_ret, OP_jmp_far_ind, OP_call_far_ind, OP_ret_far, or OP_iret on x86; OP_bx, OP_bxj, OP_blx_ind, or any instruction with a destination register operand of DR_REG_PC on ARM.
instr_is_meta
Return true iff \p instr is a meta instruction (see instr_set_meta() for more information).
instr_is_meta_may_fault
Return true iff \p instr is not a meta-instruction that can fault (see instr_set_meta_may_fault() for more information).
instr_is_mmx
Returns true iff \p instr is part of Intel’s MMX instructions.
instr_is_mov
Returns true iff \p instr is an IA-32/AMD64 “mov” instruction: either OP_mov_st, OP_mov_ld, OP_mov_imm, OP_mov_seg, or OP_mov_priv.
instr_is_mov_constant
Tries to identify common cases of moving a constant into either a register or a memory address. Returns true and sets \p *value to the constant being moved for the following cases: OP_mov_imm, OP_mov_st, and OP_xor where the source equals the destination, for x86; OP_mov, OP_movs, OP_movw, OP_mvn, OP_mvns, or OP_eor where the sources equal the destination and there is no shift, for ARM.
instr_is_mov_imm_to_tos
Returns true iff \p instr is a “mov $imm -> (%esp)”.
instr_is_near_call_direct
Returns true iff \p instr’s opcode is OP_call on x86; OP_bl or OP_blx on ARM.
instr_is_near_ubr
Returns true iff \p instr is a near unconditional direct branch: OP_jmp, or OP_jmp_short on x86; OP_b with no predicate on ARM.
instr_is_nop
Returns true if \p instr is one of a class of common nops. currently checks:
instr_is_opmask
Returns true iff \p instr is part of Intel’s AVX-512 scalar opmask instructions.
instr_is_opnd_store_source
If \p store_instr is not a store (instr_writes_memory() returns false), returns false. If \p store_instr is a store (instr_writes_memory() returns true), returns whether its source operand with index \p source_ordinal (as passed to instr_get_src()) is a source for the value that is stored. (If not, it may be an address register that is updated for pre-index or post-index writeback forms, or some other source that does not directly affect the value written to memory.)
instr_is_predicated
Returns whether \p instr is predicated: i.e., whether its operation is conditional.
instr_is_prefetch
Returns true iff \p instr is a prefetch instruction.
instr_is_reg_spill_or_restore
Returns whether \p instr is a register spill or restore, whether it was created by dr_save_reg(), dr_restore_reg(), dr_insert_read_raw_tls(), dr_insert_write_raw_tls(), routines that call the aforementioned routines (e.g., dr_save_arith_flags()), or DR’s own internal spills and restores. Returns information about the spill/restore in the OUT parameters. The returned \p offs is the raw offset in bytes from the TLS segment base, the stolen register base, or the thread-private context area.
instr_is_rep_string_op
Returns true iff \p instr is an Intel repeated-loop string operation instruction.
instr_is_return
Returns true iff \p instr’s opcode is OP_ret, OP_ret_far, or OP_iret on x86. On ARM, returns true iff \p instr reads DR_REG_LR and writes DR_REG_PC.
instr_is_scatter
Returns true iff \p instr is a scatter-store instruction.
instr_is_sse
Returns true iff \p instr is part of Intel’s SSE instructions.
instr_is_sse2
Returns true iff \p instr is part of Intel’s SSE2 instructions.
instr_is_sse3
Returns true iff \p instr is part of Intel’s SSE3 instructions.
instr_is_sse4A
Returns true iff \p instr is part of AMD’s SSE4A instructions.
instr_is_sse41
Returns true iff \p instr is part of Intel’s SSE4.1 instructions.
instr_is_sse42
Returns true iff \p instr is part of Intel’s SSE4.2 instructions.
instr_is_sse_or_sse2
Returns true iff \p instr is part of Intel’s SSE or SSE2 instructions. \deprecated Use instr_is_sse() combined with instr_is_sse2() instead.
instr_is_ssse3
Returns true iff \p instr is part of Intel’s SSSE3 instructions.
instr_is_string_op
Returns true iff \p instr is an Intel string operation instruction.
instr_is_syscall
Returns true iff \p instr is used to implement system calls: OP_int with a source operand of 0x80 on linux or 0x2e on windows, or OP_sysenter, or OP_syscall, or #instr_is_wow64_syscall() for WOW64.
instr_is_ubr
Returns true iff \p instr is an unconditional direct branch: OP_jmp, OP_jmp_short, or OP_jmp_far on x86; OP_b or OP_b_short with no predicate on ARM.
instr_is_undefined
Returns true iff \p instr is an “undefined” instruction (ud2)
instr_is_xrstor
Returns true if \p instr’s opcode is #OP_xrstor32, #OP_xrstor64, #OP_xrstors32, or #OP_xrstors64.
instr_is_xsave
Returns true if \p instr’s opcode is #OP_xsave32, #OP_xsaveopt32, #OP_xsave64, #OP_xsaveopt64, #OP_xsavec32, #OP_xsavec64, #OP_xsaves32, or #OP_xsaves64.
instr_jcc_taken
Given \p eflags, returns whether or not the conditional branch, \p instr, would be taken.
instr_length
Returns the length of \p instr. As a side effect, if instr_is_app(instr) and \p instr’s raw bits are invalid, encodes \p instr into bytes allocated with instr_allocate_raw_bits(), after which instr is marked as having valid raw bits.
instr_make_persistent
Calling this function with \p instr makes it safe to keep the instruction around indefinitely when its raw bits point into the cache. The function allocates memory local to \p instr to hold a copy of the raw bits. If this was not done, the original raw bits could be deleted at some point. Making an instruction persistent is necessary if you want to keep it beyond returning from the call that produced the instruction.
instr_mem_usage
Returns the total number of bytes of memory used by \p instr.
instr_memory_reference_size
Calculates the size, in bytes, of the memory read or write of \p instr. If \p instr does not reference memory, or is invalid, returns 0. If \p instr is a repeated string instruction, considers only one iteration. If \p instr uses vector addressing (VSIB, introduced in AVX2), considers only the size of each separate memory access.
instr_needs_encoding
Returns true iff \p instr’s raw bits are not a valid encoding of \p instr.
instr_noalloc_init
Initializes the no-heap-allocation structure \p instr. Sets the x86/x64 mode of \p instr to the mode of dcontext.
instr_num_dsts
Returns the number of destination operands of \p instr.
instr_num_memory_read_access
Returns the number of memory read accesses of the instruction.
instr_num_memory_write_access
Returns the number of memory write accesses of the instruction.
instr_num_srcs
Returns the number of source operands of \p instr.
instr_ok_to_emit
Return true iff \p instr is to be emitted into the cache.
instr_ok_to_mangle
Return true iff \p instr is not a meta-instruction (see instr_set_app() for more information).
instr_opcode_valid
Returns true iff \p instr’s opcode is valid. If the opcode is ever set to other than OP_INVALID or OP_UNDECODED it is assumed to be valid. However, calling instr_get_opcode() will attempt to decode a valid opcode, hence the purpose of this routine.
instr_operands_valid
Returns true iff \p instr’s operands are up to date.
instr_predicate_is_cond
Returns true iff \p pred denotes a truly conditional predicate: on all architectures, this excludes #DR_PRED_NONE. On ARM it also excludes #DR_PRED_AL and #DR_PRED_OP; on AArch64, it also excludes #DR_PRED_AL and #DR_PRED_NV.
instr_predicate_triggered
Given the machine context \p mc, returns whether or not the predicated instruction \p instr will execute. Currently condition-code predicates are supported and OP_bsf and OP_bsr from #DR_PRED_COMPLEX; other instances of #DR_PRED_COMPLEX are not supported. \p mc->flags must include #DR_MC_CONTROL for condition-code predicates, and additionally #DR_MC_INTEGER for OP_bsf and OP_bsr.
instr_raw_bits_valid
Returns true iff \p instr’s raw bits are a valid encoding of instr.
instr_reads_from_exact_reg
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s source operands is the same register (not enough to just overlap) as \p reg.
instr_reads_from_reg
Assumes that reg is a DR_REG_ constant. Returns true iff at least one of instr’s operands reads from a register that overlaps reg (checks both source operands and addressing registers used in destination operands).
instr_reads_memory
Returns true iff any of \p instr’s source operands is a memory reference.
instr_reg_in_dst
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s destination operands references \p reg.
instr_reg_in_src
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s source operands references \p reg.
instr_remove_dsts
Removes \p instr’s destination operands from position \p start up to but not including position \p end (so pass n,n+1 to remove just position n). Shifts all subsequent destination operands (if any) down in the operand array. Also calls instr_set_raw_bits_valid(\p instr, false) and instr_set_operands_valid(\p instr, true).
instr_remove_srcs
Removes \p instr’s source operands from position \p start up to but not including position \p end (so pass n,n+1 to remove just position n). Shifts all subsequent source operands (if any) down in the operand array. Also calls instr_set_raw_bits_valid(\p instr, false) and instr_set_operands_valid(\p instr, true).
instr_replace_reg_resize
Replaces all instances of \p old_reg (or any size variant) in \p instr’s operands with \p new_reg. Resizes \p new_reg to match sub-full-size uses of \p old_reg. Returns whether it replaced anything.
instr_replace_src_opnd
Replaces all instances of \p old_opnd in \p instr’s source operands with \p new_opnd (uses opnd_same() to detect sameness). Returns whether it replaced anything.
instr_reset
Performs both instr_free() and instr_init(). \p instr must have been initialized.
instr_reuse
Frees all dynamically allocated storage that was allocated by \p instr, except for allocated bits. Also zeroes out \p instr’s fields, except for raw bit fields, whether \p instr is instr_is_meta(), and the x86 mode of \p instr. \p instr must have been initialized.
instr_same
Returns true iff \p instr1 and \p instr2 have the same opcode, prefixes, and source and destination operands (uses opnd_same() to compare the operands).
instr_set_app
Sets \p instr as an application (non-meta) instruction. An application instruction might be mangled by DR if necessary, e.g., to create an exit stub for a branch instruction. All application instructions that are added to basic blocks or traces should have their translation fields set (via #instr_set_translation()).
instr_set_branch_target_pc
Set the taken target pc of the (direct branch) instruction.
instr_set_category
Assumes \p category is a set of DR_INSTR_CATEGORY_ constants and sets it to be instr’s category. See #dr_instr_category_t.
instr_set_dst
Sets \p instr’s destination operand at position \p pos to be \p opnd. Also calls instr_set_raw_bits_valid(\p instr, false) and instr_set_operands_valid(\p instr, true).
instr_set_encoding_hint
Each instruction may store a hint for how the instruction should be encoded if redundant encodings are available. This presumes that the user knows that a redundant encoding is available. This routine sets the \p hint for \p instr. Returns \p instr (for easy chaining).
instr_set_isa_mode
Each instruction stores the processor mode under which it should be interpreted. This routine sets the mode for \p instr.
instr_set_label_callback
Set a function \p func which is called when the label instruction is freed. \p instr is the label instruction allowing \p func to free the label’s auxiliary data. \note This data field is not copied across instr_clone(). Instead, the clone’s field will be NULL (xref i#3962).
instr_set_meta
Sets \p instr as a meta instruction. A meta instruction will not be mangled by DR in any way, which is necessary to have DR not create an exit stub for a branch instruction. Meta instructions should not fault (unless such faults are handled by the client) and are not considered application instructions but rather added instrumentation code (see #dr_register_bb_event() for further information).
instr_set_meta_may_fault
\deprecated Any meta instruction can fault if it has a non-NULL translation field and the client fully handles all of its faults, so this routine is no longer needed.
instr_set_meta_no_translation
A convenience routine that calls both #instr_set_meta (instr) and #instr_set_translation (instr, NULL).
instr_set_next
Sets the next field of \p instr to point to \p next.
instr_set_note
Sets the user-controlled note field in \p instr to \p value.
instr_set_num_opnds
Assumes that \p instr has been initialized but does not have any operands yet. Allocates storage for \p num_srcs source operands and \p num_dsts destination operands.
instr_set_ok_to_emit
Set \p instr to “ok to emit” if \p val is true and “not ok to emit” if \p val is false. An instruction that should not be emitted is treated normally by DR for purposes of exits but is not placed into the cache. It is used for final jumps that are to be elided.
instr_set_ok_to_mangle
Sets \p instr to “ok to mangle” if \p val is true and “not ok to mangle” if \p val is false.
instr_set_opcode
Assumes \p opcode is an OP_ constant and sets it to be instr’s opcode.
instr_set_operands_valid
Sets \p instr’s operands to be valid if \p valid is true, invalid otherwise.
instr_set_operation_size
Sets the operation size of \p instr to \p operation_size only if instr is a #DR_ISA_REGDEPS instruction.
instr_set_predicate
Sets the predication for \p instr to the given DR_PRED_ constant. Returns \p instr if successful, or NULL if unsuccessful.
instr_set_prefix_flag
Assumes that \p prefix is a PREFIX_ constant. Ors \p instr’s prefixes with \p prefix. Returns the supplied instr (for easy chaining).
instr_set_prefixes
instr_set_prev
Sets the prev field of \p instr to point to \p prev.
instr_set_raw_bits
Assumes that \p instr does not currently have any raw bits allocated. Sets \p instr’s raw bits to be \p length bytes starting at \p addr. Does not set the operands invalid.
instr_set_raw_bits_valid
Sets \p instr’s raw bits to be valid if \p valid is true, invalid otherwise.
instr_set_raw_byte
Assumes that \p instr’s raw bits are valid and allocated by \p instr and have > \p pos bytes. Sets instr’s raw byte at position \p pos (beginning with 0) to the value \p byte.
instr_set_raw_bytes
Assumes that \p instr’s raw bits are valid and allocated by \p instr and have >= num_bytes bytes. Copies the \p num_bytes beginning at start to \p instr’s raw bits.
instr_set_raw_word
Assumes that \p instr’s raw bits are valid and allocated by \p instr and have > pos+3 bytes. Sets the 4 bytes beginning at position \p pos (0-based) to the value word.
instr_set_src
Sets \p instr’s source operand at position \p pos to be \p opnd. Also calls instr_set_raw_bits_valid(\p instr, false) and instr_set_operands_valid(\p instr, true).
instr_set_target
Assumes that \p cti_instr is a control transfer instruction. Sets the first source operand of \p cti_instr to be \p target. Also calls instr_set_raw_bits_valid(\p instr, false) and instr_set_operands_valid(\p instr, true).
instr_set_translation
Sets the translation pointer for \p instr, used to recreate the application address corresponding to this instruction. When adding or modifying instructions that are to be considered application instructions (i.e., non meta-instructions: see #instr_is_app), the translation should always be set. Pick the application address that if executed will be equivalent to restarting \p instr. Currently the translation address must lie within the existing bounds of the containing code block. Returns the supplied \p instr (for easy chaining). Use #instr_get_app_pc to see the current value of the translation.
instr_set_x86_mode
Each instruction stores whether it should be interpreted in 32-bit (x86) or 64-bit (x64) mode. This routine sets the mode for \p instr.
instr_shrink_to_16_bits
Shrinks all registers not used as addresses, and all immed integer and address sizes, to 16 bits. Does not shrink DR_REG_ESI or DR_REG_EDI used in string instructions.
instr_shrink_to_32_bits
Shrinks all registers, including addresses, and all immed integer and address sizes, to 32 bits.
instr_uses_fp_reg
Returns true iff at least one of \p instr’s operands references a floating point register.
instr_uses_reg
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s operands references a register that overlaps \p reg.
instr_valid
Returns true iff \p instr’s opcode is NOT OP_INVALID. Not to be confused with an invalid opcode, which can be OP_INVALID or OP_UNDECODED. OP_INVALID means an instruction with no valid fields: raw bits (may exist but do not correspond to a valid instr), opcode, eflags, or operands. It could be an uninitialized instruction or the result of decoding an invalid sequence of bytes.
instr_writes_memory
Returns true iff any of \p instr’s destination operands is a memory reference. If \p instr is predicated (see instr_is_predicated()), the destination may not always be written.
instr_writes_to_exact_reg
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s destination operands is the same register (not enough to just overlap) as \p reg. Which operands are considered to be accessed for conditionally executed instructions are controlled by \p flags.
instr_writes_to_reg
Assumes that \p reg is a DR_REG_ constant. Returns true iff at least one of \p instr’s destination operands is a register operand for a register that overlaps \p reg. Which operands are considered to be accessed for conditionally executed instructions are controlled by \p flags.
instr_zeroes_ymmh
Returns true iff \p instr writes to an xmm register and zeroes the top half of the corresponding ymm register as a result (some instructions preserve the top half while others zero it when writing to the bottom half). This zeroing will occur even if \p instr is predicated (see instr_is_predicated()).
instr_zeroes_zmmh
Returns true iff \p instr writes to an xmm or ymm register and zeroes the top half of the corresponding zmm register as a result (some instructions preserve the top half while others zero it when writing to the bottom half). This zeroing will occur even if \p instr is predicated (see instr_is_predicated()).
instrlist_append
Adds \p instr to the end of \p ilist.
instrlist_clear
Frees the instructions in \p ilist.
instrlist_clear_and_destroy
Destroys the instructions in \p ilist and destroys the instrlist_t object itself.
instrlist_clone
Allocates a new instrlist_t and for each instr_t in \p old allocates a new instr_t using instr_clone to produce a complete copy of \p old. Each operand that is opnd_is_instr() has its target updated to point to the corresponding instr_t in the new instrlist_t (this routine assumes that all such targets are contained within \p old, and may fault otherwise).
instrlist_create
Returns an initialized instrlist_t allocated on the thread-local heap.
instrlist_cut
Cuts off subsequent instructions starting from \p instr from \p ilist.
instrlist_destroy
Deallocates the thread-local heap storage for \p ilist.
instrlist_disassemble
Prints each instruction in \p ilist in sequence to \p outfile. The default is to use DR’s custom syntax (see disassemble_set_syntax()) with additional information. The first column contains the offset in bytes from the start of the list. Next, each instruction is labeled according to its type, which will typically either be \p L3 for an unchanged application instruction or \p m4 for a tool instruction (the names come from “Level 3” and “meta Level 4”, IR details which are no longer exposed to tools). Tool instructions have their IR heap addresses included (indicated with a leading @ character) to make instruction jump targets easier to identify. The final two columns contain the raw bytes and the actual instruction disassembly.
instrlist_encode
Encodes each instruction in \p ilist in turn in contiguous memory starting at \p pc. Returns the pc after all of the encodings, or NULL if any one of the encodings failed. Uses the x86/x64 mode stored in each instr, not the mode of the current thread. In order for instr_t operands to be encoded properly, \p has_instr_jmp_targets must be true. If \p has_instr_jmp_targets is true, the offset field of each instr_t in ilist will be overwritten, and if any instr_t targets are not in \p ilist, they must have their offset fields set with their offsets relative to pc. x86 instructions can occupy up to 17 bytes each, so the caller should ensure the target location has enough room to avoid overflow.
instrlist_encode_to_copy
Encodes each instruction in \p ilist in turn in contiguous memory starting \p copy_pc in preparation for copying to \p final_pc. Any pc-relative instruction is encoded as though the instruction list were located at \p final_pc. This allows for direct copying of the encoded bytes to \p final_pc without re-relativization.
instrlist_first
Returns the first instr_t in \p ilist.
instrlist_first_app
Returns the first application (non-meta) instruction in the instruction list \p ilist.
instrlist_first_nonlabel
Returns the first instruction in the instruction list \p ilist for which instr_is_label() returns false.
instrlist_get_auto_predicate
Returns the predicate for \p ilist.
instrlist_get_translation_target
Returns the translation target, or NULL if none is set.
instrlist_init
Initializes \p ilist.
instrlist_insert_mov_immed_ptrsz
Create meta instructions for storing pointer-size integer \p val to \p dst, and then insert them into \p ilist prior to \p where. Pointers to the first and last created meta instructions are returned in \p first and \p last, unless only one meta instruction is created, in which case NULL is returned in last. If the instruction is a no-op (when dst is the zero register on AArch64) then no instructions are created and NULL is returned in first and last.
instrlist_insert_mov_instr_addr
Create meta instructions for storing the address of \p src_inst to \p dst, and then insert them into \p ilist prior to \p where. The \p encode_estimate parameter, used only for 64-bit mode, indicates whether the final address of \p src_inst, when it is encoded later, will fit in 32 bits or needs 64 bits. If the encoding will be in DynamoRIO’s code cache, pass NULL. If the final encoding location is unknown, pass a high address to be on the safe side. Pointers to the first and last created meta instructions are returned in \p first and \p last, unless only one meta instruction is created, in which case NULL is returned in last. If the instruction is a no-op (when dst is the zero register on AArch64) then no instructions are created and NULL is returned in first and last.
instrlist_insert_push_immed_ptrsz
Create meta instructions for pushing pointer-size integer \p val on the stack, and then insert them into \p ilist prior to \p where. Pointers to the first and last created meta instructions are returned in \p first and \p last, unless only one meta instruction is created, in which case NULL is returned in last.
instrlist_insert_push_instr_addr
Create meta instructions for pushing the address of \p src_inst on the stack, and then insert them into \p ilist prior to \p where. The \p encode_estimate parameter, used only for 64-bit mode, indicates whether the final address of \p src_inst, when it is encoded later, will fit in 32 bits or needs 64 bits. If the encoding will be in DynamoRIO’s code cache, pass NULL. If the final encoding location is unknown, pass a high address to be on the safe side. Pointers to the first and last created meta instructions are returned in \p first and \p last, unless only one meta instruction is created, in which case NULL is returned in last.
instrlist_last
Returns the last instr_t in \p ilist.
instrlist_last_app
Returns the last application (non-meta) instruction in the instruction list \p ilist.
instrlist_meta_append
Inserts \p instr as a non-application instruction onto the end of \p ilist
instrlist_meta_fault_append
Inserts \p instr as a non-application instruction that can fault (see instr_set_meta_may_fault()) onto the end of \p ilist.
instrlist_meta_fault_postinsert
Inserts \p instr as a non-application instruction that can fault (see instr_set_meta_may_fault()) into \p ilist after \p where.
instrlist_meta_fault_preinsert
Inserts \p instr as a non-application instruction that can fault (see instr_set_meta_may_fault()) into \p ilist prior to \p where.
instrlist_meta_postinsert
Inserts \p instr as a non-application instruction into \p ilist after \p where.
instrlist_meta_preinsert
Inserts \p instr as a non-application instruction into \p ilist prior to \p where.
instrlist_postinsert
Inserts \p instr into \p ilist after \p where.
instrlist_preinsert
Inserts \p instr into \p ilist prior to \p where.
instrlist_prepend
Adds \p instr to the front of \p ilist.
instrlist_remove
Removes (does not destroy) \p instr from \p ilist.
instrlist_replace
Replaces \p oldinst with \p newinst in \p ilist (does not destroy \p oldinst).
instrlist_set_auto_predicate
All future instructions inserted into \p ilist will be predicated with \p pred. This is a convenience routine to make it easy to have emitted code from internal DR components predicated.
instrlist_set_fall_through_target
Specifies the fall-through target of a basic block if its last instruction is a conditional branch instruction. It can only be called in basic block building event callbacks when the \p for_trace parameter is false, and has NO EFFECT in other cases.
instrlist_set_our_mangling
instrlist_set_return_target
Specifies the return target of a basic block if its last instruction is a call instruction. It can only be called in basic block building event callbacks when the \p for_trace parameter is false, and has NO EFFECT in other cases.
instrlist_set_translation_target
All future instructions inserted into \p ilist that do not have raw bits will have instr_set_translation() called with \p pc as the target. This is a convenience routine to make it easy to have the same code generate non-translation and translation instructions, and it does not try to enforce that all instructions have translations (e.g., some could be inserted via instr_set_next()).
opnd_add_flags
Assumes \p opnd is a register operand, base+disp memory reference, or an immediate integer. Sets the flags describing additional properties of the operand to be the current flags plus the \p flags parameter and returns the new operand value.
opnd_compute_address
Returns the effective address of \p opnd, computed using the passed-in register values. If \p opnd is a far address, ignores that aspect except for TLS references on Windows (fs: for 32-bit, gs: for 64-bit) or typical fs: or gs: references on Linux. For far addresses the calling thread’s segment selector is used. \p mc->flags must include DR_MC_CONTROL and DR_MC_INTEGER.
opnd_create_abs_addr
Returns a memory reference operand that refers to the address \p addr. The operand has data size \p data_size (must be a OPSZ_ constant).
opnd_create_base_disp
Returns a memory reference operand that refers to the address:
opnd_create_base_disp_ex
Returns a memory reference operand that refers to the address:
opnd_create_far_abs_addr
Returns a memory reference operand that refers to the address \p seg: \p addr. The operand has data size \p data_size (must be a OPSZ_ constant).
opnd_create_far_base_disp
Returns a far memory reference operand that refers to the address:
opnd_create_far_base_disp_ex
Returns a far memory reference operand that refers to the address:
opnd_create_far_instr
Returns a far instr_t pointer address with value \p seg_selector:instr. \p seg_selector is a segment selector, not a DR_SEG_ constant.
opnd_create_far_pc
Returns a far program address operand with value \p seg_selector:pc. \p seg_selector is a segment selector, not a DR_SEG_ constant.
opnd_create_far_rel_addr
Returns a memory reference operand that refers to the address \p seg : \p addr, but will be encoded as a pc-relative address. It is up to the caller to ensure that the resulting address is reachable via a 32-bit signed displacement from the next instruction at emit time.
opnd_create_immed_double
Returns an immediate double operand with value \p d. The caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state.
opnd_create_immed_float
Returns an immediate float operand with value \p f. The caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state.
opnd_create_immed_int
Returns a signed immediate integer operand with value \p i and size \p data_size; \p data_size must be a OPSZ_ constant.
opnd_create_immed_int64
Returns an unsigned immediate integer operand with value \p i and size \p data_size; \p data_size must be a OPSZ_ constant. This operand can be distinguished from a regular immediate integer operand by the flag #DR_OPND_MULTI_PART in opnd_get_flags() which tells the caller to use opnd_get_immed_int64() to retrieve the full value. \note 32-bit only: use opnd_create_immed_int() for 64-bit architectures.
opnd_create_immed_uint
Returns an unsigned immediate integer operand with value \p i and size \p data_size; \p data_size must be a OPSZ_ constant.
opnd_create_increment_reg
Creates a reg incremented from an existing \p opnd by the \p increment value, modulo the reg size. Returns the new reg.
opnd_create_instr
Returns an operand whose value will be the encoded address of \p instr. This operand can be used as an immediate integer or as a direct call or jump target. Its size is always #OPSZ_PTR.
opnd_create_instr_ex
Returns an operand whose value will be the encoded address of \p instr. This operand can be used as an immediate integer or as a direct call or jump target. Its size is the specified \p size. Its value can be optionally right-shifted by \p shift from the encoded address.
opnd_create_mem_instr
Returns a memory reference operand whose value will be the encoded address of \p instr plus the 16-bit displacement \p disp. For 32-bit mode, it will be encoded just like an absolute address (opnd_create_abs_addr()); for 64-bit mode, it will be encoded just like a pc-relative address (opnd_create_rel_addr()). This operand can be used anywhere a regular memory operand can be used. Its size is \p data_size.
opnd_create_null
Returns an empty operand.
opnd_create_pc
Returns a program address operand with value \p pc.
opnd_create_reg
Returns a register operand (\p r must be a DR_REG_ constant).
opnd_create_reg_element_vector
Returns a register operand corresponding to a vector register that has an element size.
opnd_create_reg_ex
Returns a register operand with additional properties specified by \p flags. If \p subsize is 0, creates a full-sized register; otherwise, creates a partial register in the manner of opnd_create_reg_partial().
opnd_create_reg_partial
Returns a register operand corresponding to a part of the register represented by the DR_REG_ constant \p r.
opnd_create_rel_addr
Returns a memory reference operand that refers to the address \p addr, but will be encoded as a pc-relative address. At emit time, if \p addr is out of reach of the maximum encodable displacement (signed 32-bit for x86) from the next instruction, encoding will fail.
opnd_defines_use
Returns true iff \p def, considered as a write, affects \p use. Is conservative, so if both \p def and \p use are memory references, will return true unless it can disambiguate them based on their registers and displacement.
opnd_disassemble
Prints the operand \p opnd to file \p outfile. The default is to use DR’s custom syntax (see disassemble_set_syntax()).
opnd_disassemble_to_buffer
Prints the operand \p opnd to the buffer \p buf. Always null-terminates, and will not print more than \p bufsz characters, which includes the final null character. Returns the number of characters printed, not including the final null. The default is to use DR’s custom syntax (see disassemble_set_syntax()).
opnd_get_addr
Assumes \p opnd is a (near or far) absolute or pc-relative memory reference, or a base+disp memory reference with no base or index register. Returns \p opnd’s absolute address (which will be pc-relativized on encoding for pc-relative memory references).
opnd_get_base
Assumes \p opnd is a (near or far) base+disp memory reference. Returns the base register (a DR_REG_ constant).
opnd_get_disp
Assumes \p opnd is a (near or far) base+disp memory reference. Returns the displacement. On ARM, the displacement is always a non-negative value, and the presence or absence of #DR_OPND_NEGATED in opnd_get_flags() determines whether to add or subtract from the base register.
opnd_get_flags
Assumes \p opnd is a register operand, base+disp memory reference, or an immediate integer. Returns the flags describing additional properties of the register, the index register or displacement component of the memory reference, or the immediate operand \p opnd.
opnd_get_immed_double
Assumes \p opnd is an immediate double and returns its value. The caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state.
opnd_get_immed_float
Assumes \p opnd is an immediate float and returns its value. The caller’s code should use proc_save_fpstate() or be inside a clean call that has requested to preserve the floating-point state.
opnd_get_immed_int
Assumes opnd is an immediate integer and returns its value.
opnd_get_immed_int64
Assumes opnd is an immediate integer with DR_OPND_MULTI_PART set. Returns its value. \note 32-bit only.
opnd_get_index
Assumes \p opnd is a (near or far) base+disp memory reference. Returns the index register (a DR_REG_ constant).
opnd_get_instr
Assumes \p opnd is an instr_t (near, far, or memory) operand and returns its value.
opnd_get_mem_instr_disp
Assumes \p opnd is a memory instr operand. Returns its displacement.
opnd_get_pc
Assumes \p opnd is a (near or far) program address and returns its value.
opnd_get_reg
Assumes \p opnd is a register operand. Returns the register it refers to (a DR_REG_ constant).
opnd_get_reg_used
Used in conjunction with opnd_num_regs_used(), this routine can be used to iterate through all registers used by \p opnd. The index values begin with 0 and proceed through opnd_num_regs_used(opnd)-1.
opnd_get_scale
Assumes \p opnd is a (near or far) base+disp memory reference. Returns the scale. \note x86-only. On ARM use opnd_get_index_shift().
opnd_get_segment
Assumes \p opnd is a (near or far) memory reference of any type. Returns \p opnd’s segment (a DR_SEG_ constant), or DR_REG_NULL if it is a near memory reference.
opnd_get_segment_selector
Assumes \p opnd is a far program address. Returns \p opnd’s segment, a segment selector (not a DR_SEG_ constant).
opnd_get_shift
Assumes \p opnd is a near instr_t operand and returns its shift value.
opnd_get_size
Return the data size of \p opnd as a OPSZ_ constant. Returns OPSZ_NA if \p opnd does not have a valid size. \note A register operand may have a size smaller than the full size of its DR_REG_* register specifier.
opnd_get_vector_element_size
Return the element size of \p opnd as a OPSZ_ constant. Returns #OPSZ_NA if \p opnd does not have a valid size.
opnd_invert_immed_int
Performs a bitwise NOT operation on the integer value in \p opnd, but only on the LSB bits provided by opnd_size_in_bits(opnd). \p opnd must carry an immed integer.
opnd_is_abs_addr
Returns true iff \p opnd is a (near or far) absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
opnd_is_base_disp
Returns true iff \p opnd is a (near or far) base+disp memory reference operand.
opnd_is_disp_encode_zero
Assumes \p opnd is a (near or far) base+disp memory reference; returns whether encode_zero_disp has been specified for \p opnd.
opnd_is_disp_force_full
Assumes \p opnd is a (near or far) base+disp memory reference; returns whether force_full_disp has been specified for \p opnd.
opnd_is_disp_short_addr
Assumes \p opnd is a (near or far) base+disp memory reference; returns whether disp_short_addr has been specified for \p opnd.
opnd_is_element_vector_reg
Returns true iff \p opnd is a vector reg operand.
opnd_is_far_abs_addr
Returns true iff \p opnd is a far absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
opnd_is_far_base_disp
Returns true iff \p opnd is a far base+disp memory reference operand.
opnd_is_far_instr
Returns true iff \p opnd is a far instr_t pointer address operand.
opnd_is_far_memory_reference
Returns true iff \p opnd is a far memory reference operand of any type: base-disp, absolute address, or pc-relative address.
opnd_is_far_pc
Returns true iff \p opnd is a far program address operand.
opnd_is_far_rel_addr
Returns true iff \p opnd is a far pc-relative memory reference operand.
opnd_is_governing
Returns true iff \p opnd is an SVE governing predicate register.
opnd_is_immed
Returns true iff \p opnd is an immediate (integer or float) operand.
opnd_is_immed_float
Returns true iff \p opnd is an immediate float operand.
opnd_is_immed_int
Returns true iff \p opnd is an immediate integer operand.
opnd_is_immed_int64
Returns true iff \p opnd is a special 64-bit immediate integer operand on a 32-bit architecture.
opnd_is_instr
Returns true iff \p opnd is a (near or far) instr_t pointer address operand.
opnd_is_mem_instr
Returns true iff \p opnd is a memory reference to an instr_t address operand.
opnd_is_memory_reference
Returns true iff \p opnd is a (near or far) memory reference operand of any type: base-disp, absolute address, or pc-relative address.
opnd_is_near_abs_addr
Returns true iff \p opnd is a near (i.e., default segment) absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
opnd_is_near_base_disp
Returns true iff \p opnd is a near (i.e., default segment) base+disp memory reference operand.
opnd_is_near_instr
Returns true iff \p opnd is a near instr_t pointer address operand.
opnd_is_near_memory_reference
Returns true iff \p opnd is a near memory reference operand of any type: base-disp, absolute address, or pc-relative address.
opnd_is_near_pc
Returns true iff \p opnd is a near (i.e., default segment) program address operand.
opnd_is_near_rel_addr
Returns true iff \p opnd is a near (i.e., default segment) pc-relative memory reference operand.
opnd_is_null
Returns true iff \p opnd is an empty operand.
opnd_is_pc
Returns true iff \p opnd is a (near or far) program address operand.
opnd_is_predicate_merge
Returns true iff \p opnd is a n SVE merging predicate register.
opnd_is_predicate_reg
Returns true iff \p opnd is an SVE predicate register.
opnd_is_predicate_zero
Returns true iff \p opnd is an SVE zeroing predicate register.
opnd_is_reg
Returns true iff \p opnd is a register operand.
opnd_is_reg_32bit
Returns true iff \p opnd is a register operand that refers to a 32-bit general-purpose register.
opnd_is_reg_64bit
Returns true iff \p opnd is a register operand that refers to a 64-bit general-purpose register.
opnd_is_reg_partial
Returns true iff \p opnd is a partial multimedia register operand.
opnd_is_reg_pointer_sized
Returns true iff \p opnd is a register operand that refers to a pointer-sized general-purpose register.
opnd_is_rel_addr
Returns true iff \p opnd is a (near or far) pc-relative memory reference operand. Returns true for base-disp operands on ARM that use the PC as the base register.
opnd_is_vector_base_disp
Returns true iff \p opnd is a base+disp memory reference operand which uses vector registers.
opnd_is_vsib
Returns true iff \p opnd uses vector indexing via a VSIB byte. This memory addressing form was introduced in Intel AVX2.
opnd_num_regs_used
Returns the number of registers referred to by \p opnd. This will only be non-zero for register operands and memory references.
opnd_replace_reg
Assumes that both \p old_reg and \p new_reg are DR_REG_ constants. Replaces all occurrences of \p old_reg in \p *opnd with \p new_reg. Only replaces exact matches (use opnd_replace_reg_resize() to match size variants). Returns whether it replaced anything.
opnd_replace_reg_resize
Replaces all instances of \p old_reg (or any size variant) in \p *opnd with \p new_reg. Resizes \p new_reg to match sub-full-size uses of \p old_reg. Returns whether it replaced anything.
opnd_same
Returns true iff \p op1 and \p op2 are indistinguishable. If either uses variable operand sizes, the default size is assumed.
opnd_same_address
Returns true iff \p op1 and \p op2 are both memory references and they are indistinguishable, ignoring data size.
opnd_same_sizes_ok
opnd_set_disp
Set the displacement of a memory reference operand \p opnd to \p disp. On ARM, a negative value for \p disp will be converted into a positive value with #DR_OPND_NEGATED set in opnd_get_flags().
opnd_set_disp_ex
Set the displacement and the encoding controls of a memory reference operand:
opnd_set_flags
Assumes \p opnd is a register operand, base+disp memory reference, or an immediate integer. Sets the flags describing additional properties of the operand to \p flags.
opnd_set_size
Sets the data size of \p opnd. Assumes \p opnd is an immediate integer, a memory reference, or an instr_t pointer address operand.
opnd_share_reg
Returns true iff there exists some register that is referred to (directly or overlapping) by both \p op1 and \p op2.
opnd_shrink_to_16_bits
Shrinks all 32-bit registers in \p opnd to their 16-bit versions. Also shrinks the size of immediate integers and memory references from OPSZ_4 to OPSZ_2.
opnd_shrink_to_32_bits
Shrinks all 64-bit registers in \p opnd to their 32-bit versions. Also shrinks the size of immediate integers and memory references from OPSZ_8 to OPSZ_4.
opnd_size_from_bytes
Returns the appropriate OPSZ_ constant for the given number of bytes. Returns OPSZ_NA if there is no such constant. The intended use case is something like “opnd_size_in_bytes(sizeof(foo))” for integer/pointer types. This routine returns simple single-size types and will not return complex/variable size types.
opnd_size_in_bits
Assumes \p size is an OPSZ_ constant, typically obtained from opnd_get_size() or reg_get_size(). Returns the number of bits the OPSZ_ constant represents. If OPSZ_ is a variable-sized size, returns the default size, which may or may not match the actual size decided up on at encoding time (that final size depends on other operands).
opnd_size_in_bytes
Assumes \p size is an OPSZ_ constant, typically obtained from opnd_get_size() or reg_get_size(). Returns the number of bytes the OPSZ_ constant represents. If OPSZ_ is a variable-sized size, returns the default size, which may or may not match the actual size decided up on at encoding time (that final size depends on other operands).
opnd_uses_reg
Assumes that \p reg is a DR_REG_ constant. Returns true iff \p opnd refers to reg directly or refers to a register that overlaps \p reg (e.g., DR_REG_AX overlaps DR_REG_EAX).

Type Aliases§

__builtin_va_list
__gnuc_va_list
__pid_t
_bindgen_ty_1
_bindgen_ty_2
_bindgen_ty_3
Register identifiers.
_bindgen_ty_4
Virtual register identifiers for #DR_ISA_REGDEPS.
_bindgen_ty_5
Flags for use with dr_map_file().
_bindgen_ty_9
Opcode constants for use in the instr_t data structure.
_bindgen_ty_11
_dr_annotation_calling_convention_t
Defines the calling conventions that are supported for annotation functions (as they appear in the target app).
_dr_encoding_hint_type_t
Specifies hints for how an instruction should be encoded if redundant encodings are available. Currently, we provide a hint for x86 evex encoded instructions. It can be used to encode an instruction in its evex form instead of its vex format (xref #3339).
_dr_extend_type_t
These flags describe how the index register in a memory reference is extended before being optionally shifted and added to the base register. They also describe how a general source register is extended before being used in its containing instruction.
_dr_isa_mode_t
Specifies which processor mode to use when decoding or encoding.
_dr_opnd_flags_t
These flags describe operations performed on the value of a source register before it is combined with other sources as part of the behavior of the containing instruction, or operations performed on an index register or displacement before it is added to or subtracted from the base register.
_dr_opnd_query_flags_t
Bitmask values passed as flags to routines that ask about whether operands and condition codes are read or written. These flags determine how to treat conditionally executed instructions. As a special case, the addressing registers inside a destination memory operand are covered by DR_QUERY_INCLUDE_COND_SRCS rather than DR_QUERY_INCLUDE_COND_DSTS.
_dr_pred_constr_type_t
These flags describe the values for “pattern” operands for aarch64 predicate count instructions. They are always set for imms with the flag #DR_OPND_IS_PREDICATE_CONSTRAINT
_dr_pred_trigger_t
This type holds the return values for instr_predicate_triggered().
_dr_pred_type_t
Triggers used for conditionally executed instructions.
_dr_shift_type_t
These flags describe how the index register in a memory reference is shifted before being added to or subtracted from the base register. They also describe how a general source register is shifted before being used in its containing instruction.
_dr_valgrind_request_id_t
Synonyms for the Valgrind client request IDs (sequential from 0 for convenience).
app_pc
bool_
byte
client_id_t
ID used to uniquely identify a client. This value is set at client registration and passed to the client in dr_client_main().
dr_alloc_flags_t
Flags used with dr_custom_alloc()
dr_app_arg_encoding_t
Encodings of an application’s command-line argument.
dr_app_arg_t
Contains information regarding an application’s command-line argument.
dr_auxlib_handle_t
A handle to a loaded client auxiliary library. This is a different type than module_handle_t and is not necessarily the base address.
dr_auxlib_routine_ptr_t
An exported routine in a loaded client auxiliary library.
dr_cleancall_save_t
Flags to request non-default preservation of state in a clean call as well as other call options. This is used with dr_insert_clean_call_ex(), dr_insert_clean_call_ex_varg(), and dr_register_clean_call_insertion_event().
dr_client_iterator_t
dr_config_client_t
Information about a client library setup.
dr_config_status_t
Return status codes for process registration, unregistration and nudging.
dr_custom_trace_action_t
DR will call the end trace event if it is registered prior to adding each basic block to a trace being generated. The return value of the event callback should be from the dr_custom_trace_action_t enum.
dr_disasm_flags_t
Flags controlling disassembly style
dr_error_code_t
Error codes of DR API routines.
dr_export_info_t
Data structure used by dr_get_proc_address_ex() to retrieve information about an exported symbol.
dr_fault_fragment_info_t
Data structure passed within dr_exception_t, dr_siginfo_t, and dr_restore_state_info_t. Contains information about the code fragment inside the code cache at the exception/signal/translation interruption point.
dr_fp_type_t
Indicates which type of floating-point operation and instruction performs. \deprecated Replaced by the more general #dr_instr_category_t.
dr_indirect_branch_type_t
Specifies the type of indirect branch for use with dr_prepopulate_indirect_targets().
dr_instr_category_t
Indicates which category the instruction corresponds to. Update instr_get_category_name() in core/ir/instr_shared.c when adding new categories in this enum.
dr_instr_label_data_t
Data slots available in a label (instr_create_label()) instruction for storing client-controlled data. Accessible via instr_get_label_data_area().
dr_kernel_xfer_info_t
Data structure passed for dr_register_kernel_xfer_event().
dr_kernel_xfer_type_t
Identifies the type of kernel transfer for dr_register_kernel_xfer_event().
dr_map_executable_flags_t
Flags for use with dr_map_executable_file().
dr_mcontext_t
Machine context structure.
dr_mem_info_t
Describes a memory region. Used by dr_query_memory_ex().
dr_mem_type_t
Flags describing memory used by dr_query_memory_ex().
dr_memory_dump_flags_t
Indicates the type of memory dump for dr_create_memory_dump().
dr_memory_dump_spec_t
Indicates the type of memory dump for dr_create_memory_dump().
dr_module_import_desc_t
dr_module_import_iterator_t
dr_module_import_t
Module import data returned from dr_module_import_iterator_next().
dr_module_iterator_t
For dr_module_iterator_* interface
dr_operation_mode_t
Specifies DynamoRIO’s operation mode.
dr_opmask_t
AVX-512 OpMask (k-)register.
dr_platform_t
Allow targeting both 32-bit and native 64-bit processes separately.
dr_restore_state_info_t
Data structure passed to a restore_state_ex event handler (see dr_register_restore_state_ex_event()). Contains the machine context at the translation point and other translation information.
dr_siginfo_t
Data structure passed with a signal event. Contains the machine context at the signal interruption point and other signal information.
dr_signal_action_t
Return value of client signal event callback, determining how DR will proceed with the signal.
dr_state_flags_t
Flags that control the behavior of dr_switch_to_app_state_ex() and dr_switch_to_dr_state_ex().
dr_stats_t
Used by dr_get_stats() and dr_app_stop_and_cleanup_with_stats()
dr_suspend_flags_t
Flags controlling the behavior of dr_suspend_all_other_threads_ex().
dr_symbol_export_iterator_t
dr_symbol_export_t
Symbol export data returned from dr_symbol_export_iterator_next().
dr_symbol_import_iterator_t
dr_symbol_import_t
Symbol import data returned from dr_symbol_import_iterator_next().
dr_syscall_result_info_t
Data structure used to obtain or modify the result of an application system call by dr_syscall_get_result_ex() and dr_syscall_set_result_ex().
dr_vg_client_request_t
Defines the Valgrind client request object, which is constructed by each instance of a Valgrind annotation in the target app. An instance is passed to Valgrind annotation callback functions to make the arguments available. Some arguments may be undefined for some Valgrind client requests; see the Valgrind documentation for each specific Valgrind client request for details about the arguments.
dr_where_am_i_t
Identifies where a thread’s control is at any one point. Used with client PC sampling using dr_set_itimer().
dr_xmm_t
128-bit XMM register.
dr_ymm_t
256-bit YMM register.
dr_zmm_t
512-bit ZMM register.
drfront_access_mode_t
Permission modes for drfront_access()
drfront_status_t
Status code for each DRFront operation
file_t
generic_func_t
instr_label_callback_t
Label instruction callback function. Set by instr_set_label_callback() and called when the label is freed. \p instr is the label instruction allowing the caller to free the label’s auxiliary data.
instrlist_t
The opaque type used to represent linear lists of #instr_t instructions.
int64
module_data_t
Alias for the #_module_data_t structure holding library information.
module_handle_t
module_names_t
Holds the names of a module. This structure contains multiple fields corresponding to different sources of a module name. Note that some of these names may not exist for certain modules. It is highly likely, however, that at least one name is available. Use dr_module_preferred_name() on the parent _module_data_t to get the preferred name of the module.
module_segment_data_t
Holds information on a segment of a loaded module.
opnd_size_t
pid_t
process_id_t
ptr_int_t
ptr_uint_t
reg_id_t
reg_t
thread_id_t
uint
uint64
ushort
va_list
wchar_t

Unions§

_dr_mcontext_t__bindgen_ty_1
_dr_mcontext_t__bindgen_ty_2
_dr_mcontext_t__bindgen_ty_3
_dr_mcontext_t__bindgen_ty_4
_dr_mcontext_t__bindgen_ty_5
_dr_mcontext_t__bindgen_ty_6
_dr_mcontext_t__bindgen_ty_7
_dr_mcontext_t__bindgen_ty_8
_dr_mcontext_t__bindgen_ty_9
_dr_mcontext_t__bindgen_ty_10
Anonymous union of alternative names for the program counter / instruction pointer (eip/rip). \note This field is not always set or read by all API routines.
_dr_mcontext_t__bindgen_ty_11
Anonymous union of alternative names for the simd structure in dr_mcontext_t. The deprecated name ymm is provided for backward compatibility.
_dr_xmm_t
128-bit XMM register.
_dr_ymm_t
256-bit YMM register.
_dr_zmm_t
512-bit ZMM register.
_module_data_t__bindgen_ty_1