Functions | |
instrlist_t * | instrlist_create (void *drcontext) |
void | instrlist_init (instrlist_t *ilist) |
void | instrlist_destroy (void *drcontext, instrlist_t *ilist) |
void | instrlist_clear (void *drcontext, instrlist_t *ilist) |
void | instrlist_clear_and_destroy (void *drcontext, instrlist_t *ilist) |
void | instrlist_set_translation_target (instrlist_t *ilist, app_pc pc) |
app_pc | instrlist_get_translation_target (instrlist_t *ilist) |
instr_t * | instrlist_first (instrlist_t *ilist) |
instr_t * | instrlist_last (instrlist_t *ilist) |
void | instrlist_append (instrlist_t *ilist, instr_t *instr) |
void | instrlist_prepend (instrlist_t *ilist, instr_t *instr) |
instrlist_t * | instrlist_clone (void *drcontext, instrlist_t *old) |
void | instrlist_preinsert (instrlist_t *ilist, instr_t *where, instr_t *instr) |
void | instrlist_postinsert (instrlist_t *ilist, instr_t *where, instr_t *instr) |
instr_t * | instrlist_replace (instrlist_t *ilist, instr_t *oldinst, instr_t *newinst) |
void | instrlist_remove (instrlist_t *ilist, instr_t *instr) |
void | instrlist_disassemble (void *drcontext, app_pc tag, instrlist_t *ilist, file_t outfile) |
byte * | instrlist_encode (void *drcontext, instrlist_t *ilist, byte *pc, bool has_instr_jmp_targets) |
void instrlist_append | ( | instrlist_t * | ilist, | |
instr_t * | instr | |||
) |
Adds instr
to the end of ilist
.
void instrlist_clear | ( | void * | drcontext, | |
instrlist_t * | ilist | |||
) |
Frees the instructions in ilist
.
void instrlist_clear_and_destroy | ( | void * | drcontext, | |
instrlist_t * | ilist | |||
) |
Destroys the instructions in ilist
and destroys the instrlist_t object itself.
instrlist_t* instrlist_clone | ( | void * | drcontext, | |
instrlist_t * | old | |||
) |
Allocates a new instrlist_t and for each instr_t in old
allocates a new instr_t using instr_clone to produce a complete copy of 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 old
, and may fault otherwise).
instrlist_t* instrlist_create | ( | void * | drcontext | ) |
Returns an initialized instrlist_t allocated on the thread-local heap.
void instrlist_destroy | ( | void * | drcontext, | |
instrlist_t * | ilist | |||
) |
Deallocates the thread-local heap storage for ilist
.
void instrlist_disassemble | ( | void * | drcontext, | |
app_pc | tag, | |||
instrlist_t * | ilist, | |||
file_t | outfile | |||
) |
Prints each instruction in ilist
in sequence to outfile
. The default is to use AT&T-style syntax, unless the -syntax_intel runtime option is specified.
byte* instrlist_encode | ( | void * | drcontext, | |
instrlist_t * | ilist, | |||
byte * | pc, | |||
bool | has_instr_jmp_targets | |||
) |
Encodes each instruction in ilist
in turn in contiguous memory starting at 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, has_instr_jmp_targets
must be true. If has_instr_jmp_targets
is true, the note field of each instr_t in ilist will be overwritten, and if any instr_t targets are not in ilist
, they must have their note fields set with their offsets relative to pc.
app_pc instrlist_get_translation_target | ( | instrlist_t * | ilist | ) |
Returns the translation target, or NULL if none is set.
void instrlist_init | ( | instrlist_t * | ilist | ) |
Initializes ilist
.
Inserts instr
into ilist
after where
.
Inserts instr
into ilist
prior to where
.
void instrlist_prepend | ( | instrlist_t * | ilist, | |
instr_t * | instr | |||
) |
Adds instr
to the front of ilist
.
void instrlist_remove | ( | instrlist_t * | ilist, | |
instr_t * | instr | |||
) |
Removes (does not destroy) instr
from ilist
.
Replaces oldinst
with newinst
in ilist
(does not destroy oldinst
).
void instrlist_set_translation_target | ( | instrlist_t * | ilist, | |
app_pc | pc | |||
) |
All future instructions inserted into ilist
that do not have raw bits will have instr_set_translation() called with 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()).