mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
47344 lines
1.5 MiB
Plaintext
47344 lines
1.5 MiB
Plaintext
ida_hexrays
|
|
array used for translating cexpr_t->op type to their names.
|
|
|
|
ida_hexrays.ACFL_BLKOPT
|
|
perform interblock transformations
|
|
|
|
ida_hexrays.ACFL_GLBDEL
|
|
perform dead code eliminition
|
|
|
|
ida_hexrays.ACFL_GLBPROP
|
|
perform global propagation
|
|
|
|
ida_hexrays.ACFL_GUESS
|
|
may guess calling conventions
|
|
|
|
ida_hexrays.ACFL_LOCOPT
|
|
perform local propagation (requires ACFL_BLKOPT)
|
|
|
|
ida_hexrays.ALLOW_UNUSED_LABELS
|
|
Unused labels are permitted.
|
|
|
|
ida_hexrays.ANCHOR_BLKCMT
|
|
block comment (for ctree items)
|
|
|
|
ida_hexrays.ANCHOR_CITEM
|
|
c-tree item
|
|
|
|
ida_hexrays.ANCHOR_ITP
|
|
item type preciser
|
|
|
|
ida_hexrays.ANCHOR_LVAR
|
|
declaration of local variable
|
|
|
|
ida_hexrays.ANY_FPSIZE
|
|
any size of floating operand is permitted
|
|
|
|
ida_hexrays.ANY_REGSIZE
|
|
any register size is permitted
|
|
|
|
ida_hexrays.BLT_0WAY
|
|
does not have successors (tail is a noret function)
|
|
|
|
ida_hexrays.BLT_1WAY
|
|
passes execution to one block (regular or goto block)
|
|
|
|
ida_hexrays.BLT_2WAY
|
|
passes execution to two blocks (conditional jump)
|
|
|
|
ida_hexrays.BLT_NONE
|
|
unknown block type
|
|
|
|
ida_hexrays.BLT_NWAY
|
|
passes execution to many blocks (switch idiom)
|
|
|
|
ida_hexrays.BLT_STOP
|
|
stops execution regularly (must be the last block)
|
|
|
|
ida_hexrays.BLT_XTRN
|
|
external block (out of function address)
|
|
|
|
ida_hexrays.CALC_CURLY_BRACES
|
|
print curly braces if necessary
|
|
|
|
ida_hexrays.CFL_FINAL
|
|
call type is final, should not be changed
|
|
|
|
ida_hexrays.CFL_HELPER
|
|
created from a decompiler helper function
|
|
|
|
ida_hexrays.CFL_NORET
|
|
call does not return
|
|
|
|
ida_hexrays.CFS_BOUNDS
|
|
'eamap' and 'boundaries' are ready
|
|
|
|
ida_hexrays.CFS_LOCKED
|
|
cfunc is temporarily locked
|
|
|
|
ida_hexrays.CFS_LVARS_HIDDEN
|
|
local variable definitions are collapsed
|
|
|
|
ida_hexrays.CFS_TEXT
|
|
'sv' is ready (and hdrlines)
|
|
|
|
ida_hexrays.CHF_FAKE
|
|
fake chain created by widen_chains()
|
|
|
|
ida_hexrays.CHF_INITED
|
|
is chain initialized? (valid only after lvar allocation)
|
|
|
|
ida_hexrays.CHF_OVER
|
|
overlapped chain
|
|
|
|
ida_hexrays.CHF_PASSTHRU
|
|
pass-thru chain, must use the input variable to the block
|
|
|
|
ida_hexrays.CHF_REPLACED
|
|
chain operands have been replaced?
|
|
|
|
ida_hexrays.CHF_TERM
|
|
terminating chain; the variable does not survive across the block
|
|
|
|
ida_hexrays.CIT_COLLAPSED
|
|
display ctree item in collapsed form
|
|
|
|
ida_hexrays.CMAT_BUILT
|
|
just generated
|
|
|
|
ida_hexrays.CMAT_CASTED
|
|
added necessary casts
|
|
|
|
ida_hexrays.CMAT_CPA
|
|
corrected pointer arithmetic
|
|
|
|
ida_hexrays.CMAT_FINAL
|
|
ready-to-use
|
|
|
|
ida_hexrays.CMAT_NICE
|
|
nicefied expressions
|
|
|
|
ida_hexrays.CMAT_TRANS1
|
|
applied first wave of transformations
|
|
|
|
ida_hexrays.CMAT_TRANS2
|
|
applied second wave of transformations
|
|
|
|
ida_hexrays.CMAT_TRANS3
|
|
applied third wave of transformations
|
|
|
|
ida_hexrays.CMAT_ZERO
|
|
does not exist
|
|
|
|
ida_hexrays.CMT_ALL
|
|
All comments.
|
|
|
|
ida_hexrays.CMT_BLOCK1
|
|
Anterioir block comment.
|
|
|
|
ida_hexrays.CMT_BLOCK2
|
|
Posterior block comment.
|
|
|
|
ida_hexrays.CMT_FUNC
|
|
Function comment.
|
|
|
|
ida_hexrays.CMT_LVAR
|
|
Local variable comment.
|
|
|
|
ida_hexrays.CMT_NONE
|
|
No comment is possible.
|
|
|
|
ida_hexrays.CMT_TAIL
|
|
Indented comment.
|
|
|
|
ida_hexrays.CPBLK_FAST
|
|
do not update minbstkref and minbargref
|
|
|
|
ida_hexrays.CPBLK_MINREF
|
|
update minbstkref and minbargref
|
|
|
|
ida_hexrays.CPBLK_OPTJMP
|
|
del the jump insn at the end of the block if it becomes useless
|
|
|
|
|
|
ida_hexrays.CV_FAST
|
|
do not maintain parent information
|
|
|
|
ida_hexrays.CV_INSNS
|
|
visit only statements, prune all expressions do not use before the final ctree maturity because expressions may contain statements at intermediate stages (see cot_insn). Otherwise you risk missing statements embedded into expressions.
|
|
|
|
|
|
ida_hexrays.CV_PARENTS
|
|
maintain parent information
|
|
|
|
ida_hexrays.CV_POST
|
|
call the leave...() functions
|
|
|
|
ida_hexrays.CV_PRUNE
|
|
this bit is set by visit...() to prune the walk
|
|
|
|
ida_hexrays.CV_RESTART
|
|
restart enumeration at the top expr (apply_to_exprs)
|
|
|
|
ida_hexrays.DECOMP_ALL_BLKS
|
|
generate microcode for unreachable blocks
|
|
|
|
ida_hexrays.DECOMP_GXREFS_DEFLT
|
|
the default behavior: do not update the global xrefs cache upon decompile() call, but when the pseudocode text is generated (e.g., through cfunc_t.get_pseudocode())
|
|
|
|
|
|
ida_hexrays.DECOMP_GXREFS_FORCE
|
|
update the global xrefs cache immediately
|
|
|
|
ida_hexrays.DECOMP_GXREFS_NOUPD
|
|
do not update the global xrefs cache
|
|
|
|
ida_hexrays.DECOMP_NO_CACHE
|
|
do not use decompilation cache (snippets are never cached)
|
|
|
|
ida_hexrays.DECOMP_NO_FRAME
|
|
do not use function frame info (only snippet mode)
|
|
|
|
ida_hexrays.DECOMP_NO_HIDE
|
|
do not close display waitbox. see close_hexrays_waitboxes()
|
|
|
|
ida_hexrays.DECOMP_NO_WAIT
|
|
do not display waitbox
|
|
|
|
ida_hexrays.DECOMP_OUTLINE
|
|
generate code for an outline
|
|
|
|
ida_hexrays.DECOMP_VOID_MBA
|
|
return empty mba object (to be used with gen_microcode)
|
|
|
|
ida_hexrays.DECOMP_WARNINGS
|
|
display warnings in the output window
|
|
|
|
ida_hexrays.DecompilationFailure
|
|
|
|
ida_hexrays.EQ_CMPDEST
|
|
compare instruction destinations
|
|
|
|
ida_hexrays.EQ_IGNCODE
|
|
ignore instruction opcodes
|
|
|
|
ida_hexrays.EQ_IGNSIZE
|
|
ignore source operand sizes
|
|
|
|
ida_hexrays.EQ_OPTINSN
|
|
optimize mop_d operands
|
|
|
|
ida_hexrays.EXFL_ALL
|
|
all currently defined bits
|
|
|
|
ida_hexrays.EXFL_ALONE
|
|
standalone helper
|
|
|
|
ida_hexrays.EXFL_CPADONE
|
|
pointer arithmetic correction done
|
|
|
|
ida_hexrays.EXFL_CSTR
|
|
string literal
|
|
|
|
ida_hexrays.EXFL_FPOP
|
|
floating point operation
|
|
|
|
ida_hexrays.EXFL_JUMPOUT
|
|
jump out-of-function
|
|
|
|
ida_hexrays.EXFL_LVALUE
|
|
expression is lvalue even if it doesn't look like it
|
|
|
|
ida_hexrays.EXFL_PARTIAL
|
|
type of the expression is considered partial
|
|
|
|
ida_hexrays.EXFL_UNDEF
|
|
expression uses undefined value
|
|
|
|
ida_hexrays.EXFL_VFTABLE
|
|
is ptr to vftable (used for cot_memptr, cot_memref)
|
|
|
|
ida_hexrays.FCI_DEAD
|
|
some return registers were determined dead
|
|
|
|
ida_hexrays.FCI_EXPLOCS
|
|
all arglocs are specified explicitly
|
|
|
|
ida_hexrays.FCI_FINAL
|
|
call type is final, should not be changed
|
|
|
|
ida_hexrays.FCI_HASCALL
|
|
A function is an synthetic helper combined from several instructions and at least one of them was a call to a real functions
|
|
|
|
|
|
ida_hexrays.FCI_HASFMT
|
|
A variadic function with recognized printf- or scanf-style format string
|
|
|
|
|
|
ida_hexrays.FCI_NORET
|
|
call does not return
|
|
|
|
ida_hexrays.FCI_NOSIDE
|
|
call does not have side effects
|
|
|
|
ida_hexrays.FCI_PROP
|
|
call has been propagated
|
|
|
|
ida_hexrays.FCI_PURE
|
|
pure function
|
|
|
|
ida_hexrays.FCI_SPLOK
|
|
spoiled/visible_memory lists have been optimized. for some functions we can reduce them as soon as information about the arguments becomes available. in order not to try optimize them again we use this bit.
|
|
|
|
|
|
ida_hexrays.FD_BACKWARD
|
|
search direction
|
|
|
|
ida_hexrays.FD_DEF
|
|
look for definition
|
|
|
|
ida_hexrays.FD_DIRTY
|
|
ignore possible implicit definitions by function calls and indirect memory access
|
|
|
|
|
|
ida_hexrays.FD_FORWARD
|
|
search direction
|
|
|
|
ida_hexrays.FD_USE
|
|
look for use
|
|
|
|
ida_hexrays.FORBID_UNUSED_LABELS
|
|
Unused labels cause interr.
|
|
|
|
ida_hexrays.GCA_ALLOC
|
|
enumerate only allocated chains
|
|
|
|
ida_hexrays.GCA_EMPTY
|
|
include empty chains
|
|
|
|
ida_hexrays.GCA_NALLOC
|
|
enumerate only non-allocated chains
|
|
|
|
ida_hexrays.GCA_OFIRST
|
|
consider only chains of the first block
|
|
|
|
ida_hexrays.GCA_OLAST
|
|
consider only chains of the last block
|
|
|
|
ida_hexrays.GCA_SPEC
|
|
include chains for special registers
|
|
|
|
ida_hexrays.GCO_DEF
|
|
is destination operand?
|
|
|
|
ida_hexrays.GCO_REG
|
|
is register? otherwise a stack variable
|
|
|
|
ida_hexrays.GCO_STK
|
|
a stack variable
|
|
|
|
ida_hexrays.GCO_USE
|
|
is source operand?
|
|
|
|
ida_hexrays.GC_ASR
|
|
all the above and assertions
|
|
|
|
ida_hexrays.GC_DIRTY_ALL
|
|
bitmask to represent all chains
|
|
|
|
ida_hexrays.GC_END
|
|
number of chain types
|
|
|
|
ida_hexrays.GC_REGS_AND_STKVARS
|
|
registers and stkvars (restricted memory only)
|
|
|
|
ida_hexrays.GC_XDSU
|
|
only registers calculated with FULL_XDSU
|
|
|
|
ida_hexrays.GLN_ALL
|
|
get both
|
|
|
|
ida_hexrays.GLN_CURRENT
|
|
get label of the current item
|
|
|
|
ida_hexrays.GLN_GOTO_TARGET
|
|
get goto target
|
|
|
|
ida_hexrays.Hexrays_Hooks
|
|
|
|
ida_hexrays.Hexrays_Hooks.__disown__(self)
|
|
|
|
ida_hexrays.Hexrays_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1)
|
|
|
|
ida_hexrays.Hexrays_Hooks.begin_inlining(self, cdg: "codegen_t", decomp_flags: int) -> int
|
|
Starting to inline outlined functions.
|
|
|
|
@param cdg: (codegen_t *)
|
|
@param decomp_flags: (int)
|
|
@returns Microcode error codes code This is an opportunity to inline other ranges.
|
|
|
|
ida_hexrays.Hexrays_Hooks.build_callinfo(self, blk: "mblock_t", type: "tinfo_t") -> "PyObject *"
|
|
Analyzing a call instruction.
|
|
|
|
@param blk: (mblock_t *) blk->tail is the call.
|
|
@param type: (tinfo_t *) buffer for the output type.
|
|
|
|
ida_hexrays.Hexrays_Hooks.callinfo_built(self, blk: "mblock_t") -> int
|
|
A call instruction has been anallyzed.
|
|
|
|
@param blk: (mblock_t *) blk->tail is the call.
|
|
|
|
ida_hexrays.Hexrays_Hooks.calls_done(self, mba: "mba_t") -> int
|
|
All calls have been analyzed.
|
|
|
|
@param mba: (mba_t *) This event is generated immediately after analyzing all calls, before any optimizitions, call unmerging and block merging.
|
|
|
|
ida_hexrays.Hexrays_Hooks.close_pseudocode(self, vu: "vdui_t") -> int
|
|
Pseudocode view is being closed.
|
|
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.cmt_changed(self, cfunc: "cfunc_t", loc: "treeloc_t", cmt: str) -> int
|
|
Comment got changed.
|
|
|
|
@param cfunc: (cfunc_t *)
|
|
@param loc: (const treeloc_t *)
|
|
@param cmt: (const char *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.collect_warnings(self, cfunc: "cfunc_t") -> int
|
|
Collect warning messages from plugins. These warnings will be displayed at the function header, after the user-defined comments.
|
|
|
|
@param cfunc: (cfunc_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.combine(self, blk: "mblock_t", insn: "minsn_t") -> int
|
|
Trying to combine instructions of basic block.
|
|
|
|
@param blk: (mblock_t *)
|
|
@param insn: (minsn_t *) Should return: 1 if combined the current instruction with a preceding one -1 if the instruction should not be combined 0 else
|
|
|
|
ida_hexrays.Hexrays_Hooks.create_hint(self, vu: "vdui_t") -> "PyObject *"
|
|
Create a hint for the current item.
|
|
|
|
@param vu: (vdui_t *)
|
|
@retval 0: continue collecting hints with other subscribers
|
|
@retval 1: stop collecting hints
|
|
|
|
ida_hexrays.Hexrays_Hooks.curpos(self, vu: "vdui_t") -> int
|
|
Current cursor position has been changed. (for example, by left-clicking or using keyboard)
|
|
|
|
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.double_click(self, vu: "vdui_t", shift_state: int) -> int
|
|
Mouse double click.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param shift_state: (int) Should return: 1 if the event has been handled
|
|
|
|
ida_hexrays.Hexrays_Hooks.flowchart(self, fc: "qflow_chart_t", mba: "mba_t", reachable_blocks: "bitset_t", decomp_flags: int) -> int
|
|
Flowchart has been generated.
|
|
|
|
@param fc: (qflow_chart_t *)
|
|
@param mba: (mba_t *)
|
|
@param reachable_blocks: (bitset_t *)
|
|
@param decomp_flags: (int)
|
|
@returns Microcode error codes code
|
|
|
|
ida_hexrays.Hexrays_Hooks.func_printed(self, cfunc: "cfunc_t") -> int
|
|
Function text has been generated. Plugins may modify the text in cfunc_t::sv. However, it is too late to modify the ctree or microcode. The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree items.
|
|
|
|
@param cfunc: (cfunc_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.glbopt(self, mba: "mba_t") -> int
|
|
Global optimization has been finished. If microcode is modified, MERR_LOOP must be returned. It will cause a complete restart of the optimization.
|
|
|
|
@param mba: (mba_t *)
|
|
@returns Microcode error codes code
|
|
|
|
ida_hexrays.Hexrays_Hooks.hook(self) -> bool
|
|
|
|
ida_hexrays.Hexrays_Hooks.inlined_func(self, cdg: "codegen_t", blk: int, mbr: "mba_ranges_t", i1: int, i2: int) -> int
|
|
A set of ranges got inlined.
|
|
|
|
@param cdg: (codegen_t *)
|
|
@param blk: (int) the block containing call/jump to inline
|
|
@param mbr: (mba_ranges_t *) the range to inline
|
|
@param i1: (int) blknum of the first inlined block
|
|
@param i2: (int) blknum of the last inlined block (excluded)
|
|
|
|
ida_hexrays.Hexrays_Hooks.inlining_func(self, cdg: "codegen_t", blk: int, mbr: "mba_ranges_t") -> int
|
|
A set of ranges is going to be inlined.
|
|
|
|
@param cdg: (codegen_t *)
|
|
@param blk: (int) the block containing call/jump to inline
|
|
@param mbr: (mba_ranges_t *) the range to inline
|
|
|
|
ida_hexrays.Hexrays_Hooks.interr(self, errcode: int) -> int
|
|
Internal error has occurred.
|
|
|
|
@param errcode: (int )
|
|
|
|
ida_hexrays.Hexrays_Hooks.keyboard(self, vu: "vdui_t", key_code: int, shift_state: int) -> int
|
|
Keyboard has been hit.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param key_code: (int) VK_...
|
|
@param shift_state: (int) Should return: 1 if the event has been handled
|
|
|
|
ida_hexrays.Hexrays_Hooks.locopt(self, mba: "mba_t") -> int
|
|
Basic block level optimization has been finished.
|
|
|
|
@param mba: (mba_t *)
|
|
@returns Microcode error codes code
|
|
|
|
ida_hexrays.Hexrays_Hooks.lvar_cmt_changed(self, vu: "vdui_t", v: "lvar_t", cmt: str) -> int
|
|
Local variable comment got changed.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param v: (lvar_t *)
|
|
@param cmt: (const char *) Please note that it is possible to read/write user settings for lvars directly from the idb.
|
|
|
|
ida_hexrays.Hexrays_Hooks.lvar_mapping_changed(self, vu: "vdui_t", frm: "lvar_t", to: "lvar_t") -> int
|
|
Local variable mapping got changed.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param to: (lvar_t *) Please note that it is possible to read/write user settings for lvars directly from the idb.
|
|
|
|
ida_hexrays.Hexrays_Hooks.lvar_name_changed(self, vu: "vdui_t", v: "lvar_t", name: str, is_user_name: bool) -> int
|
|
Local variable got renamed.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param v: (lvar_t *)
|
|
@param name: (const char *)
|
|
@param is_user_name: (bool) Please note that it is possible to read/write user settings for lvars directly from the idb.
|
|
|
|
ida_hexrays.Hexrays_Hooks.lvar_type_changed(self, vu: "vdui_t", v: "lvar_t", tinfo: "tinfo_t") -> int
|
|
Local variable type got changed.
|
|
|
|
@param vu: (vdui_t *)
|
|
@param v: (lvar_t *)
|
|
@param tinfo: (const tinfo_t *) Please note that it is possible to read/write user settings for lvars directly from the idb.
|
|
|
|
ida_hexrays.Hexrays_Hooks.maturity(self, cfunc: "cfunc_t", new_maturity: "ctree_maturity_t") -> int
|
|
Ctree maturity level is being changed.
|
|
|
|
@param cfunc: (cfunc_t *)
|
|
@param new_maturity: (ctree_maturity_t)
|
|
|
|
ida_hexrays.Hexrays_Hooks.microcode(self, mba: "mba_t") -> int
|
|
Microcode has been generated.
|
|
|
|
@param mba: (mba_t *)
|
|
@returns Microcode error codes code
|
|
|
|
ida_hexrays.Hexrays_Hooks.open_pseudocode(self, vu: "vdui_t") -> int
|
|
New pseudocode view has been opened.
|
|
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.populating_popup(self, widget: "TWidget *", popup_handle: "TPopupMenu *", vu: "vdui_t") -> int
|
|
Populating popup menu. We can add menu items now.
|
|
|
|
@param widget: (TWidget *)
|
|
@param popup_handle: (TPopupMenu *)
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.pre_structural(self, ct: "control_graph_t *", cfunc: "cfunc_t", g: "simple_graph_t") -> int
|
|
Structure analysis is starting.
|
|
|
|
@param ct: (control_graph_t *) in/out: control graph
|
|
@param cfunc: (cfunc_t *) in: the current function
|
|
@param g: (const simple_graph_t *) in: control flow graph
|
|
@returns Microcode error codes code; MERR_BLOCK means that the analysis has been performed by a plugin
|
|
|
|
ida_hexrays.Hexrays_Hooks.prealloc(self, mba: "mba_t") -> int
|
|
Local variables: preallocation step begins.
|
|
|
|
@param mba: (mba_t *) This event may occur several times. Should return: 1 if modified microcode Negative values are Microcode error codes error codes
|
|
|
|
ida_hexrays.Hexrays_Hooks.preoptimized(self, mba: "mba_t") -> int
|
|
Microcode has been preoptimized.
|
|
|
|
@param mba: (mba_t *)
|
|
@returns Microcode error codes code
|
|
|
|
ida_hexrays.Hexrays_Hooks.print_func(self, cfunc: "cfunc_t", vp: "vc_printer_t") -> int
|
|
Printing ctree and generating text.
|
|
|
|
@param cfunc: (cfunc_t *)
|
|
@param vp: (vc_printer_t *) Returns: 1 if text has been generated by the plugin It is forbidden to modify ctree at this event.
|
|
|
|
ida_hexrays.Hexrays_Hooks.prolog(self, mba: "mba_t", fc: "qflow_chart_t", reachable_blocks: "bitset_t", decomp_flags: int) -> int
|
|
Prolog analysis has been finished.
|
|
|
|
@param mba: (mba_t *)
|
|
@param fc: (qflow_chart_t *)
|
|
@param reachable_blocks: (const bitset_t *)
|
|
@param decomp_flags: (int)
|
|
@returns Microcode error codes code This event is generated for each inlined range as well.
|
|
|
|
ida_hexrays.Hexrays_Hooks.refresh_pseudocode(self, vu: "vdui_t") -> int
|
|
Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is forbidden in this event.
|
|
|
|
@param vu: (vdui_t *) See also hxe_text_ready, which happens earlier
|
|
|
|
ida_hexrays.Hexrays_Hooks.resolve_stkaddrs(self, mba: "mba_t") -> int
|
|
The optimizer is about to resolve stack addresses.
|
|
|
|
@param mba: (mba_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.right_click(self, vu: "vdui_t") -> int
|
|
Mouse right click. Use hxe_populating_popup instead, in case you want to add items in the popup menu.
|
|
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.stkpnts(self, mba: "mba_t", _sps: "stkpnts_t *") -> int
|
|
SP change points have been calculated.
|
|
|
|
@param mba: (mba_t *)
|
|
@returns Microcode error codes code This event is generated for each inlined range as well.
|
|
|
|
ida_hexrays.Hexrays_Hooks.structural(self, ct: "control_graph_t *") -> int
|
|
Structural analysis has been finished.
|
|
|
|
@param ct: (control_graph_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.switch_pseudocode(self, vu: "vdui_t") -> int
|
|
Existing pseudocode view has been reloaded with a new function. Its text has not been refreshed yet, only cfunc and mba pointers are ready.
|
|
|
|
@param vu: (vdui_t *)
|
|
|
|
ida_hexrays.Hexrays_Hooks.text_ready(self, vu: "vdui_t") -> int
|
|
Decompiled text is ready.
|
|
|
|
@param vu: (vdui_t *) This event can be used to modify the output text (sv). Obsolete. Please use hxe_func_printed instead.
|
|
|
|
ida_hexrays.Hexrays_Hooks.unhook(self) -> bool
|
|
|
|
ida_hexrays.INLINE_DONTCOPY
|
|
Do not reuse old inlined copy even if it exists.
|
|
|
|
ida_hexrays.INLINE_EXTFRAME
|
|
Inlined function has its own (external) frame.
|
|
|
|
ida_hexrays.IPROP_ASSERT
|
|
assertion: usually mov #val, op. assertions are used to help the optimizer. assertions are ignored when generating ctree
|
|
|
|
|
|
ida_hexrays.IPROP_CLNPOP
|
|
the purpose of the instruction is to clean stack (e.g. "pop ecx" is often used for that)
|
|
|
|
|
|
ida_hexrays.IPROP_COMBINED
|
|
insn has been modified because of a partial reference
|
|
|
|
ida_hexrays.IPROP_DONT_COMB
|
|
may not combine this instruction with others
|
|
|
|
ida_hexrays.IPROP_DONT_PROP
|
|
may not propagate
|
|
|
|
ida_hexrays.IPROP_EXTSTX
|
|
this is m_ext propagated into m_stx
|
|
|
|
ida_hexrays.IPROP_FARCALL
|
|
call of a far function using push cs/call sequence
|
|
|
|
ida_hexrays.IPROP_FPINSN
|
|
floating point insn
|
|
|
|
ida_hexrays.IPROP_IGNLOWSRC
|
|
low part of the instruction source operand has been created artificially (this bit is used only for 'and x, 80...')
|
|
|
|
|
|
ida_hexrays.IPROP_INV_JX
|
|
inverted conditional jump
|
|
|
|
ida_hexrays.IPROP_MBARRIER
|
|
this instruction acts as a memory barrier (instructions accessing memory may not be reordered past it)
|
|
|
|
|
|
ida_hexrays.IPROP_MULTI_MOV
|
|
bits that can be set by plugins:
|
|
|
|
the minsn was generated as part of insn that moves multiple registers (example: STM on ARM may transfer multiple registers)
|
|
|
|
|
|
ida_hexrays.IPROP_OPTIONAL
|
|
optional instruction
|
|
|
|
ida_hexrays.IPROP_PERSIST
|
|
persistent insn; they are not destroyed
|
|
|
|
ida_hexrays.IPROP_SPLIT
|
|
the instruction has been split:
|
|
|
|
ida_hexrays.IPROP_SPLIT1
|
|
into 1 byte
|
|
|
|
ida_hexrays.IPROP_SPLIT2
|
|
into 2 bytes
|
|
|
|
ida_hexrays.IPROP_SPLIT4
|
|
into 4 bytes
|
|
|
|
ida_hexrays.IPROP_SPLIT8
|
|
into 8 bytes
|
|
|
|
ida_hexrays.IPROP_TAILCALL
|
|
tail call
|
|
|
|
ida_hexrays.IPROP_UNMERGED
|
|
'goto' instruction was transformed info 'call'
|
|
|
|
ida_hexrays.IPROP_UNPAIRED
|
|
instruction is a result of del_dest_pairs() transformation
|
|
|
|
ida_hexrays.IPROP_WAS_NORET
|
|
was noret icall
|
|
|
|
ida_hexrays.IPROP_WILDMATCH
|
|
match multiple insns
|
|
|
|
ida_hexrays.ITP_ARG1
|
|
, (64 entries are reserved for 64 call arguments)
|
|
|
|
ida_hexrays.ITP_ASM
|
|
__asm-line
|
|
|
|
ida_hexrays.ITP_BLOCK1
|
|
opening block comment. this comment is printed before the item (other comments are indented and printed after the item)
|
|
|
|
|
|
ida_hexrays.ITP_BLOCK2
|
|
closing block comment.
|
|
|
|
ida_hexrays.ITP_BRACE2
|
|
)
|
|
|
|
ida_hexrays.ITP_CASE
|
|
bit for switch cases
|
|
|
|
ida_hexrays.ITP_COLON
|
|
: (label)
|
|
|
|
ida_hexrays.ITP_CURLY1
|
|
{
|
|
|
|
ida_hexrays.ITP_CURLY2
|
|
}
|
|
|
|
ida_hexrays.ITP_DO
|
|
do-line
|
|
|
|
ida_hexrays.ITP_ELSE
|
|
else-line
|
|
|
|
ida_hexrays.ITP_EMPTY
|
|
nothing
|
|
|
|
ida_hexrays.ITP_SEMI
|
|
semicolon
|
|
|
|
ida_hexrays.ITP_SIGN
|
|
if this bit is set too, then we have a negative case value
|
|
|
|
ida_hexrays.ITP_TRY
|
|
C++ try statement.
|
|
|
|
ida_hexrays.LOCOPT_ALL
|
|
redo optimization for all blocks. if this bit is not set, only dirty blocks will be optimized
|
|
|
|
|
|
ida_hexrays.LOCOPT_REFINE
|
|
refine return type, ok to fail
|
|
|
|
ida_hexrays.LOCOPT_REFINE2
|
|
refine return type, try harder
|
|
|
|
ida_hexrays.LVINF_KEEP
|
|
preserve saved user settings regardless of vars for example, if a var loses all its user-defined attributes or even gets destroyed, keep its lvar_saved_info_t. this is used for ephemeral variables that get destroyed by macro recognition.
|
|
|
|
|
|
ida_hexrays.LVINF_NOMAP
|
|
forbid automatic mapping of the variable
|
|
|
|
ida_hexrays.LVINF_NOPTR
|
|
variable type should not be a pointer
|
|
|
|
ida_hexrays.LVINF_SPLIT
|
|
split allocation of a new variable. forces the decompiler to create a new variable at ll.defea
|
|
|
|
|
|
ida_hexrays.LVINF_UNUSED
|
|
unused argument, corresponds to CVAR_UNUSED
|
|
|
|
ida_hexrays.MBA2_ARGIDX_OK
|
|
may verify input argument list?
|
|
|
|
ida_hexrays.MBA2_ARGIDX_SORTED
|
|
args finally sorted according to ABI (e.g. reverse stkarg order in Borland)
|
|
|
|
|
|
ida_hexrays.MBA2_CODE16_BIT
|
|
the code16 bit got removed
|
|
|
|
ida_hexrays.MBA2_DONT_VERIFY
|
|
Do not verify microcode. This flag is recomended to be set only when debugging decompiler plugins
|
|
|
|
|
|
ida_hexrays.MBA2_HAS_OUTLINES
|
|
calls to outlined code have been inlined
|
|
|
|
ida_hexrays.MBA2_IS_CTR
|
|
is constructor?
|
|
|
|
ida_hexrays.MBA2_IS_DTR
|
|
is destructor?
|
|
|
|
ida_hexrays.MBA2_LVARNAMES_OK
|
|
may verify lvar_names?
|
|
|
|
ida_hexrays.MBA2_LVARS_RENAMED
|
|
accept empty names now?
|
|
|
|
ida_hexrays.MBA2_NO_DUP_CALLS
|
|
forbid multiple calls with the same ea
|
|
|
|
ida_hexrays.MBA2_NO_DUP_LVARS
|
|
forbid multiple lvars with the same ea
|
|
|
|
ida_hexrays.MBA2_NO_FRAME
|
|
do not use function frame info (only snippet mode)
|
|
|
|
ida_hexrays.MBA2_OVER_CHAINS
|
|
has overlapped chains?
|
|
|
|
ida_hexrays.MBA2_PROP_COMPLEX
|
|
allow propagation of more complex variable definitions
|
|
|
|
ida_hexrays.MBA2_STACK_RETVAL
|
|
the return value is on the stack
|
|
|
|
ida_hexrays.MBA2_UNDEF_RETVAR
|
|
return value is undefined
|
|
|
|
ida_hexrays.MBA2_VALRNG_DONE
|
|
calculated valranges?
|
|
|
|
ida_hexrays.MBA_ASRPROP
|
|
assertion have been propagated
|
|
|
|
ida_hexrays.MBA_ASRTOK
|
|
assertions have been generated
|
|
|
|
ida_hexrays.MBA_CALLS
|
|
callinfo has been built
|
|
|
|
ida_hexrays.MBA_CHVARS
|
|
can verify chain varnums
|
|
|
|
ida_hexrays.MBA_CMBBLK
|
|
request to combine blocks
|
|
|
|
ida_hexrays.MBA_CMNSTK
|
|
stkvars+stkargs should be considered as one area
|
|
|
|
ida_hexrays.MBA_COLGDL
|
|
display graph after each reduction
|
|
|
|
ida_hexrays.MBA_DELPAIRS
|
|
pairs have been deleted once
|
|
|
|
ida_hexrays.MBA_GLBOPT
|
|
microcode has been optimized globally
|
|
|
|
ida_hexrays.MBA_INSGDL
|
|
display instruction in graphs
|
|
|
|
ida_hexrays.MBA_LOADED
|
|
loaded gdl, no instructions (debugging)
|
|
|
|
ida_hexrays.MBA_LVARS0
|
|
lvar pre-allocation has been performed
|
|
|
|
ida_hexrays.MBA_LVARS1
|
|
lvar real allocation has been performed
|
|
|
|
ida_hexrays.MBA_NICE
|
|
apply transformations to c code
|
|
|
|
ida_hexrays.MBA_NOFUNC
|
|
function is not present, addresses might be wrong
|
|
|
|
ida_hexrays.MBA_NUMADDR
|
|
display definition addresses for numbers
|
|
|
|
ida_hexrays.MBA_PASSREGS
|
|
has mcallinfo_t::pass_regs
|
|
|
|
ida_hexrays.MBA_PATTERN
|
|
microcode pattern, callinfo is present
|
|
|
|
ida_hexrays.MBA_PRCDEFS
|
|
use precise defeas for chain-allocated lvars
|
|
|
|
ida_hexrays.MBA_PREOPT
|
|
preoptimization stage complete
|
|
|
|
ida_hexrays.MBA_REFINE
|
|
may refine return value size
|
|
|
|
ida_hexrays.MBA_RETFP
|
|
function returns floating point value
|
|
|
|
ida_hexrays.MBA_RETREF
|
|
return type has been refined
|
|
|
|
ida_hexrays.MBA_SAVRST
|
|
save-restore analysis has been performed
|
|
|
|
ida_hexrays.MBA_SHORT
|
|
use short display
|
|
|
|
ida_hexrays.MBA_SPLINFO
|
|
(final_type ? idb_spoiled : spoiled_regs) is valid
|
|
|
|
ida_hexrays.MBA_THUNK
|
|
thunk function
|
|
|
|
ida_hexrays.MBA_VALNUM
|
|
display value numbers
|
|
|
|
ida_hexrays.MBA_WINGR32
|
|
use wingraph32
|
|
|
|
ida_hexrays.MBL_BACKPROP
|
|
performed backprop_cc
|
|
|
|
ida_hexrays.MBL_CALL
|
|
call information has been built
|
|
|
|
ida_hexrays.MBL_COMB
|
|
needs "combine" pass
|
|
|
|
ida_hexrays.MBL_DEAD
|
|
needs "eliminate deads" pass
|
|
|
|
ida_hexrays.MBL_DMT64
|
|
needs "demote 64bits"
|
|
|
|
ida_hexrays.MBL_DSLOT
|
|
block for delay slot
|
|
|
|
ida_hexrays.MBL_EXTFRAME
|
|
an inlined block with an external frame
|
|
|
|
ida_hexrays.MBL_FAKE
|
|
fake block
|
|
|
|
ida_hexrays.MBL_GOTO
|
|
this block is a goto target
|
|
|
|
ida_hexrays.MBL_INCONST
|
|
inconsistent lists: we are building them
|
|
|
|
ida_hexrays.MBL_INLINED
|
|
block was inlined, not originally part of mbr
|
|
|
|
ida_hexrays.MBL_KEEP
|
|
do not remove even if unreachable
|
|
|
|
ida_hexrays.MBL_LIST
|
|
use/def lists are ready (not dirty)
|
|
|
|
ida_hexrays.MBL_NONFAKE
|
|
regular block
|
|
|
|
ida_hexrays.MBL_NORET
|
|
dead end block: doesn't return execution control
|
|
|
|
ida_hexrays.MBL_PRIV
|
|
private block - no instructions except the specified are accepted (used in patterns)
|
|
|
|
|
|
ida_hexrays.MBL_PROP
|
|
needs 'propagation' pass
|
|
|
|
ida_hexrays.MBL_PUSH
|
|
needs "convert push/pop instructions"
|
|
|
|
ida_hexrays.MBL_TCAL
|
|
aritifical call block for tail calls
|
|
|
|
ida_hexrays.MBL_VALRANGES
|
|
should optimize using value ranges
|
|
|
|
ida_hexrays.MERR_BADARCH
|
|
current architecture is not supported
|
|
|
|
ida_hexrays.MERR_BADBLK
|
|
bad block found
|
|
|
|
ida_hexrays.MERR_BADCALL
|
|
could not determine call arguments
|
|
|
|
ida_hexrays.MERR_BADFRAME
|
|
function frame is wrong
|
|
|
|
ida_hexrays.MERR_BADIDB
|
|
inconsistent database information
|
|
|
|
ida_hexrays.MERR_BADRANGES
|
|
bad input ranges
|
|
|
|
ida_hexrays.MERR_BADSP
|
|
positive sp value has been found
|
|
|
|
ida_hexrays.MERR_BITNESS
|
|
16-bit functions cannot be decompiled
|
|
|
|
ida_hexrays.MERR_BLOCK
|
|
no error, switch to new block
|
|
|
|
ida_hexrays.MERR_BUSY
|
|
already decompiling a function
|
|
|
|
ida_hexrays.MERR_CANCELED
|
|
decompilation has been cancelled
|
|
|
|
ida_hexrays.MERR_CLOUD
|
|
cloud: s
|
|
|
|
ida_hexrays.MERR_COMPLEX
|
|
too complex function
|
|
|
|
ida_hexrays.MERR_DSLOT
|
|
bad instruction in the delay slot
|
|
|
|
ida_hexrays.MERR_EXCEPTION
|
|
exception analysis failed
|
|
|
|
ida_hexrays.MERR_EXTERN
|
|
special segments cannot be decompiled
|
|
|
|
ida_hexrays.MERR_FARPTR
|
|
far memory model is supported only for pc
|
|
|
|
ida_hexrays.MERR_FUNCSIZE
|
|
too big function
|
|
|
|
ida_hexrays.MERR_HUGESTACK
|
|
stack frame is too big
|
|
|
|
ida_hexrays.MERR_INSN
|
|
cannot convert to microcode
|
|
|
|
ida_hexrays.MERR_INTERR
|
|
internal error
|
|
|
|
ida_hexrays.MERR_LICENSE
|
|
no license available
|
|
|
|
ida_hexrays.MERR_LOOP
|
|
internal code: redo last loop (never reported)
|
|
|
|
ida_hexrays.MERR_LVARS
|
|
local variable allocation failed
|
|
|
|
ida_hexrays.MERR_MEM
|
|
not enough memory
|
|
|
|
ida_hexrays.MERR_OK
|
|
ok
|
|
|
|
ida_hexrays.MERR_ONLY32
|
|
only 32-bit functions can be decompiled for the current database
|
|
|
|
ida_hexrays.MERR_ONLY64
|
|
only 64-bit functions can be decompiled for the current database
|
|
|
|
ida_hexrays.MERR_OVERLAP
|
|
variables would overlap: s
|
|
|
|
ida_hexrays.MERR_PARTINIT
|
|
partially initialized variable s
|
|
|
|
ida_hexrays.MERR_PROLOG
|
|
prolog analysis failed
|
|
|
|
ida_hexrays.MERR_RECDEPTH
|
|
max recursion depth reached during lvar allocation
|
|
|
|
ida_hexrays.MERR_REDO
|
|
redecompilation has been requested
|
|
|
|
ida_hexrays.MERR_SIZEOF
|
|
wrong basic type sizes in compiler settings
|
|
|
|
ida_hexrays.MERR_STOP
|
|
no error, stop the analysis
|
|
|
|
ida_hexrays.MERR_SWITCH
|
|
wrong switch idiom
|
|
|
|
ida_hexrays.MERR_UNKTYPE
|
|
undefined type s (currently unused error code)
|
|
|
|
ida_hexrays.MLI_CLR_FLAGS
|
|
clear LVINF_... bits
|
|
|
|
ida_hexrays.MLI_CMT
|
|
apply lvar comment
|
|
|
|
ida_hexrays.MLI_NAME
|
|
apply lvar name
|
|
|
|
ida_hexrays.MLI_SET_FLAGS
|
|
set LVINF_... bits
|
|
|
|
ida_hexrays.MLI_TYPE
|
|
apply lvar type
|
|
|
|
ida_hexrays.MMAT_CALLS
|
|
detected call arguments. see also hxe_calls_done
|
|
|
|
ida_hexrays.MMAT_GENERATED
|
|
generated microcode
|
|
|
|
ida_hexrays.MMAT_GLBOPT1
|
|
performed the first pass of global optimization
|
|
|
|
ida_hexrays.MMAT_GLBOPT2
|
|
most global optimization passes are done
|
|
|
|
ida_hexrays.MMAT_GLBOPT3
|
|
completed all global optimization. microcode is fixed now.
|
|
|
|
ida_hexrays.MMAT_LOCOPT
|
|
local optimization of each basic block is complete. control flow graph is ready too.
|
|
|
|
|
|
ida_hexrays.MMAT_LVARS
|
|
allocated local variables
|
|
|
|
ida_hexrays.MMAT_PREOPTIMIZED
|
|
preoptimized pass is complete
|
|
|
|
ida_hexrays.MMAT_ZERO
|
|
microcode does not exist
|
|
|
|
ida_hexrays.MMIDX_ARGS
|
|
stack: regular stack arguments
|
|
|
|
ida_hexrays.MMIDX_GLBHIGH
|
|
global memory: high part
|
|
|
|
ida_hexrays.MMIDX_GLBLOW
|
|
global memory: low part
|
|
|
|
ida_hexrays.MMIDX_LVARS
|
|
stack: local variables
|
|
|
|
ida_hexrays.MMIDX_RETADDR
|
|
stack: return address
|
|
|
|
ida_hexrays.MMIDX_SHADOW
|
|
stack: shadow arguments
|
|
|
|
ida_hexrays.NALT_VD
|
|
this index is not used by ida
|
|
|
|
ida_hexrays.NF_BINVDONE
|
|
temporary internal bit: inverting bits is done
|
|
|
|
ida_hexrays.NF_BITNOT
|
|
The user asked to invert bits of the constant.
|
|
|
|
ida_hexrays.NF_FIXED
|
|
number format has been defined by the user
|
|
|
|
ida_hexrays.NF_NEGATE
|
|
The user asked to negate the constant.
|
|
|
|
ida_hexrays.NF_NEGDONE
|
|
temporary internal bit: negation has been performed
|
|
|
|
ida_hexrays.NF_VALID
|
|
internal bit: stroff or enum is valid for enums: this bit is set immediately for stroffs: this bit is set at the end of decompilation
|
|
|
|
|
|
ida_hexrays.NOSIZE
|
|
wrong or unexisting operand size
|
|
|
|
ida_hexrays.NO_CURLY_BRACES
|
|
don't print curly braces
|
|
|
|
ida_hexrays.NO_SIDEFF
|
|
change operand size but ignore side effects if you decide to keep the changed operand, handle_new_size() must be called
|
|
|
|
|
|
ida_hexrays.ONLY_SIDEFF
|
|
only handle side effects
|
|
|
|
ida_hexrays.OPF_NEW_WINDOW
|
|
open new window
|
|
|
|
ida_hexrays.OPF_NO_WAIT
|
|
do not display waitbox if decompilation happens
|
|
|
|
ida_hexrays.OPF_REUSE
|
|
reuse existing window
|
|
|
|
ida_hexrays.OPF_REUSE_ACTIVE
|
|
reuse existing window, only if the currently active widget is a pseudocode view
|
|
|
|
|
|
ida_hexrays.OPROP_CCFLAGS
|
|
mop_n: a pc-relative value mop_a: an address obtained from a relocation else: value of a condition code register (like mr_cc)
|
|
|
|
|
|
ida_hexrays.OPROP_FLOAT
|
|
possibly floating value
|
|
|
|
ida_hexrays.OPROP_IMPDONE
|
|
imported operand (a pointer) has been dereferenced
|
|
|
|
ida_hexrays.OPROP_LOWADDR
|
|
a low address offset
|
|
|
|
ida_hexrays.OPROP_UDEFVAL
|
|
uses undefined value
|
|
|
|
ida_hexrays.OPROP_UDT
|
|
a struct or union
|
|
|
|
ida_hexrays.OPTI_ADDREXPRS
|
|
optimize all address expressions (&x+N; &x-&y)
|
|
|
|
ida_hexrays.OPTI_COMBINSNS
|
|
may combine insns (only for optimize_insn)
|
|
|
|
ida_hexrays.OPTI_MINSTKREF
|
|
may update minstkref
|
|
|
|
ida_hexrays.OPTI_NO_LDXOPT
|
|
the function is called after the propagation attempt, we do not optimize low/high(ldx) in this case
|
|
|
|
|
|
ida_hexrays.OPTI_NO_VALRNG
|
|
forbid using valranges
|
|
|
|
ida_hexrays.RETRIEVE_ALWAYS
|
|
Retrieve comment even if it has been used.
|
|
|
|
ida_hexrays.RETRIEVE_ONCE
|
|
Retrieve comment if it has not been used yet.
|
|
|
|
ida_hexrays.ROLE_3WAYCMP0
|
|
3-way compare helper, returns -1/0/1
|
|
|
|
ida_hexrays.ROLE_3WAYCMP1
|
|
3-way compare helper, returns 0/1/2
|
|
|
|
ida_hexrays.ROLE_ABS
|
|
integer absolute value
|
|
|
|
ida_hexrays.ROLE_ALLOCA
|
|
alloca() function
|
|
|
|
ida_hexrays.ROLE_BITTEST
|
|
[lock] bt
|
|
|
|
ida_hexrays.ROLE_BITTESTANDCOMPLEMENT
|
|
[lock] btc
|
|
|
|
ida_hexrays.ROLE_BITTESTANDRESET
|
|
[lock] btr
|
|
|
|
ida_hexrays.ROLE_BITTESTANDSET
|
|
[lock] bts
|
|
|
|
ida_hexrays.ROLE_BSWAP
|
|
bswap() function (any size)
|
|
|
|
ida_hexrays.ROLE_BUG
|
|
BUG() helper macro: never returns, causes exception.
|
|
|
|
ida_hexrays.ROLE_CFSUB3
|
|
carry flag after subtract with carry
|
|
|
|
ida_hexrays.ROLE_CONTAINING_RECORD
|
|
CONTAINING_RECORD() macro.
|
|
|
|
ida_hexrays.ROLE_EMPTY
|
|
empty, does not do anything (maybe spoils regs)
|
|
|
|
ida_hexrays.ROLE_FASTFAIL
|
|
__fastfail()
|
|
|
|
ida_hexrays.ROLE_IS_MUL_OK
|
|
is_mul_ok
|
|
|
|
ida_hexrays.ROLE_MEMCPY
|
|
memcpy(void *dst, const void *src, size_t count);
|
|
|
|
ida_hexrays.ROLE_MEMSET
|
|
memset(void *dst, uchar value, size_t count);
|
|
|
|
ida_hexrays.ROLE_MEMSET32
|
|
memset32(void *dst, uint32 value, size_t count);
|
|
|
|
ida_hexrays.ROLE_MEMSET64
|
|
memset64(void *dst, uint64 value, size_t count);
|
|
|
|
ida_hexrays.ROLE_OFSUB3
|
|
overflow flag after subtract with carry
|
|
|
|
ida_hexrays.ROLE_PRESENT
|
|
present() function (used in patterns)
|
|
|
|
ida_hexrays.ROLE_READFLAGS
|
|
__readeflags, __readcallersflags
|
|
|
|
ida_hexrays.ROLE_ROL
|
|
rotate left
|
|
|
|
ida_hexrays.ROLE_ROR
|
|
rotate right
|
|
|
|
ida_hexrays.ROLE_SATURATED_MUL
|
|
saturated_mul
|
|
|
|
ida_hexrays.ROLE_SSE_CMP4
|
|
e.g. _mm_cmpgt_ss
|
|
|
|
ida_hexrays.ROLE_SSE_CMP8
|
|
e.g. _mm_cmpgt_sd
|
|
|
|
ida_hexrays.ROLE_STRCAT
|
|
strcat(char *dst, const char *src);
|
|
|
|
ida_hexrays.ROLE_STRCPY
|
|
strcpy(char *dst, const char *src);
|
|
|
|
ida_hexrays.ROLE_STRLEN
|
|
strlen(const char *src);
|
|
|
|
ida_hexrays.ROLE_TAIL
|
|
char *tail(const char *str);
|
|
|
|
ida_hexrays.ROLE_UNK
|
|
unknown function role
|
|
|
|
ida_hexrays.ROLE_VA_ARG
|
|
va_arg() macro
|
|
|
|
ida_hexrays.ROLE_VA_COPY
|
|
va_copy() function
|
|
|
|
ida_hexrays.ROLE_VA_END
|
|
va_end() function
|
|
|
|
ida_hexrays.ROLE_VA_START
|
|
va_start() function
|
|
|
|
ida_hexrays.ROLE_WCSCAT
|
|
wchar_t *wcscat(wchar_t *dst, const wchar_t *src)
|
|
|
|
ida_hexrays.ROLE_WCSCPY
|
|
wchar_t *wcscpy(wchar_t *dst, const wchar_t *src);
|
|
|
|
ida_hexrays.ROLE_WCSLEN
|
|
size_t wcslen(const wchar_t *s)
|
|
|
|
ida_hexrays.ROLE_WMEMCPY
|
|
wchar_t *wmemcpy(wchar_t *dst, const wchar_t *src, size_t n)
|
|
|
|
ida_hexrays.ROLE_WMEMSET
|
|
wchar_t *wmemset(wchar_t *dst, wchar_t wc, size_t n)
|
|
|
|
ida_hexrays.SHINS_LDXEA
|
|
display address of ldx expressions (not used)
|
|
|
|
ida_hexrays.SHINS_NUMADDR
|
|
display definition addresses for numbers
|
|
|
|
ida_hexrays.SHINS_SHORT
|
|
do not display use-def chains and other attrs
|
|
|
|
ida_hexrays.SHINS_VALNUM
|
|
display value numbers
|
|
|
|
ida_hexrays.ULV_PRECISE_DEFEA
|
|
Use precise defea's for lvar locations.
|
|
|
|
ida_hexrays.USE_CURLY_BRACES
|
|
print curly braces without any checks
|
|
|
|
ida_hexrays.USE_KEYBOARD
|
|
Keyboard.
|
|
|
|
ida_hexrays.USE_MOUSE
|
|
Mouse.
|
|
|
|
ida_hexrays.VDI_EXPR
|
|
c-tree item
|
|
|
|
ida_hexrays.VDI_FUNC
|
|
the function itself (the very first line with the function prototype)
|
|
|
|
ida_hexrays.VDI_LVAR
|
|
declaration of local variable
|
|
|
|
ida_hexrays.VDI_NONE
|
|
undefined
|
|
|
|
ida_hexrays.VDI_TAIL
|
|
cursor is at (beyond) the line end (commentable line)
|
|
|
|
ida_hexrays.VDRUN_APPEND
|
|
Create a new file or append to existing file.
|
|
|
|
ida_hexrays.VDRUN_CMDLINE
|
|
Called from ida's command line.
|
|
|
|
ida_hexrays.VDRUN_LUMINA
|
|
Use lumina server.
|
|
|
|
ida_hexrays.VDRUN_MAYSTOP
|
|
The user can cancel decompilation.
|
|
|
|
ida_hexrays.VDRUN_NEWFILE
|
|
Create a new file or overwrite existing file.
|
|
|
|
ida_hexrays.VDRUN_ONLYNEW
|
|
Fail if output file already exists.
|
|
|
|
ida_hexrays.VDRUN_SENDIDB
|
|
Send problematic databases to hex-rays.com.
|
|
|
|
ida_hexrays.VDRUN_SILENT
|
|
Silent decompilation.
|
|
|
|
ida_hexrays.VDRUN_STATS
|
|
Print statistics into vd_stats.txt.
|
|
|
|
ida_hexrays.VDUI_VALID
|
|
is valid?
|
|
|
|
ida_hexrays.VDUI_VISIBLE
|
|
is visible?
|
|
|
|
ida_hexrays.VR_AT_END
|
|
get value ranges after the instruction or at the block end, just after the last instruction (if M is nullptr)
|
|
|
|
|
|
ida_hexrays.VR_AT_START
|
|
get value ranges before the instruction or at the block start (if M is nullptr)
|
|
|
|
|
|
ida_hexrays.VR_EXACT
|
|
find exact match. if not set, the returned valrng size will be >= vivl.size
|
|
|
|
|
|
ida_hexrays.WARN_ADDR_OUTARGS
|
|
6 cannot handle address arithmetics in outgoing argument area of stack frame - unused
|
|
|
|
ida_hexrays.WARN_ARRAY_INARG
|
|
21 array has been used for an input argument
|
|
|
|
ida_hexrays.WARN_BAD_CALL_SP
|
|
38 bad sp value at call
|
|
|
|
ida_hexrays.WARN_BAD_FIELD_TYPE
|
|
23 incorrect structure member type for s::s, ignored
|
|
|
|
ida_hexrays.WARN_BAD_INSN
|
|
49 bad instruction
|
|
|
|
ida_hexrays.WARN_BAD_MAPDST
|
|
48 too short map destination 's' for variable 's'
|
|
|
|
ida_hexrays.WARN_BAD_PURGED
|
|
12 inconsistent function type and number of purged bytes
|
|
|
|
ida_hexrays.WARN_BAD_RETVAR
|
|
25 wrong return variable
|
|
|
|
ida_hexrays.WARN_BAD_SHADOW
|
|
45 ignored the value written to the shadow area of the succeeding call
|
|
|
|
ida_hexrays.WARN_BAD_SP
|
|
40 positive sp value a has been found
|
|
|
|
ida_hexrays.WARN_BAD_STD_TYPE
|
|
37 corrupted or unexisting local type 's'
|
|
|
|
ida_hexrays.WARN_BAD_STKPNT
|
|
41 wrong sp change point
|
|
|
|
ida_hexrays.WARN_BAD_STROFF
|
|
33 user specified stroff has not been processed: s
|
|
|
|
ida_hexrays.WARN_BAD_VALRNG
|
|
44 values range analysis failed
|
|
|
|
ida_hexrays.WARN_BAD_VARSIZE
|
|
34 inconsistent variable size for 's'
|
|
|
|
ida_hexrays.WARN_CBUILD_LOOPS
|
|
13 too many cbuild loops
|
|
|
|
ida_hexrays.WARN_CR_BADOFF
|
|
32 CONTAINING_RECORD: too small offset d for struct 's'
|
|
|
|
ida_hexrays.WARN_CR_NOFIELD
|
|
31 CONTAINING_RECORD: no field 's' in struct 's' at d
|
|
|
|
ida_hexrays.WARN_DEP_UNK_CALLS
|
|
7 found interdependent unknown calls
|
|
|
|
ida_hexrays.WARN_EXP_LINVAR
|
|
10 failed to expand a linear variable
|
|
|
|
ida_hexrays.WARN_FIXED_INSN
|
|
29 fixed broken insn
|
|
|
|
ida_hexrays.WARN_FRAG_LVAR
|
|
26 fragmented variable at s may be wrong
|
|
|
|
ida_hexrays.WARN_GUESSED_TYPE
|
|
9 using guessed type s;
|
|
|
|
ida_hexrays.WARN_HUGE_STKOFF
|
|
27 exceedingly huge offset into the stack frame
|
|
|
|
ida_hexrays.WARN_ILL_ELLIPSIS
|
|
8 erroneously detected ellipsis type has been ignored
|
|
|
|
ida_hexrays.WARN_ILL_FPU_STACK
|
|
18 inconsistent fpu stack
|
|
|
|
ida_hexrays.WARN_ILL_FUNCTYPE
|
|
2 invalid function type 's' has been ignored
|
|
|
|
ida_hexrays.WARN_ILL_PURGED
|
|
1 odd caller purged bytes d, correcting
|
|
|
|
ida_hexrays.WARN_JUMPOUT
|
|
43 control flows out of bounds
|
|
|
|
ida_hexrays.WARN_MAX
|
|
may be used in notes as a placeholder when the warning id is not available
|
|
|
|
|
|
ida_hexrays.WARN_MAX_ARGS
|
|
22 too many input arguments, some ignored
|
|
|
|
ida_hexrays.WARN_MISSED_SWITCH
|
|
39 wrong markup of switch jump, skipped it
|
|
|
|
ida_hexrays.WARN_MUST_RET_FP
|
|
17 function return type is incorrect (must be floating point)
|
|
|
|
ida_hexrays.WARN_NO_SAVE_REST
|
|
14 could not find valid save-restore pair for s
|
|
|
|
ida_hexrays.WARN_ODD_ABI
|
|
50 encountered odd instruction for the current ABI
|
|
|
|
ida_hexrays.WARN_ODD_ADDR_USE
|
|
16 odd use of a variable address
|
|
|
|
ida_hexrays.WARN_ODD_INPUT_REG
|
|
15 odd input register s
|
|
|
|
ida_hexrays.WARN_OPT_USELESS_JCND
|
|
54 simplified comparisons for 's': s became s
|
|
|
|
ida_hexrays.WARN_OPT_VALRNG
|
|
46 conditional instruction was optimized away because s
|
|
|
|
ida_hexrays.WARN_OPT_VALRNG2
|
|
52 mask 0xX is shortened because s <= 0xX"
|
|
|
|
ida_hexrays.WARN_OPT_VALRNG3
|
|
53 masking with 0XX was optimized away because s <= 0xX
|
|
|
|
ida_hexrays.WARN_RET_LOCREF
|
|
47 returning address of temporary local variable 's'
|
|
|
|
ida_hexrays.WARN_SELFREF_PROP
|
|
19 self-referencing variable has been detected
|
|
|
|
ida_hexrays.WARN_SUBFRAME_OVERFLOW
|
|
55 call arguments overflow the function chunk frame
|
|
|
|
ida_hexrays.WARN_UNALIGNED_ARG
|
|
36 unaligned function argument 's'
|
|
|
|
ida_hexrays.WARN_UNBALANCED_STACK
|
|
51 unbalanced stack, ignored a potential tail call
|
|
|
|
ida_hexrays.WARN_UNDEF_LVAR
|
|
42 variable 's' is possibly undefined
|
|
|
|
ida_hexrays.WARN_UNINITED_REG
|
|
28 reference to an uninitialized register has been removed: s
|
|
|
|
ida_hexrays.WARN_UNSUPP_REG
|
|
35 unsupported processor register 's'
|
|
|
|
ida_hexrays.WARN_VARARG_MANY
|
|
5 too many varargs, some ignored
|
|
|
|
ida_hexrays.WARN_VARARG_NOSTK
|
|
4 call vararg without local stack
|
|
|
|
ida_hexrays.WARN_VARARG_REGS
|
|
0 cannot handle register arguments in vararg function, discarded them
|
|
|
|
ida_hexrays.WARN_VARARG_TCAL
|
|
3 cannot handle tail call to vararg
|
|
|
|
ida_hexrays.WARN_WIDEN_CHAINS
|
|
11 failed to widen chains
|
|
|
|
ida_hexrays.WARN_WOULD_OVERLAP
|
|
20 variables would overlap: s
|
|
|
|
ida_hexrays.WARN_WRITE_CONST
|
|
24 write access to const memory at a has been detected
|
|
|
|
ida_hexrays.WARN_WRONG_VA_OFF
|
|
30 wrong offset of va_list variable
|
|
|
|
ida_hexrays.WITH_SIDEFF
|
|
change operand size and handle side effects
|
|
|
|
ida_hexrays.__cbhooks_t
|
|
|
|
ida_hexrays.__cbhooks_t.__init__(self, callback)
|
|
|
|
ida_hexrays.__cbhooks_t.close_pseudocode(self, *args)
|
|
Close pseudocode window.
|
|
|
|
@param f: pointer to window
|
|
@returns false if failed
|
|
|
|
ida_hexrays.__cbhooks_t.create_hint(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.curpos(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.double_click(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.func_printed(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.interr(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.keyboard(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.maturity(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.open_pseudocode(self, *args)
|
|
Open pseudocode window. The specified function is decompiled and the pseudocode window is opened.
|
|
|
|
@param ea: function to decompile
|
|
@param flags: a combination of OPF_ flags
|
|
@returns false if failed
|
|
|
|
ida_hexrays.__cbhooks_t.populating_popup(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.print_func(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.refresh_pseudocode(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.right_click(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.switch_pseudocode(self, *args)
|
|
|
|
ida_hexrays.__cbhooks_t.text_ready(self, *args)
|
|
|
|
ida_hexrays._call_with_transferrable_ownership(fun, *args)
|
|
|
|
ida_hexrays._kludge_force_declare_TPopupMenu(arg1: "TPopupMenu const *") -> None
|
|
|
|
ida_hexrays._ll_call_helper(*args) -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_create_helper(*args) -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_dereference(e: "cexpr_t", ptrsize: int, is_flt: bool = False) -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_lnot(e: "cexpr_t") -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_make_num(*args) -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_make_ref(e: "cexpr_t") -> "cexpr_t *"
|
|
|
|
ida_hexrays._ll_new_block() -> "cinsn_t *"
|
|
|
|
ida_hexrays._map_as_dict(maptype, name, keytype, valuetype)
|
|
|
|
ida_hexrays._map_as_dict._map___contains__(self, key)
|
|
Returns true if the specified key exists in the .
|
|
|
|
ida_hexrays._map_as_dict._map___delitem__(self, key)
|
|
Removes the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map___getitem__(self, key)
|
|
Returns the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map___iter__(self)
|
|
Iterate over dictionary keys.
|
|
|
|
ida_hexrays._map_as_dict._map___setitem__(self, key, value)
|
|
Returns the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map_clear(self)
|
|
|
|
ida_hexrays._map_as_dict._map_copy(self)
|
|
|
|
ida_hexrays._map_as_dict._map_get(self, key, default = None)
|
|
|
|
ida_hexrays._map_as_dict._map_has_key(self, key)
|
|
|
|
ida_hexrays._map_as_dict._map_items(self)
|
|
|
|
ida_hexrays._map_as_dict._map_iteritems(self)
|
|
|
|
ida_hexrays._map_as_dict._map_iterkeys(self)
|
|
|
|
ida_hexrays._map_as_dict._map_itervalues(self)
|
|
|
|
ida_hexrays._map_as_dict._map_keys(self)
|
|
|
|
ida_hexrays._map_as_dict._map_pop(self, key)
|
|
Sets the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map_popitem(self)
|
|
Sets the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map_setdefault(self, key, default = None)
|
|
Sets the value associated with the provided key.
|
|
|
|
ida_hexrays._map_as_dict._map_values(self)
|
|
|
|
ida_hexrays.accepts_small_udts(op: "ctype_t") -> bool
|
|
Is the operator allowed on small structure or union?
|
|
|
|
ida_hexrays.accepts_udts(op: "ctype_t") -> bool
|
|
|
|
ida_hexrays.arglocs_overlap(loc1: "vdloc_t", w1: "size_t", loc2: "vdloc_t", w2: "size_t") -> bool
|
|
Do two arglocs overlap?
|
|
|
|
ida_hexrays.array_of_bitsets
|
|
|
|
ida_hexrays.array_of_bitsets.__eq__(self, r: "array_of_bitsets") -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.__getitem__(self, i: "size_t") -> "bitset_t const &"
|
|
|
|
ida_hexrays.array_of_bitsets.__init__(self, *args)
|
|
|
|
ida_hexrays.array_of_bitsets.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_bitsets.__ne__(self, r: "array_of_bitsets") -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.__setitem__(self, i: "size_t", v: "bitset_t") -> None
|
|
|
|
ida_hexrays.array_of_bitsets._del(self, x: "bitset_t") -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.add_unique(self, x: "bitset_t") -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.append(self, x: "bitset_t") -> None
|
|
|
|
ida_hexrays.array_of_bitsets.at(self, _idx: "size_t") -> "bitset_t const &"
|
|
|
|
ida_hexrays.array_of_bitsets.begin(self, *args) -> "qvector< bitset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_bitsets.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_bitsets.clear(self) -> None
|
|
|
|
ida_hexrays.array_of_bitsets.empty(self) -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.end(self, *args) -> "qvector< bitset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_bitsets.erase(self, *args) -> "qvector< bitset_t >::iterator"
|
|
|
|
ida_hexrays.array_of_bitsets.extend(self, x: "array_of_bitsets") -> None
|
|
|
|
ida_hexrays.array_of_bitsets.extract(self) -> "bitset_t *"
|
|
|
|
ida_hexrays.array_of_bitsets.find(self, *args) -> "qvector< bitset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_bitsets.grow(self, *args) -> None
|
|
|
|
ida_hexrays.array_of_bitsets.has(self, x: "bitset_t") -> bool
|
|
|
|
ida_hexrays.array_of_bitsets.inject(self, s: "bitset_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.array_of_bitsets.insert(self, it: "bitset_t", x: "bitset_t") -> "qvector< bitset_t >::iterator"
|
|
|
|
ida_hexrays.array_of_bitsets.pop_back(self) -> None
|
|
|
|
ida_hexrays.array_of_bitsets.push_back(self, *args) -> "bitset_t &"
|
|
|
|
ida_hexrays.array_of_bitsets.qclear(self) -> None
|
|
|
|
ida_hexrays.array_of_bitsets.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.array_of_bitsets.resize(self, *args) -> None
|
|
|
|
ida_hexrays.array_of_bitsets.size(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_bitsets.swap(self, r: "array_of_bitsets") -> None
|
|
|
|
ida_hexrays.array_of_bitsets.truncate(self) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets
|
|
|
|
ida_hexrays.array_of_ivlsets.__eq__(self, r: "array_of_ivlsets") -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.__getitem__(self, i: "size_t") -> "ivlset_t const &"
|
|
|
|
ida_hexrays.array_of_ivlsets.__init__(self, *args)
|
|
|
|
ida_hexrays.array_of_ivlsets.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_ivlsets.__ne__(self, r: "array_of_ivlsets") -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.__setitem__(self, i: "size_t", v: "ivlset_t") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets._del(self, x: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.add_unique(self, x: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.append(self, x: "ivlset_t") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.at(self, _idx: "size_t") -> "ivlset_t const &"
|
|
|
|
ida_hexrays.array_of_ivlsets.begin(self, *args) -> "qvector< ivlset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_ivlsets.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_ivlsets.clear(self) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.empty(self) -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.end(self, *args) -> "qvector< ivlset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_ivlsets.erase(self, *args) -> "qvector< ivlset_t >::iterator"
|
|
|
|
ida_hexrays.array_of_ivlsets.extend(self, x: "array_of_ivlsets") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.extract(self) -> "ivlset_t *"
|
|
|
|
ida_hexrays.array_of_ivlsets.find(self, *args) -> "qvector< ivlset_t >::const_iterator"
|
|
|
|
ida_hexrays.array_of_ivlsets.grow(self, *args) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.has(self, x: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.array_of_ivlsets.inject(self, s: "ivlset_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.insert(self, it: "ivlset_t", x: "ivlset_t") -> "qvector< ivlset_t >::iterator"
|
|
|
|
ida_hexrays.array_of_ivlsets.pop_back(self) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.push_back(self, *args) -> "ivlset_t &"
|
|
|
|
ida_hexrays.array_of_ivlsets.qclear(self) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.resize(self, *args) -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.size(self) -> "size_t"
|
|
|
|
ida_hexrays.array_of_ivlsets.swap(self, r: "array_of_ivlsets") -> None
|
|
|
|
ida_hexrays.array_of_ivlsets.truncate(self) -> None
|
|
|
|
ida_hexrays.array_of_node_bitset_t
|
|
|
|
ida_hexrays.array_of_node_bitset_t.__init__(self)
|
|
|
|
ida_hexrays.asgop(cop: "ctype_t") -> "ctype_t"
|
|
Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd.
|
|
|
|
ida_hexrays.asgop_revert(cop: "ctype_t") -> "ctype_t"
|
|
Convert assignment operator into plain operator. For example, cot_asgadd returns cot_add
|
|
|
|
@returns cot_empty is the input operator is not an assignment operator.
|
|
|
|
ida_hexrays.bit_bound_t
|
|
|
|
ida_hexrays.bit_bound_t.__init__(self, n: int = 0, s: int = 0)
|
|
|
|
ida_hexrays.bitset_t
|
|
|
|
ida_hexrays.bitset_t.__eq__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.__ge__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.__gt__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.__init__(self, *args)
|
|
|
|
ida_hexrays.bitset_t.__iter__(self)
|
|
|
|
ida_hexrays.bitset_t.__le__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.__lt__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.__ne__(self, r: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.add(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. add(bit: int) -> bool
|
|
1. add(bit: int, width: int) -> bool
|
|
2. add(ml: const bitset_t &) -> bool
|
|
|
|
# 0: add(bit: int) -> bool
|
|
|
|
|
|
# 1: add(bit: int, width: int) -> bool
|
|
|
|
|
|
# 2: add(ml: const bitset_t &) -> bool
|
|
|
|
ida_hexrays.bitset_t.back(self) -> int
|
|
|
|
ida_hexrays.bitset_t.begin(self) -> "bitset_t::iterator"
|
|
|
|
ida_hexrays.bitset_t.clear(self) -> None
|
|
|
|
ida_hexrays.bitset_t.compare(self, r: "bitset_t") -> int
|
|
|
|
ida_hexrays.bitset_t.copy(self, m: "bitset_t") -> "bitset_t &"
|
|
|
|
ida_hexrays.bitset_t.count(self, *args) -> int
|
|
This function has the following signatures:
|
|
|
|
0. count() -> int
|
|
1. count(bit: int) -> int
|
|
|
|
# 0: count() -> int
|
|
|
|
|
|
# 1: count(bit: int) -> int
|
|
|
|
ida_hexrays.bitset_t.cut_at(self, maxbit: int) -> bool
|
|
|
|
ida_hexrays.bitset_t.dstr(self) -> str
|
|
|
|
ida_hexrays.bitset_t.empty(self) -> bool
|
|
|
|
ida_hexrays.bitset_t.end(self) -> "bitset_t::iterator"
|
|
|
|
ida_hexrays.bitset_t.fill_with_ones(self, maxbit: int) -> None
|
|
|
|
ida_hexrays.bitset_t.front(self) -> int
|
|
|
|
ida_hexrays.bitset_t.has(self, bit: int) -> bool
|
|
|
|
ida_hexrays.bitset_t.has_all(self, bit: int, width: int) -> bool
|
|
|
|
ida_hexrays.bitset_t.has_any(self, bit: int, width: int) -> bool
|
|
|
|
ida_hexrays.bitset_t.has_common(self, ml: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.inc(self, p: "iterator", n: int = 1) -> None
|
|
|
|
ida_hexrays.bitset_t.includes(self, ml: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.intersect(self, ml: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.is_subset_of(self, ml: "bitset_t") -> bool
|
|
|
|
ida_hexrays.bitset_t.itat(self, n: int) -> "bitset_t::iterator"
|
|
|
|
ida_hexrays.bitset_t.itv(self, it: "iterator") -> int
|
|
|
|
ida_hexrays.bitset_t.last(self) -> int
|
|
|
|
ida_hexrays.bitset_t.shift_down(self, shift: int) -> None
|
|
|
|
ida_hexrays.bitset_t.sub(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. sub(bit: int) -> bool
|
|
1. sub(bit: int, width: int) -> bool
|
|
2. sub(ml: const bitset_t &) -> bool
|
|
|
|
# 0: sub(bit: int) -> bool
|
|
|
|
|
|
# 1: sub(bit: int, width: int) -> bool
|
|
|
|
|
|
# 2: sub(ml: const bitset_t &) -> bool
|
|
|
|
ida_hexrays.bitset_t.swap(self, r: "bitset_t") -> None
|
|
|
|
ida_hexrays.block_chains_begin(set: "block_chains_t") -> "block_chains_iterator_t"
|
|
Get iterator pointing to the beginning of block_chains_t.
|
|
|
|
ida_hexrays.block_chains_clear(set: "block_chains_t") -> None
|
|
Clear block_chains_t.
|
|
|
|
ida_hexrays.block_chains_end(set: "block_chains_t") -> "block_chains_iterator_t"
|
|
Get iterator pointing to the end of block_chains_t.
|
|
|
|
ida_hexrays.block_chains_erase(set: "block_chains_t", p: "block_chains_iterator_t") -> None
|
|
Erase current element from block_chains_t.
|
|
|
|
ida_hexrays.block_chains_find(set: "block_chains_t", val: "chain_t") -> "block_chains_iterator_t"
|
|
Find the specified key in set block_chains_t.
|
|
|
|
ida_hexrays.block_chains_free(set: "block_chains_t") -> None
|
|
Delete block_chains_t instance.
|
|
|
|
ida_hexrays.block_chains_get(p: "block_chains_iterator_t") -> "chain_t &"
|
|
Get reference to the current set value.
|
|
|
|
ida_hexrays.block_chains_insert(set: "block_chains_t", val: "chain_t") -> "block_chains_iterator_t"
|
|
Insert new (chain_t) into set block_chains_t.
|
|
|
|
ida_hexrays.block_chains_iterator_t
|
|
|
|
ida_hexrays.block_chains_iterator_t.__eq__(self, p: "block_chains_iterator_t") -> bool
|
|
|
|
ida_hexrays.block_chains_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.block_chains_iterator_t.__ne__(self, p: "block_chains_iterator_t") -> bool
|
|
|
|
ida_hexrays.block_chains_new() -> "block_chains_t *"
|
|
Create a new block_chains_t instance.
|
|
|
|
ida_hexrays.block_chains_next(p: "block_chains_iterator_t") -> "block_chains_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.block_chains_prev(p: "block_chains_iterator_t") -> "block_chains_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.block_chains_size(set: "block_chains_t") -> "size_t"
|
|
Get size of block_chains_t.
|
|
|
|
ida_hexrays.block_chains_t
|
|
|
|
ida_hexrays.block_chains_t.__init__(self)
|
|
|
|
ida_hexrays.block_chains_t._print(self) -> None
|
|
|
|
ida_hexrays.block_chains_t.dstr(self) -> str
|
|
|
|
ida_hexrays.block_chains_t.get_chain(self, *args) -> "chain_t *"
|
|
This function has the following signatures:
|
|
|
|
0. get_chain(k: const voff_t &, width: int=1) -> const chain_t *
|
|
1. get_chain(k: const voff_t &, width: int=1) -> chain_t *
|
|
2. get_chain(ch: const chain_t &) -> const chain_t *
|
|
3. get_chain(ch: const chain_t &) -> chain_t *
|
|
|
|
# 0: get_chain(k: const voff_t &, width: int=1) -> const chain_t *
|
|
|
|
Get chain for the specified value offset.
|
|
|
|
|
|
# 1: get_chain(k: const voff_t &, width: int=1) -> chain_t *
|
|
|
|
|
|
# 2: get_chain(ch: const chain_t &) -> const chain_t *
|
|
|
|
Get chain similar to the specified chain
|
|
|
|
|
|
# 3: get_chain(ch: const chain_t &) -> chain_t *
|
|
|
|
ida_hexrays.block_chains_t.get_reg_chain(self, reg: "mreg_t", width: int = 1) -> "chain_t *"
|
|
Get chain for the specified register
|
|
|
|
@param reg: register number
|
|
@param width: size of register in bytes
|
|
|
|
ida_hexrays.block_chains_t.get_stk_chain(self, off: int, width: int = 1) -> "chain_t *"
|
|
Get chain for the specified stack offset
|
|
|
|
@param off: stack offset
|
|
@param width: size of stack value in bytes
|
|
|
|
ida_hexrays.block_chains_vec_t
|
|
|
|
ida_hexrays.block_chains_vec_t.__getitem__(self, i: "size_t") -> "block_chains_t const &"
|
|
|
|
ida_hexrays.block_chains_vec_t.__init__(self, *args)
|
|
|
|
ida_hexrays.block_chains_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.block_chains_vec_t.__setitem__(self, i: "size_t", v: "block_chains_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.append(self, x: "block_chains_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.at(self, _idx: "size_t") -> "block_chains_t const &"
|
|
|
|
ida_hexrays.block_chains_vec_t.begin(self, *args) -> "qvector< block_chains_t >::const_iterator"
|
|
|
|
ida_hexrays.block_chains_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.block_chains_vec_t.clear(self) -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.block_chains_vec_t.end(self, *args) -> "qvector< block_chains_t >::const_iterator"
|
|
|
|
ida_hexrays.block_chains_vec_t.erase(self, *args) -> "qvector< block_chains_t >::iterator"
|
|
|
|
ida_hexrays.block_chains_vec_t.extend(self, x: "block_chains_vec_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.extract(self) -> "block_chains_t *"
|
|
|
|
ida_hexrays.block_chains_vec_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.inject(self, s: "block_chains_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.insert(self, it: "block_chains_t", x: "block_chains_t") -> "qvector< block_chains_t >::iterator"
|
|
|
|
ida_hexrays.block_chains_vec_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.push_back(self, *args) -> "block_chains_t &"
|
|
|
|
ida_hexrays.block_chains_vec_t.qclear(self) -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.block_chains_vec_t.swap(self, r: "block_chains_vec_t") -> None
|
|
|
|
ida_hexrays.block_chains_vec_t.truncate(self) -> None
|
|
|
|
ida_hexrays.boundaries_begin(map: "boundaries_t") -> "boundaries_iterator_t"
|
|
Get iterator pointing to the beginning of boundaries_t.
|
|
|
|
ida_hexrays.boundaries_clear(map: "boundaries_t") -> None
|
|
Clear boundaries_t.
|
|
|
|
ida_hexrays.boundaries_end(map: "boundaries_t") -> "boundaries_iterator_t"
|
|
Get iterator pointing to the end of boundaries_t.
|
|
|
|
ida_hexrays.boundaries_erase(map: "boundaries_t", p: "boundaries_iterator_t") -> None
|
|
Erase current element from boundaries_t.
|
|
|
|
ida_hexrays.boundaries_find(map: "boundaries_t", key: "cinsn_t") -> "boundaries_iterator_t"
|
|
Find the specified key in boundaries_t.
|
|
|
|
ida_hexrays.boundaries_first(p: "boundaries_iterator_t") -> "cinsn_t *const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.boundaries_free(map: "boundaries_t") -> None
|
|
Delete boundaries_t instance.
|
|
|
|
ida_hexrays.boundaries_insert(map: "boundaries_t", key: "cinsn_t", val: "rangeset_t") -> "boundaries_iterator_t"
|
|
Insert new (cinsn_t *, rangeset_t) pair into boundaries_t.
|
|
|
|
ida_hexrays.boundaries_iterator_t
|
|
|
|
ida_hexrays.boundaries_iterator_t.__eq__(self, p: "boundaries_iterator_t") -> bool
|
|
|
|
ida_hexrays.boundaries_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.boundaries_iterator_t.__ne__(self, p: "boundaries_iterator_t") -> bool
|
|
|
|
ida_hexrays.boundaries_new() -> "boundaries_t *"
|
|
Create a new boundaries_t instance.
|
|
|
|
ida_hexrays.boundaries_next(p: "boundaries_iterator_t") -> "boundaries_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.boundaries_prev(p: "boundaries_iterator_t") -> "boundaries_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.boundaries_second(p: "boundaries_iterator_t") -> "rangeset_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.boundaries_size(map: "boundaries_t") -> "size_t"
|
|
Get size of boundaries_t.
|
|
|
|
ida_hexrays.boundaries_t
|
|
|
|
ida_hexrays.boundaries_t.__init__(self)
|
|
|
|
ida_hexrays.boundaries_t.at(self, _Keyval: "cinsn_t") -> "rangeset_t &"
|
|
|
|
ida_hexrays.boundaries_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.call_helper(rettype, args, *rest)
|
|
Create a helper call.
|
|
|
|
ida_hexrays.carg_t
|
|
|
|
ida_hexrays.carg_t.__eq__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.__ge__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.__gt__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.__init__(self)
|
|
|
|
ida_hexrays.carg_t.__le__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.__lt__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.__ne__(self, r: "carg_t") -> bool
|
|
|
|
ida_hexrays.carg_t.compare(self, r: "carg_t") -> int
|
|
|
|
ida_hexrays.carg_t.consume_cexpr(self, e: "cexpr_t") -> None
|
|
|
|
ida_hexrays.carg_t.formal_type
|
|
formal parameter type (if known)
|
|
|
|
ida_hexrays.carg_t.is_vararg
|
|
is a vararg (matches ...)
|
|
|
|
ida_hexrays.carglist_t
|
|
|
|
ida_hexrays.carglist_t.__eq__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.__ge__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.__gt__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.__init__(self, *args)
|
|
|
|
ida_hexrays.carglist_t.__le__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.__lt__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.__ne__(self, r: "carglist_t") -> bool
|
|
|
|
ida_hexrays.carglist_t.compare(self, r: "carglist_t") -> int
|
|
|
|
ida_hexrays.carglist_t.flags
|
|
call flags
|
|
|
|
ida_hexrays.carglist_t.functype
|
|
function object type
|
|
|
|
ida_hexrays.casm_t
|
|
|
|
ida_hexrays.casm_t.__eq__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.__ge__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.__gt__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.__init__(self, *args)
|
|
|
|
ida_hexrays.casm_t.__le__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.__lt__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.__ne__(self, r: "casm_t") -> bool
|
|
|
|
ida_hexrays.casm_t.compare(self, r: "casm_t") -> int
|
|
|
|
ida_hexrays.casm_t.one_insn(self) -> bool
|
|
|
|
ida_hexrays.catchexpr_t
|
|
|
|
ida_hexrays.catchexpr_t.__eq__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.__ge__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.__gt__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.__init__(self)
|
|
|
|
ida_hexrays.catchexpr_t.__le__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.__lt__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.__ne__(self, r: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.catchexpr_t.compare(self, r: "catchexpr_t") -> int
|
|
|
|
ida_hexrays.catchexpr_t.fake_type
|
|
if not empty, type of the caught object. ideally, obj.type should be enough. however, in some cases the detailed type info is not available.
|
|
|
|
|
|
ida_hexrays.catchexpr_t.is_catch_all(self) -> bool
|
|
|
|
ida_hexrays.catchexpr_t.obj
|
|
the caught object. if obj.op==cot_empty, no object. ideally, obj.op==cot_var
|
|
|
|
|
|
ida_hexrays.catchexpr_t.swap(self, r: "catchexpr_t") -> None
|
|
|
|
ida_hexrays.cblock_pos_t
|
|
|
|
ida_hexrays.cblock_pos_t.__init__(self)
|
|
|
|
ida_hexrays.cblock_pos_t.insn(self) -> "cinsn_t *"
|
|
|
|
ida_hexrays.cblock_pos_t.is_first_insn(self) -> bool
|
|
|
|
ida_hexrays.cblock_pos_t.prev_insn(self) -> "cinsn_t *"
|
|
|
|
ida_hexrays.cblock_posvec_t
|
|
|
|
ida_hexrays.cblock_posvec_t.__getitem__(self, i: "size_t") -> "cblock_pos_t const &"
|
|
|
|
ida_hexrays.cblock_posvec_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cblock_posvec_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.cblock_posvec_t.__setitem__(self, i: "size_t", v: "cblock_pos_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.append(self, x: "cblock_pos_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.at(self, _idx: "size_t") -> "cblock_pos_t const &"
|
|
|
|
ida_hexrays.cblock_posvec_t.begin(self, *args) -> "qvector< cblock_pos_t >::const_iterator"
|
|
|
|
ida_hexrays.cblock_posvec_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.cblock_posvec_t.clear(self) -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.cblock_posvec_t.end(self, *args) -> "qvector< cblock_pos_t >::const_iterator"
|
|
|
|
ida_hexrays.cblock_posvec_t.erase(self, *args) -> "qvector< cblock_pos_t >::iterator"
|
|
|
|
ida_hexrays.cblock_posvec_t.extend(self, x: "cblock_posvec_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.extract(self) -> "cblock_pos_t *"
|
|
|
|
ida_hexrays.cblock_posvec_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.inject(self, s: "cblock_pos_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.insert(self, it: "cblock_pos_t", x: "cblock_pos_t") -> "qvector< cblock_pos_t >::iterator"
|
|
|
|
ida_hexrays.cblock_posvec_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.push_back(self, *args) -> "cblock_pos_t &"
|
|
|
|
ida_hexrays.cblock_posvec_t.qclear(self) -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.cblock_posvec_t.swap(self, r: "cblock_posvec_t") -> None
|
|
|
|
ida_hexrays.cblock_posvec_t.truncate(self) -> None
|
|
|
|
ida_hexrays.cblock_t
|
|
|
|
ida_hexrays.cblock_t.__eq__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t.__ge__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t.__gt__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t.__init__(self)
|
|
|
|
ida_hexrays.cblock_t.__le__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t.__lt__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t.__ne__(self, r: "cblock_t") -> bool
|
|
|
|
ida_hexrays.cblock_t._deregister(self) -> None
|
|
|
|
ida_hexrays.cblock_t.compare(self, r: "cblock_t") -> int
|
|
|
|
ida_hexrays.ccase_t
|
|
|
|
ida_hexrays.ccase_t.__eq__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.__ge__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.__gt__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.__init__(self)
|
|
|
|
ida_hexrays.ccase_t.__le__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.__lt__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.__ne__(self, r: "ccase_t") -> bool
|
|
|
|
ida_hexrays.ccase_t.compare(self, r: "ccase_t") -> int
|
|
|
|
ida_hexrays.ccase_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.ccase_t.value(self, i: int) -> "uint64 const &"
|
|
|
|
ida_hexrays.ccase_t.values
|
|
List of case values. if empty, then 'default' case
|
|
|
|
|
|
ida_hexrays.ccases_t
|
|
|
|
ida_hexrays.ccases_t.__eq__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.__ge__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.__gt__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.__init__(self)
|
|
|
|
ida_hexrays.ccases_t.__le__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.__lt__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.__ne__(self, r: "ccases_t") -> bool
|
|
|
|
ida_hexrays.ccases_t.compare(self, r: "ccases_t") -> int
|
|
|
|
ida_hexrays.ccatch_t
|
|
|
|
ida_hexrays.ccatch_t.__eq__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.__ge__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.__gt__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.ccatch_t.__le__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.__lt__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.__ne__(self, r: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.ccatch_t.compare(self, r: "ccatch_t") -> int
|
|
|
|
ida_hexrays.ccatch_t.is_catch_all(self) -> bool
|
|
|
|
ida_hexrays.ccatch_t.swap(self, r: "ccatch_t") -> None
|
|
|
|
ida_hexrays.cdg_insn_iterator_t
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs(self) -> bool
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.has_dslot(self) -> bool
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.is_severed_dslot(self) -> bool
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.next(self, ins: "insn_t *") -> "merror_t"
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.ok(self) -> bool
|
|
|
|
ida_hexrays.cdg_insn_iterator_t.start(self, rng: "range_t") -> None
|
|
|
|
ida_hexrays.cdo_t
|
|
|
|
ida_hexrays.cdo_t.__eq__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.__ge__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.__gt__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.__init__(self)
|
|
|
|
ida_hexrays.cdo_t.__le__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.__lt__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.__ne__(self, r: "cdo_t") -> bool
|
|
|
|
ida_hexrays.cdo_t.compare(self, r: "cdo_t") -> int
|
|
|
|
ida_hexrays.ceinsn_t
|
|
|
|
ida_hexrays.ceinsn_t.__init__(self)
|
|
|
|
ida_hexrays.ceinsn_t.expr
|
|
Expression of the statement.
|
|
|
|
ida_hexrays.cexpr_operands(self)
|
|
return a dictionary with the operands of a cexpr_t.
|
|
|
|
ida_hexrays.cexpr_t
|
|
|
|
ida_hexrays.cexpr_t.__eq__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t.__ge__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t.__gt__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cexpr_t.__le__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t.__lt__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t.__ne__(self, r: "cexpr_t") -> bool
|
|
|
|
ida_hexrays.cexpr_t._deregister(self) -> None
|
|
|
|
ida_hexrays.cexpr_t._get_a(self) -> "carglist_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_fpc(self) -> "fnumber_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_helper(self) -> str
|
|
|
|
ida_hexrays.cexpr_t._get_insn(self) -> "cinsn_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_m(self) -> int
|
|
|
|
ida_hexrays.cexpr_t._get_n(self) -> "cnumber_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_obj_ea(self) -> ida_idaapi.ea_t
|
|
|
|
ida_hexrays.cexpr_t._get_ptrsize(self) -> int
|
|
|
|
ida_hexrays.cexpr_t._get_refwidth(self) -> int
|
|
|
|
ida_hexrays.cexpr_t._get_string(self) -> str
|
|
|
|
ida_hexrays.cexpr_t._get_x(self) -> "cexpr_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_y(self) -> "cexpr_t *"
|
|
|
|
ida_hexrays.cexpr_t._get_z(self) -> "cexpr_t *"
|
|
|
|
ida_hexrays.cexpr_t._register(self) -> None
|
|
|
|
ida_hexrays.cexpr_t._replace_by(self, r: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_a(self, _v: "carglist_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_fpc(self, _v: "fnumber_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_helper(self, _v: str) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_insn(self, _v: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_m(self, _v: int) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_n(self, _v: "cnumber_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_obj_ea(self, _v: ida_idaapi.ea_t) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_ptrsize(self, _v: int) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_refwidth(self, _v: int) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_string(self, _v: str) -> None
|
|
|
|
ida_hexrays.cexpr_t._set_x(self, _v: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_y(self, _v: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cexpr_t._set_z(self, _v: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cexpr_t.a
|
|
argument list (used for cot_call)
|
|
|
|
ida_hexrays.cexpr_t.assign(self, r: "cexpr_t") -> "cexpr_t &"
|
|
|
|
ida_hexrays.cexpr_t.calc_type(self, recursive: bool) -> None
|
|
Calculate the type of the expression. Use this function to calculate the expression type when a new expression is built
|
|
|
|
@param recursive: if true, types of all children expression will be calculated before calculating our type
|
|
|
|
ida_hexrays.cexpr_t.cleanup(self) -> None
|
|
Cleanup the expression. This function properly deletes all children and sets the item type to cot_empty.
|
|
|
|
|
|
ida_hexrays.cexpr_t.compare(self, r: "cexpr_t") -> int
|
|
|
|
ida_hexrays.cexpr_t.contains_comma(self, times: int = 1) -> bool
|
|
Does the expression contain a comma operator?
|
|
|
|
ida_hexrays.cexpr_t.contains_comma_or_insn_or_label(self, maxcommas: int = 1) -> bool
|
|
Does the expression contain a comma operator or an embedded statement operator or a label?
|
|
|
|
ida_hexrays.cexpr_t.contains_insn(self, times: int = 1) -> bool
|
|
Does the expression contain an embedded statement operator?
|
|
|
|
ida_hexrays.cexpr_t.contains_insn_or_label(self) -> bool
|
|
Does the expression contain an embedded statement operator or a label?
|
|
|
|
ida_hexrays.cexpr_t.contains_operator(self, needed_op: "ctype_t", times: int = 1) -> bool
|
|
Check if the expression contains the specified operator.
|
|
|
|
@param needed_op: operator code to search for
|
|
@param times: how many times the operator code should be present
|
|
@returns true if the expression has at least TIMES children with NEEDED_OP
|
|
|
|
ida_hexrays.cexpr_t.cpadone(self) -> bool
|
|
Pointer arithmetic correction done for this expression?
|
|
|
|
ida_hexrays.cexpr_t.dstr(self) -> str
|
|
|
|
ida_hexrays.cexpr_t.equal_effect(self, r: "cexpr_t") -> bool
|
|
Compare two expressions. This function tries to compare two expressions in an 'intelligent' manner. For example, it knows about commutitive operators and can ignore useless casts.
|
|
|
|
@param r: the expression to compare against the current expression
|
|
@returns true expressions can be considered equal
|
|
|
|
ida_hexrays.cexpr_t.exflags
|
|
Expression attributes
|
|
|
|
|
|
ida_hexrays.cexpr_t.find_num_op(self) -> "cexpr_t *"
|
|
Find the operand with a numeric value.
|
|
|
|
ida_hexrays.cexpr_t.find_op(self, _op: "ctype_t") -> "cexpr_t *"
|
|
Find the child with the specified operator.
|
|
|
|
ida_hexrays.cexpr_t.fpc
|
|
used for cot_fnum
|
|
|
|
ida_hexrays.cexpr_t.get_1num_op(self, o1: "cexpr_t **", o2: "cexpr_t **") -> bool
|
|
Get pointers to operands. at last one operand should be a number o1 will be pointer to the number
|
|
|
|
|
|
ida_hexrays.cexpr_t.get_const_value(self) -> bool
|
|
Get expression value.
|
|
|
|
@returns true if the expression is a number.
|
|
|
|
ida_hexrays.cexpr_t.get_high_nbit_bound(self) -> "bit_bound_t"
|
|
Get max number of bits that can really be used by the expression. For example, x % 16 can yield only 4 non-zero bits, higher bits are zero
|
|
|
|
|
|
ida_hexrays.cexpr_t.get_low_nbit_bound(self) -> int
|
|
Get min number of bits that are certainly required to represent the expression. For example, constant 16 always uses 5 bits: 10000.
|
|
|
|
|
|
ida_hexrays.cexpr_t.get_ptr_or_array(self) -> "cexpr_t *"
|
|
Find pointer or array child.
|
|
|
|
ida_hexrays.cexpr_t.get_type_sign(self) -> "type_sign_t"
|
|
Get expression sign.
|
|
|
|
ida_hexrays.cexpr_t.get_v(self) -> "var_ref_t *"
|
|
|
|
ida_hexrays.cexpr_t.has_side_effects(self) -> bool
|
|
Check if the expression has side effects. Calls, pre/post inc/dec, and assignments have side effects.
|
|
|
|
|
|
ida_hexrays.cexpr_t.helper
|
|
helper name (used for cot_helper)
|
|
|
|
ida_hexrays.cexpr_t.insn
|
|
an embedded statement, they are prohibited at the final maturity stage (CMAT_FINAL)
|
|
|
|
|
|
ida_hexrays.cexpr_t.is_call_arg_of(self, parent: "citem_t") -> bool
|
|
Is call argument?
|
|
|
|
@returns true if our expression is a call argument of the specified parent expression.
|
|
|
|
ida_hexrays.cexpr_t.is_call_object_of(self, parent: "citem_t") -> bool
|
|
Is call object?
|
|
|
|
@returns true if our expression is the call object of the specified parent expression.
|
|
|
|
ida_hexrays.cexpr_t.is_child_of(self, parent: "citem_t") -> bool
|
|
Verify if the specified item is our parent.
|
|
|
|
@param parent: possible parent item
|
|
@returns true if the specified item is our parent
|
|
|
|
ida_hexrays.cexpr_t.is_const_value(self, _v: "uint64") -> bool
|
|
Check if the expression is a number with the specified value.
|
|
|
|
ida_hexrays.cexpr_t.is_cstr(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_fpop(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_jumpout(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_negative_const(self) -> bool
|
|
Check if the expression is a negative number.
|
|
|
|
ida_hexrays.cexpr_t.is_nice_cond(self) -> bool
|
|
Is nice condition?. Nice condition is a nice expression of the boolean type.
|
|
|
|
|
|
ida_hexrays.cexpr_t.is_nice_expr(self) -> bool
|
|
Is nice expression? Nice expressions do not contain comma operators, embedded statements, or labels.
|
|
|
|
|
|
ida_hexrays.cexpr_t.is_non_negative_const(self) -> bool
|
|
Check if the expression is a non-negative number.
|
|
|
|
ida_hexrays.cexpr_t.is_non_zero_const(self) -> bool
|
|
Check if the expression is a non-zero number.
|
|
|
|
ida_hexrays.cexpr_t.is_odd_lvalue(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_type_signed(self) -> bool
|
|
Is expression signed?
|
|
|
|
ida_hexrays.cexpr_t.is_type_unsigned(self) -> bool
|
|
Is expression unsigned?
|
|
|
|
ida_hexrays.cexpr_t.is_undef_val(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_vftable(self) -> bool
|
|
|
|
ida_hexrays.cexpr_t.is_zero_const(self) -> bool
|
|
Check if the expression is a zero.
|
|
|
|
ida_hexrays.cexpr_t.m
|
|
member offset (used for cot_memptr, cot_memref) for unions, the member number
|
|
|
|
|
|
ida_hexrays.cexpr_t.maybe_ptr(self) -> bool
|
|
May the expression be a pointer?
|
|
|
|
ida_hexrays.cexpr_t.n
|
|
used for cot_num
|
|
|
|
ida_hexrays.cexpr_t.numval(self) -> "uint64"
|
|
Get numeric value of the expression. This function can be called only on cot_num expressions!
|
|
|
|
|
|
ida_hexrays.cexpr_t.obj_ea
|
|
used for cot_obj
|
|
|
|
ida_hexrays.cexpr_t.print1(self, func: "cfunc_t") -> None
|
|
Print expression into one line.
|
|
|
|
@param func: parent function. This argument is used to find out the referenced variable names.
|
|
|
|
ida_hexrays.cexpr_t.ptrsize
|
|
memory access size (used for cot_ptr, cot_memptr)
|
|
|
|
ida_hexrays.cexpr_t.put_number(self, *args) -> None
|
|
Assign a number to the expression.
|
|
|
|
@param func: current function
|
|
@param value: number value
|
|
@param nbytes: size of the number in bytes
|
|
@param sign: number sign
|
|
|
|
ida_hexrays.cexpr_t.refwidth
|
|
how many bytes are accessed? (-1: none)
|
|
|
|
ida_hexrays.cexpr_t.requires_lvalue(self, child: "cexpr_t") -> bool
|
|
Check if the expression requires an lvalue.
|
|
|
|
@param child: The function will check if this child of our expression must be an lvalue.
|
|
@returns true if child must be an lvalue.
|
|
|
|
ida_hexrays.cexpr_t.set_cpadone(self) -> None
|
|
|
|
ida_hexrays.cexpr_t.set_v(self, v: "var_ref_t") -> None
|
|
|
|
ida_hexrays.cexpr_t.set_vftable(self) -> None
|
|
|
|
ida_hexrays.cexpr_t.string
|
|
utf8 string constant, user representation (used for cot_str)
|
|
|
|
ida_hexrays.cexpr_t.swap(self, r: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cexpr_t.theother(self, what: "cexpr_t") -> "cexpr_t *"
|
|
Get the other operand. This function returns the other operand (not the specified one) for binary expressions.
|
|
|
|
|
|
ida_hexrays.cexpr_t.type
|
|
expression type. must be carefully maintained
|
|
|
|
ida_hexrays.cexpr_t.v
|
|
used for cot_var
|
|
|
|
ida_hexrays.cexpr_t.x
|
|
the first operand of the expression
|
|
|
|
ida_hexrays.cexpr_t.y
|
|
the second operand of the expression
|
|
|
|
ida_hexrays.cexpr_t.z
|
|
the third operand of the expression
|
|
|
|
ida_hexrays.cfor_t
|
|
|
|
ida_hexrays.cfor_t.__eq__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.__ge__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.__gt__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.__init__(self)
|
|
|
|
ida_hexrays.cfor_t.__le__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.__lt__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.__ne__(self, r: "cfor_t") -> bool
|
|
|
|
ida_hexrays.cfor_t.compare(self, r: "cfor_t") -> int
|
|
|
|
ida_hexrays.cfor_t.init
|
|
Initialization expression.
|
|
|
|
ida_hexrays.cfor_t.step
|
|
Step expression.
|
|
|
|
ida_hexrays.cfunc_parentee_t
|
|
|
|
ida_hexrays.cfunc_parentee_t.__disown__(self)
|
|
|
|
ida_hexrays.cfunc_parentee_t.__init__(self, f: "cfunc_t", post: bool = False)
|
|
|
|
ida_hexrays.cfunc_parentee_t.calc_rvalue_type(self, target: "tinfo_t", e: "cexpr_t") -> bool
|
|
Calculate rvalue type. This function tries to determine the type of the specified item based on its context. For example, if the current expression is the right side of an assignment operator, the type of its left side will be returned. This function can be used to determine the 'best' type of the specified expression.
|
|
|
|
@param target: 'best' type of the expression will be returned here
|
|
@param e: expression to determine the desired type
|
|
@returns false if failed
|
|
|
|
ida_hexrays.cfunc_parentee_t.func
|
|
Pointer to current function.
|
|
|
|
ida_hexrays.cfunc_t
|
|
|
|
ida_hexrays.cfunc_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.cfunc_t.__str__(self) -> str
|
|
|
|
ida_hexrays.cfunc_t.argidx
|
|
list of arguments (indexes into vars)
|
|
|
|
ida_hexrays.cfunc_t.body
|
|
function body, must be a block
|
|
|
|
ida_hexrays.cfunc_t.build_c_tree(self) -> None
|
|
Generate the function body. This function (re)generates the function body from the underlying microcode.
|
|
|
|
|
|
ida_hexrays.cfunc_t.del_orphan_cmts(self) -> int
|
|
Delete all orphan comments. The save_user_cmts() function must be called after this call.
|
|
|
|
|
|
ida_hexrays.cfunc_t.entry_ea
|
|
function entry address
|
|
|
|
ida_hexrays.cfunc_t.find_item_coords(self, *args)
|
|
This method has the following signatures:
|
|
|
|
1. find_item_coords(item: citem_t) -> Tuple[int, int]
|
|
2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool
|
|
|
|
NOTE: The second form is retained for backward-compatibility,
|
|
but we strongly recommend using the first.
|
|
|
|
@param item The item to find coordinates for in the pseudocode listing
|
|
|
|
ida_hexrays.cfunc_t.find_label(self, label: int) -> "citem_t *"
|
|
Find the label.
|
|
|
|
@returns pointer to the ctree item with the specified label number.
|
|
|
|
ida_hexrays.cfunc_t.gather_derefs(self, ci: "ctree_item_t", udm: "udt_type_data_t" = None) -> bool
|
|
|
|
ida_hexrays.cfunc_t.get_boundaries(self) -> "boundaries_t &"
|
|
Get pointer to map of instruction boundaries. This function initializes the boundary map if not done yet.
|
|
|
|
|
|
ida_hexrays.cfunc_t.get_eamap(self) -> "eamap_t &"
|
|
Get pointer to ea->insn map. This function initializes eamap if not done yet.
|
|
|
|
|
|
ida_hexrays.cfunc_t.get_func_type(self, type: "tinfo_t") -> bool
|
|
Get the function type.
|
|
|
|
@param type: variable where the function type is returned
|
|
@returns false if failure
|
|
|
|
ida_hexrays.cfunc_t.get_line_item(self, line: str, x: int, is_ctree_line: bool, phead: "ctree_item_t", pitem: "ctree_item_t", ptail: "ctree_item_t") -> bool
|
|
Get ctree item for the specified cursor position.
|
|
|
|
@param line: line of decompilation text (element of sv)
|
|
@param x: x cursor coordinate in the line
|
|
@param is_ctree_line: does the line belong to statement area? (if not, it is assumed to belong to the declaration area)
|
|
@param phead: ptr to the first item on the line (used to attach block comments). May be nullptr
|
|
@param pitem: ptr to the current item. May be nullptr
|
|
@param ptail: ptr to the last item on the line (used to attach indented comments). May be nullptr
|
|
@returns false if failed to get the current item
|
|
|
|
ida_hexrays.cfunc_t.get_lvars(self) -> "lvars_t *"
|
|
Get vector of local variables.
|
|
|
|
@returns pointer to the vector of local variables. If you modify this vector, the ctree must be regenerated in order to have correct cast operators. Use build_c_tree() for that. Removing lvars should be done carefully: all references in ctree and microcode must be corrected after that.
|
|
|
|
ida_hexrays.cfunc_t.get_pseudocode(self) -> "strvec_t const &"
|
|
Get pointer to decompilation output: the pseudocode. This function generates pseudocode if not done yet.
|
|
|
|
|
|
ida_hexrays.cfunc_t.get_stkoff_delta(self) -> int
|
|
Get stack offset delta. The local variable stack offsets retrieved by v.location.stkoff() should be adjusted before being used as stack frame offsets in IDA.
|
|
|
|
@returns the delta to apply. example: ida_stkoff = v.location.stkoff() - f->get_stkoff_delta()
|
|
|
|
ida_hexrays.cfunc_t.get_user_cmt(self, loc: "treeloc_t", rt: "cmt_retrieval_type_t") -> str
|
|
Retrieve a user defined comment.
|
|
|
|
@param loc: ctree location
|
|
@param rt: should already retrieved comments retrieved again?
|
|
@returns pointer to the comment string or nullptr
|
|
|
|
ida_hexrays.cfunc_t.get_user_iflags(self, loc: "citem_locator_t") -> int
|
|
Retrieve citem iflags.
|
|
|
|
@param loc: citem locator
|
|
@returns ctree item iflags bits or 0
|
|
|
|
ida_hexrays.cfunc_t.get_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> bool
|
|
Retrieve a user defined union field selection.
|
|
|
|
@param ea: address
|
|
@param path: out: path describing the union selection.
|
|
@returns pointer to the path or nullptr
|
|
|
|
ida_hexrays.cfunc_t.get_warnings(self) -> "hexwarns_t &"
|
|
Get information about decompilation warnings.
|
|
|
|
@returns reference to the vector of warnings
|
|
|
|
ida_hexrays.cfunc_t.has_orphan_cmts(self) -> bool
|
|
Check if there are orphan comments.
|
|
|
|
ida_hexrays.cfunc_t.hdrlines
|
|
number of lines in the declaration area
|
|
|
|
ida_hexrays.cfunc_t.locked(self) -> bool
|
|
|
|
ida_hexrays.cfunc_t.maturity
|
|
maturity level
|
|
|
|
ida_hexrays.cfunc_t.mba
|
|
underlying microcode
|
|
|
|
ida_hexrays.cfunc_t.numforms
|
|
user-defined number formats.
|
|
|
|
ida_hexrays.cfunc_t.print_dcl(self) -> None
|
|
Print function prototype.
|
|
|
|
|
|
ida_hexrays.cfunc_t.print_func(self, vp: "vc_printer_t") -> None
|
|
Print function text.
|
|
|
|
@param vp: printer helper class to receive the generated text.
|
|
|
|
ida_hexrays.cfunc_t.refcnt
|
|
reference count to this object. use cfuncptr_t
|
|
|
|
ida_hexrays.cfunc_t.refresh_func_ctext(self) -> None
|
|
Refresh ctext after a ctree modification. This function informs the decompiler that ctree (body) have been modified and ctext (sv) does not correspond to it anymore. It also refreshes the pseudocode windows if there is any.
|
|
|
|
|
|
ida_hexrays.cfunc_t.release(self) -> None
|
|
|
|
ida_hexrays.cfunc_t.remove_unused_labels(self) -> None
|
|
Remove unused labels. This function checks what labels are really used by the function and removes the unused ones. You must call it after deleting a goto statement.
|
|
|
|
|
|
ida_hexrays.cfunc_t.save_user_cmts(self) -> None
|
|
Save user-defined comments into the database.
|
|
|
|
ida_hexrays.cfunc_t.save_user_iflags(self) -> None
|
|
Save user-defined iflags into the database.
|
|
|
|
ida_hexrays.cfunc_t.save_user_labels(self) -> None
|
|
Save user-defined labels into the database.
|
|
|
|
ida_hexrays.cfunc_t.save_user_numforms(self) -> None
|
|
Save user-defined number formats into the database.
|
|
|
|
ida_hexrays.cfunc_t.save_user_unions(self) -> None
|
|
Save user-defined union field selections into the database.
|
|
|
|
ida_hexrays.cfunc_t.set_user_cmt(self, loc: "treeloc_t", cmt: str) -> None
|
|
Set a user defined comment. This function stores the specified comment in the cfunc_t structure. The save_user_cmts() function must be called after it.
|
|
|
|
@param loc: ctree location
|
|
@param cmt: new comment. if empty or nullptr, then an existing comment is deleted.
|
|
|
|
ida_hexrays.cfunc_t.set_user_iflags(self, loc: "citem_locator_t", iflags: int) -> None
|
|
Set citem iflags.
|
|
|
|
@param loc: citem locator
|
|
@param iflags: new iflags
|
|
|
|
ida_hexrays.cfunc_t.set_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> None
|
|
Set a union field selection. The save_user_unions() function must be called after calling this function.
|
|
|
|
@param ea: address
|
|
@param path: in: path describing the union selection.
|
|
|
|
ida_hexrays.cfunc_t.statebits
|
|
current cfunc_t state. see cfunc state bits
|
|
|
|
|
|
ida_hexrays.cfunc_t.treeitems
|
|
vector of pointers to citem_t objects (nodes constituting the ctree)
|
|
|
|
ida_hexrays.cfunc_t.user_cmts
|
|
user-defined comments.
|
|
|
|
ida_hexrays.cfunc_t.user_iflags
|
|
user-defined item flags ctree item iflags bits
|
|
|
|
ida_hexrays.cfunc_t.user_labels
|
|
user-defined labels.
|
|
|
|
ida_hexrays.cfunc_t.user_unions
|
|
user-defined union field selections.
|
|
|
|
|
|
ida_hexrays.cfunc_t.verify(self, aul: "allow_unused_labels_t", even_without_debugger: bool) -> None
|
|
Verify the ctree. This function verifies the ctree. If the ctree is malformed, an internal error is generated. Use it to verify the ctree after your modifications.
|
|
|
|
@param aul: Are unused labels acceptable?
|
|
@param even_without_debugger: if false and there is no debugger, the verification will be skipped
|
|
|
|
ida_hexrays.cfunc_type(self)
|
|
Get the function's return type tinfo_t object.
|
|
|
|
ida_hexrays.cfuncptr_t
|
|
|
|
ida_hexrays.cfuncptr_t.__deref__(self) -> "cfunc_t *"
|
|
|
|
ida_hexrays.cfuncptr_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cfuncptr_t.__ptrval__(self) -> "size_t"
|
|
|
|
ida_hexrays.cfuncptr_t.__ref__(self) -> "cfunc_t &"
|
|
|
|
ida_hexrays.cfuncptr_t.__str__(self) -> str
|
|
|
|
ida_hexrays.cfuncptr_t.build_c_tree(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.del_orphan_cmts(self) -> int
|
|
|
|
ida_hexrays.cfuncptr_t.find_item_coords(self, *args)
|
|
This method has the following signatures:
|
|
|
|
1. find_item_coords(item: citem_t) -> Tuple[int, int]
|
|
2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool
|
|
|
|
NOTE: The second form is retained for backward-compatibility,
|
|
but we strongly recommend using the first.
|
|
|
|
@param item The item to find coordinates for in the pseudocode listing
|
|
|
|
ida_hexrays.cfuncptr_t.find_label(self, label: int) -> "citem_t *"
|
|
|
|
ida_hexrays.cfuncptr_t.gather_derefs(self, ci: "ctree_item_t", udm: "udt_type_data_t" = None) -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.get_boundaries(self) -> "boundaries_t &"
|
|
|
|
ida_hexrays.cfuncptr_t.get_eamap(self) -> "eamap_t &"
|
|
|
|
ida_hexrays.cfuncptr_t.get_func_type(self, type: "tinfo_t") -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.get_line_item(self, line: str, x: int, is_ctree_line: bool, phead: "ctree_item_t", pitem: "ctree_item_t", ptail: "ctree_item_t") -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.get_lvars(self) -> "lvars_t *"
|
|
|
|
ida_hexrays.cfuncptr_t.get_pseudocode(self) -> "strvec_t const &"
|
|
|
|
ida_hexrays.cfuncptr_t.get_stkoff_delta(self) -> int
|
|
|
|
ida_hexrays.cfuncptr_t.get_user_cmt(self, loc: "treeloc_t", rt: "cmt_retrieval_type_t") -> str
|
|
|
|
ida_hexrays.cfuncptr_t.get_user_iflags(self, loc: "citem_locator_t") -> int
|
|
|
|
ida_hexrays.cfuncptr_t.get_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.get_warnings(self) -> "hexwarns_t &"
|
|
|
|
ida_hexrays.cfuncptr_t.has_orphan_cmts(self) -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.locked(self) -> bool
|
|
|
|
ida_hexrays.cfuncptr_t.print_dcl(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.print_func(self, vp: "vc_printer_t") -> None
|
|
|
|
ida_hexrays.cfuncptr_t.refresh_func_ctext(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.release(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.remove_unused_labels(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.reset(self) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.save_user_cmts(self) -> None
|
|
Save user defined comments into the database.
|
|
|
|
|
|
ida_hexrays.cfuncptr_t.save_user_iflags(self) -> None
|
|
Save user defined citem iflags into the database.
|
|
|
|
|
|
ida_hexrays.cfuncptr_t.save_user_labels(self) -> None
|
|
Save user defined labels into the database.
|
|
|
|
|
|
ida_hexrays.cfuncptr_t.save_user_numforms(self) -> None
|
|
Save user defined number formats into the database.
|
|
|
|
|
|
ida_hexrays.cfuncptr_t.save_user_unions(self) -> None
|
|
Save user defined union field selections into the database.
|
|
|
|
|
|
ida_hexrays.cfuncptr_t.set_user_cmt(self, loc: "treeloc_t", cmt: str) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.set_user_iflags(self, loc: "citem_locator_t", iflags: int) -> None
|
|
|
|
ida_hexrays.cfuncptr_t.set_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> None
|
|
|
|
ida_hexrays.cfuncptr_t.verify(self, aul: "allow_unused_labels_t", even_without_debugger: bool) -> None
|
|
|
|
ida_hexrays.cgoto_t
|
|
|
|
ida_hexrays.cgoto_t.__eq__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.__ge__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.__gt__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.__init__(self)
|
|
|
|
ida_hexrays.cgoto_t.__le__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.__lt__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.__ne__(self, r: "cgoto_t") -> bool
|
|
|
|
ida_hexrays.cgoto_t.compare(self, r: "cgoto_t") -> int
|
|
|
|
ida_hexrays.cgoto_t.label_num
|
|
Target label number.
|
|
|
|
ida_hexrays.chain_keeper_t
|
|
|
|
ida_hexrays.chain_keeper_t.__init__(self, _gc: "graph_chains_t")
|
|
|
|
ida_hexrays.chain_keeper_t.back(self) -> "block_chains_t &"
|
|
|
|
ida_hexrays.chain_keeper_t.for_all_chains(self, cv: "chain_visitor_t", gca: int) -> int
|
|
|
|
ida_hexrays.chain_keeper_t.front(self) -> "block_chains_t &"
|
|
|
|
ida_hexrays.chain_t
|
|
|
|
ida_hexrays.chain_t.__init__(self, *args)
|
|
|
|
ida_hexrays.chain_t.__lt__(self, r: "chain_t") -> bool
|
|
|
|
ida_hexrays.chain_t._print(self) -> None
|
|
|
|
ida_hexrays.chain_t.append_list(self, mba: "mba_t", list: "mlist_t") -> None
|
|
Append the contents of the chain to the specified list of locations.
|
|
|
|
ida_hexrays.chain_t.clear_varnum(self) -> None
|
|
|
|
ida_hexrays.chain_t.dstr(self) -> str
|
|
|
|
ida_hexrays.chain_t.endoff(self) -> "voff_t const"
|
|
|
|
ida_hexrays.chain_t.flags
|
|
combination Chain properties bits
|
|
|
|
|
|
ida_hexrays.chain_t.get_reg(self) -> "mreg_t"
|
|
|
|
ida_hexrays.chain_t.get_stkoff(self) -> int
|
|
|
|
ida_hexrays.chain_t.includes(self, r: "chain_t") -> bool
|
|
|
|
ida_hexrays.chain_t.is_fake(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_inited(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_overlapped(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_passreg(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_reg(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_replaced(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_stkoff(self) -> bool
|
|
|
|
ida_hexrays.chain_t.is_term(self) -> bool
|
|
|
|
ida_hexrays.chain_t.key(self) -> "voff_t const &"
|
|
|
|
ida_hexrays.chain_t.overlap(self, r: "chain_t") -> bool
|
|
|
|
ida_hexrays.chain_t.set_inited(self, b: bool) -> None
|
|
|
|
ida_hexrays.chain_t.set_overlapped(self, b: bool) -> None
|
|
|
|
ida_hexrays.chain_t.set_replaced(self, b: bool) -> None
|
|
|
|
ida_hexrays.chain_t.set_term(self, b: bool) -> None
|
|
|
|
ida_hexrays.chain_t.set_value(self, r: "chain_t") -> None
|
|
|
|
ida_hexrays.chain_t.varnum
|
|
allocated variable index (-1 - not allocated yet)
|
|
|
|
ida_hexrays.chain_t.width
|
|
size of the value in bytes
|
|
|
|
ida_hexrays.chain_visitor_t
|
|
|
|
ida_hexrays.chain_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.chain_visitor_t.__init__(self)
|
|
|
|
ida_hexrays.chain_visitor_t.parent
|
|
parent of the current chain
|
|
|
|
ida_hexrays.chain_visitor_t.visit_chain(self, nblock: int, ch: "chain_t") -> int
|
|
|
|
ida_hexrays.change_hexrays_config(directive: str) -> bool
|
|
Parse DIRECTIVE and update the current configuration variables. For the syntax see hexrays.cfg
|
|
|
|
|
|
ida_hexrays.cif_t
|
|
|
|
ida_hexrays.cif_t.__eq__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.__ge__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.__gt__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cif_t.__le__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.__lt__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.__ne__(self, r: "cif_t") -> bool
|
|
|
|
ida_hexrays.cif_t.assign(self, r: "cif_t") -> "cif_t &"
|
|
|
|
ida_hexrays.cif_t.cleanup(self) -> None
|
|
|
|
ida_hexrays.cif_t.compare(self, r: "cif_t") -> int
|
|
|
|
ida_hexrays.cif_t.ielse
|
|
Else-branch of the if-statement. May be nullptr.
|
|
|
|
ida_hexrays.cif_t.ithen
|
|
Then-branch of the if-statement.
|
|
|
|
ida_hexrays.cinsn_details(self)
|
|
return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects.
|
|
|
|
ida_hexrays.cinsn_list_t
|
|
|
|
ida_hexrays.cinsn_list_t.__eq__(self, x: "cinsn_list_t") -> bool
|
|
|
|
ida_hexrays.cinsn_list_t.__getitem__(self, i: "size_t") -> "cinsn_t const &"
|
|
|
|
ida_hexrays.cinsn_list_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cinsn_list_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.cinsn_list_t.__ne__(self, x: "cinsn_list_t") -> bool
|
|
|
|
ida_hexrays.cinsn_list_t.__setitem__(self, i: "size_t", v: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsn_list_t.at(self, index)
|
|
|
|
ida_hexrays.cinsn_list_t.back(self, *args) -> "cinsn_t const &"
|
|
|
|
ida_hexrays.cinsn_list_t.begin(self) -> "cinsn_list_t_iterator"
|
|
|
|
ida_hexrays.cinsn_list_t.clear(self) -> None
|
|
|
|
ida_hexrays.cinsn_list_t.empty(self) -> bool
|
|
|
|
ida_hexrays.cinsn_list_t.end(self) -> "cinsn_list_t_iterator"
|
|
|
|
ida_hexrays.cinsn_list_t.erase(self, p: "cinsn_list_t_iterator") -> None
|
|
|
|
ida_hexrays.cinsn_list_t.find(self, item)
|
|
|
|
ida_hexrays.cinsn_list_t.front(self, *args) -> "cinsn_t const &"
|
|
|
|
ida_hexrays.cinsn_list_t.index(self, item)
|
|
|
|
ida_hexrays.cinsn_list_t.insert(self, *args) -> "cinsn_list_t_iterator"
|
|
|
|
ida_hexrays.cinsn_list_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.cinsn_list_t.pop_front(self) -> None
|
|
|
|
ida_hexrays.cinsn_list_t.push_back(self, *args) -> "cinsn_t &"
|
|
|
|
ida_hexrays.cinsn_list_t.push_front(self, x: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsn_list_t.rbegin(self, *args) -> "qlist< cinsn_t >::const_reverse_iterator"
|
|
|
|
ida_hexrays.cinsn_list_t.remove(self, v: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_list_t.rend(self, *args) -> "qlist< cinsn_t >::const_reverse_iterator"
|
|
|
|
ida_hexrays.cinsn_list_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.cinsn_list_t.splice(self, pos: "qlist< cinsn_t >::iterator", other: "cinsn_list_t", first: "qlist< cinsn_t >::iterator", last: "qlist< cinsn_t >::iterator") -> None
|
|
|
|
ida_hexrays.cinsn_list_t.swap(self, x: "cinsn_list_t") -> None
|
|
|
|
ida_hexrays.cinsn_list_t_iterator
|
|
|
|
ida_hexrays.cinsn_list_t_iterator.__eq__(self, x: "cinsn_list_t_iterator") -> bool
|
|
|
|
ida_hexrays.cinsn_list_t_iterator.__init__(self)
|
|
|
|
ida_hexrays.cinsn_list_t_iterator.__ne__(self, x: "cinsn_list_t_iterator") -> bool
|
|
|
|
ida_hexrays.cinsn_list_t_iterator.__next__(self) -> None
|
|
|
|
ida_hexrays.cinsn_t
|
|
|
|
ida_hexrays.cinsn_t.__eq__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.__ge__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.__gt__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cinsn_t.__le__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.__lt__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.__ne__(self, r: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t._deregister(self) -> None
|
|
|
|
ida_hexrays.cinsn_t._get_casm(self) -> "casm_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cblock(self) -> "cblock_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cdo(self) -> "cdo_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cexpr(self) -> "cexpr_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cfor(self) -> "cfor_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cgoto(self) -> "cgoto_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cif(self) -> "cif_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_creturn(self) -> "creturn_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cswitch(self) -> "cswitch_t *"
|
|
|
|
ida_hexrays.cinsn_t._get_cwhile(self) -> "cwhile_t *"
|
|
|
|
ida_hexrays.cinsn_t._print(self, indent: int, vp: "vc_printer_t", use_curly: "use_curly_t" = CALC_CURLY_BRACES) -> None
|
|
|
|
ida_hexrays.cinsn_t._register(self) -> None
|
|
|
|
ida_hexrays.cinsn_t._replace_by(self, r: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_casm(self, _v: "casm_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cblock(self, _v: "cblock_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cdo(self, _v: "cdo_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cexpr(self, _v: "cexpr_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cfor(self, _v: "cfor_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cgoto(self, _v: "cgoto_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cif(self, _v: "cif_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_creturn(self, _v: "creturn_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cswitch(self, _v: "cswitch_t") -> None
|
|
|
|
ida_hexrays.cinsn_t._set_cwhile(self, _v: "cwhile_t") -> None
|
|
|
|
ida_hexrays.cinsn_t.assign(self, r: "cinsn_t") -> "cinsn_t &"
|
|
|
|
ida_hexrays.cinsn_t.casm
|
|
details of asm-statement
|
|
|
|
ida_hexrays.cinsn_t.cblock
|
|
details of block-statement
|
|
|
|
ida_hexrays.cinsn_t.cdo
|
|
details of do-statement
|
|
|
|
ida_hexrays.cinsn_t.cexpr
|
|
details of expression-statement
|
|
|
|
ida_hexrays.cinsn_t.cfor
|
|
details of for-statement
|
|
|
|
ida_hexrays.cinsn_t.cgoto
|
|
details of goto-statement
|
|
|
|
ida_hexrays.cinsn_t.cif
|
|
details of if-statement
|
|
|
|
ida_hexrays.cinsn_t.cleanup(self) -> None
|
|
Cleanup the statement. This function properly deletes all children and sets the item type to cit_empty.
|
|
|
|
|
|
ida_hexrays.cinsn_t.collect_free_breaks(self, breaks: "cinsnptrvec_t") -> bool
|
|
Collect free `break` statements. This function finds all free `break` statements within the current statement. A `break` statement is free if it does not have a loop or switch parent that that is also within the current statement.
|
|
|
|
@param breaks: pointer to the variable where the vector of all found free `break` statements is returned. This argument can be nullptr.
|
|
@returns true if some free `break` statements have been found
|
|
|
|
ida_hexrays.cinsn_t.collect_free_continues(self, continues: "cinsnptrvec_t") -> bool
|
|
Collect free `continue` statements. This function finds all free `continue` statements within the current statement. A `continue` statement is free if it does not have a loop parent that that is also within the current statement.
|
|
|
|
@param continues: pointer to the variable where the vector of all found free `continue` statements is returned. This argument can be nullptr.
|
|
@returns true if some free `continue` statements have been found
|
|
|
|
ida_hexrays.cinsn_t.compare(self, r: "cinsn_t") -> int
|
|
|
|
ida_hexrays.cinsn_t.contains_free_break(self) -> bool
|
|
Check if the statement has free `break` statements.
|
|
|
|
ida_hexrays.cinsn_t.contains_free_continue(self) -> bool
|
|
Check if the statement has free `continue` statements.
|
|
|
|
ida_hexrays.cinsn_t.contains_insn(self, type: "ctype_t", times: int = 1) -> bool
|
|
Check if the statement contains a statement of the specified type.
|
|
|
|
@param type: statement opcode to look for
|
|
@param times: how many times TYPE should be present
|
|
@returns true if the statement has at least TIMES children with opcode == TYPE
|
|
|
|
ida_hexrays.cinsn_t.create_if(self, cnd: "cexpr_t") -> "cif_t &"
|
|
Create a new if-statement. The current statement must be a block. The new statement will be appended to it.
|
|
|
|
@param cnd: if condition. It will be deleted after being copied.
|
|
|
|
ida_hexrays.cinsn_t.creturn
|
|
details of return-statement
|
|
|
|
ida_hexrays.cinsn_t.cswitch
|
|
details of switch-statement
|
|
|
|
ida_hexrays.cinsn_t.cthrow
|
|
details of throw-statement
|
|
|
|
ida_hexrays.cinsn_t.ctry
|
|
details of try-statement
|
|
|
|
ida_hexrays.cinsn_t.cwhile
|
|
details of while-statement
|
|
|
|
ida_hexrays.cinsn_t.dstr(self) -> str
|
|
|
|
ida_hexrays.cinsn_t.insn_is_epilog(insn: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsn_t.is_epilog(self)
|
|
|
|
ida_hexrays.cinsn_t.is_ordinary_flow(self) -> bool
|
|
Check if the statement passes execution to the next statement.
|
|
|
|
@returns false if the statement breaks the control flow (like goto, return, etc)
|
|
|
|
ida_hexrays.cinsn_t.new_insn(self, insn_ea: ida_idaapi.ea_t) -> "cinsn_t &"
|
|
Create a new statement. The current statement must be a block. The new statement will be appended to it.
|
|
|
|
@param insn_ea: statement address
|
|
|
|
ida_hexrays.cinsn_t.print1(self, func: "cfunc_t") -> None
|
|
Print the statement into one line. Currently this function is not available.
|
|
|
|
@param func: parent function. This argument is used to find out the referenced variable names.
|
|
|
|
ida_hexrays.cinsn_t.swap(self, r: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsn_t.zero(self) -> None
|
|
Overwrite with zeroes without cleaning memory or deleting children.
|
|
|
|
ida_hexrays.cinsnptrvec_t
|
|
|
|
ida_hexrays.cinsnptrvec_t.__eq__(self, r: "cinsnptrvec_t") -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.__getitem__(self, i: "size_t") -> "cinsn_t *const &"
|
|
|
|
ida_hexrays.cinsnptrvec_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cinsnptrvec_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.cinsnptrvec_t.__ne__(self, r: "cinsnptrvec_t") -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.__setitem__(self, i: "size_t", v: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t._del(self, x: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.add_unique(self, x: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.append(self, x: "cinsn_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.at(self, _idx: "size_t") -> "cinsn_t *const &"
|
|
|
|
ida_hexrays.cinsnptrvec_t.begin(self, *args) -> "qvector< cinsn_t * >::const_iterator"
|
|
|
|
ida_hexrays.cinsnptrvec_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.cinsnptrvec_t.clear(self) -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.end(self, *args) -> "qvector< cinsn_t * >::const_iterator"
|
|
|
|
ida_hexrays.cinsnptrvec_t.erase(self, *args) -> "qvector< cinsn_t * >::iterator"
|
|
|
|
ida_hexrays.cinsnptrvec_t.extend(self, x: "cinsnptrvec_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.extract(self) -> "cinsn_t **"
|
|
|
|
ida_hexrays.cinsnptrvec_t.find(self, *args) -> "qvector< cinsn_t * >::const_iterator"
|
|
|
|
ida_hexrays.cinsnptrvec_t.has(self, x: "cinsn_t") -> bool
|
|
|
|
ida_hexrays.cinsnptrvec_t.inject(self, s: "cinsn_t **", len: "size_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.insert(self, it: "qvector< cinsn_t * >::iterator", x: "cinsn_t") -> "qvector< cinsn_t * >::iterator"
|
|
|
|
ida_hexrays.cinsnptrvec_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.push_back(self, *args) -> "cinsn_t *&"
|
|
|
|
ida_hexrays.cinsnptrvec_t.qclear(self) -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.cinsnptrvec_t.swap(self, r: "cinsnptrvec_t") -> None
|
|
|
|
ida_hexrays.cinsnptrvec_t.truncate(self) -> None
|
|
|
|
ida_hexrays.cit_asm
|
|
asm-statement
|
|
|
|
ida_hexrays.cit_block
|
|
block-statement: { ... }
|
|
|
|
ida_hexrays.cit_break
|
|
break-statement
|
|
|
|
ida_hexrays.cit_continue
|
|
continue-statement
|
|
|
|
ida_hexrays.cit_do
|
|
do-statement
|
|
|
|
ida_hexrays.cit_empty
|
|
instruction types start here
|
|
|
|
ida_hexrays.cit_expr
|
|
expression-statement: expr;
|
|
|
|
ida_hexrays.cit_for
|
|
for-statement
|
|
|
|
ida_hexrays.cit_goto
|
|
goto-statement
|
|
|
|
ida_hexrays.cit_if
|
|
if-statement
|
|
|
|
ida_hexrays.cit_return
|
|
return-statement
|
|
|
|
ida_hexrays.cit_switch
|
|
switch-statement
|
|
|
|
ida_hexrays.cit_throw
|
|
C++ throw-statement.
|
|
|
|
ida_hexrays.cit_try
|
|
C++ try-statement.
|
|
|
|
ida_hexrays.cit_while
|
|
while-statement
|
|
|
|
ida_hexrays.citem_cmt_t
|
|
|
|
ida_hexrays.citem_cmt_t.__init__(self, *args)
|
|
|
|
ida_hexrays.citem_cmt_t.__str__(self) -> str
|
|
|
|
ida_hexrays.citem_cmt_t.c_str(self) -> str
|
|
|
|
ida_hexrays.citem_cmt_t.used
|
|
the comment has been retrieved?
|
|
|
|
ida_hexrays.citem_locator_t
|
|
|
|
ida_hexrays.citem_locator_t.__eq__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.__ge__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.__gt__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.__init__(self, *args)
|
|
|
|
ida_hexrays.citem_locator_t.__le__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.__lt__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.__ne__(self, r: "citem_locator_t") -> bool
|
|
|
|
ida_hexrays.citem_locator_t.compare(self, r: "citem_locator_t") -> int
|
|
|
|
ida_hexrays.citem_locator_t.ea
|
|
citem address
|
|
|
|
ida_hexrays.citem_locator_t.op
|
|
citem operation
|
|
|
|
ida_hexrays.citem_t
|
|
|
|
ida_hexrays.citem_t.__dbg_get_meminfo(self) -> str
|
|
|
|
ida_hexrays.citem_t.__dbg_get_registered_kind(self) -> int
|
|
|
|
ida_hexrays.citem_t.__init__(self, o: "ctype_t" = cot_empty)
|
|
|
|
ida_hexrays.citem_t._acquire_ownership(self, v, acquire)
|
|
|
|
ida_hexrays.citem_t._ensure_cond(self, ok, cond_str)
|
|
|
|
ida_hexrays.citem_t._ensure_no_obj(self, o, attr, attr_is_acquired)
|
|
|
|
ida_hexrays.citem_t._ensure_no_op(self)
|
|
|
|
ida_hexrays.citem_t._ensure_ownership_transferrable(self, v)
|
|
|
|
ida_hexrays.citem_t._get_op(self) -> "ctype_t"
|
|
|
|
ida_hexrays.citem_t._maybe_disown_and_deregister(self)
|
|
|
|
ida_hexrays.citem_t._meminfo(self)
|
|
|
|
ida_hexrays.citem_t._obj_id(self) -> "PyObject *"
|
|
|
|
ida_hexrays.citem_t._own_and_register(self)
|
|
|
|
ida_hexrays.citem_t._set_op(self, v: "ctype_t") -> None
|
|
|
|
ida_hexrays.citem_t.contains_expr(self, e: "cexpr_t") -> bool
|
|
Does the item contain an expression?
|
|
|
|
ida_hexrays.citem_t.contains_label(self) -> bool
|
|
Does the item contain a label?
|
|
|
|
ida_hexrays.citem_t.ea
|
|
address that corresponds to the item. may be BADADDR
|
|
|
|
ida_hexrays.citem_t.find_closest_addr(self, _ea: ida_idaapi.ea_t) -> "citem_t *"
|
|
|
|
ida_hexrays.citem_t.find_parent_of(self, item: "citem_t") -> "citem_t *"
|
|
Find parent of the specified item.
|
|
|
|
@param item: Item to find the parent of. The search will be performed among the children of the item pointed by `this`.
|
|
@returns nullptr if not found
|
|
|
|
ida_hexrays.citem_t.index
|
|
an index in cfunc_t::treeitems. meaningful only after print_func()
|
|
|
|
|
|
ida_hexrays.citem_t.is_expr(self) -> bool
|
|
Is an expression?
|
|
|
|
ida_hexrays.citem_t.label_num
|
|
label number. -1 means no label. items of the expression types (cot_...) should not have labels at the final maturity level, but at the intermediate levels any ctree item may have a label. Labels must be unique. Usually they correspond to the basic block numbers.
|
|
|
|
|
|
ida_hexrays.citem_t.op
|
|
item type
|
|
|
|
ida_hexrays.citem_t.print1(self, func: "cfunc_t") -> None
|
|
Print item into one line.
|
|
|
|
@param func: parent function. This argument is used to find out the referenced variable names.
|
|
@returns length of the generated text.
|
|
|
|
ida_hexrays.citem_t.replace_by(self, o)
|
|
|
|
ida_hexrays.citem_t.swap(self, r: "citem_t") -> None
|
|
Swap two citem_t.
|
|
|
|
ida_hexrays.citem_to_specific_type(self)
|
|
cast the citem_t object to its more specific type, either cexpr_t or cinsn_t.
|
|
|
|
ida_hexrays.clear_cached_cfuncs() -> None
|
|
Flush all cached decompilation results.
|
|
|
|
ida_hexrays.cloop_t
|
|
|
|
ida_hexrays.cloop_t.__init__(self, *args)
|
|
|
|
ida_hexrays.cloop_t.assign(self, r: "cloop_t") -> "cloop_t &"
|
|
|
|
ida_hexrays.cloop_t.cleanup(self) -> None
|
|
|
|
ida_hexrays.close_hexrays_waitbox() -> None
|
|
Close the waitbox displayed by the decompiler. Useful if DECOMP_NO_HIDE was used during decompilation.
|
|
|
|
|
|
ida_hexrays.close_pseudocode(f: "TWidget *") -> bool
|
|
Close pseudocode window.
|
|
|
|
@param f: pointer to window
|
|
@returns false if failed
|
|
|
|
ida_hexrays.cnumber_t
|
|
|
|
ida_hexrays.cnumber_t.__eq__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t.__ge__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t.__gt__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t.__init__(self, _opnum: int = 0)
|
|
|
|
ida_hexrays.cnumber_t.__le__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t.__lt__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t.__ne__(self, r: "cnumber_t") -> bool
|
|
|
|
ida_hexrays.cnumber_t._print(self, type: "tinfo_t", parent: "citem_t" = None, nice_stroff: "bool *" = None) -> None
|
|
|
|
ida_hexrays.cnumber_t._value
|
|
its value
|
|
|
|
ida_hexrays.cnumber_t.assign(self, v: "uint64", nbytes: int, sign: "type_sign_t") -> None
|
|
Assign new value
|
|
|
|
@param v: new value
|
|
@param nbytes: size of the new value in bytes
|
|
@param sign: sign of the value
|
|
|
|
ida_hexrays.cnumber_t.compare(self, r: "cnumber_t") -> int
|
|
|
|
ida_hexrays.cnumber_t.nf
|
|
how to represent it
|
|
|
|
ida_hexrays.cnumber_t.value(self, type: "tinfo_t") -> "uint64"
|
|
Get value. This function will properly extend the number sign to 64bits depending on the type sign.
|
|
|
|
|
|
ida_hexrays.codegen_t
|
|
|
|
ida_hexrays.codegen_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.codegen_t.analyze_prolog(self, fc: "qflow_chart_t", reachable: "bitset_t") -> "merror_t"
|
|
Analyze prolog/epilog of the function to decompile. If prolog is found, allocate and fill 'mba->pi' structure.
|
|
|
|
@param fc: flow chart
|
|
@param reachable: bitmap of reachable blocks
|
|
@returns error code
|
|
|
|
ida_hexrays.codegen_t.clear(self) -> None
|
|
|
|
ida_hexrays.codegen_t.emit(self, *args) -> "minsn_t *"
|
|
This function has the following signatures:
|
|
|
|
0. emit(code: mcode_t, width: int, l: int, r: int, d: int, offsize: int) -> minsn_t *
|
|
1. emit(code: mcode_t, l: const mop_t *, r: const mop_t *, d: const mop_t *) -> minsn_t *
|
|
|
|
# 0: emit(code: mcode_t, width: int, l: int, r: int, d: int, offsize: int) -> minsn_t *
|
|
|
|
Emit one microinstruction. The L, R, D arguments usually mean the register number. However, they depend on CODE. For example:
|
|
* for m_goto and m_jcnd L is the target address
|
|
* for m_ldc L is the constant value to load
|
|
|
|
|
|
|
|
@returns created microinstruction. can be nullptr if the instruction got immediately optimized away.
|
|
|
|
# 1: emit(code: mcode_t, l: const mop_t *, r: const mop_t *, d: const mop_t *) -> minsn_t *
|
|
|
|
Emit one microinstruction. This variant accepts pointers to operands. It is more difficult to use but permits to create virtually any instruction. Operands may be nullptr when it makes sense.
|
|
|
|
|
|
ida_hexrays.codegen_t.emit_micro_mvm(self, code: "mcode_t", dtype: "op_dtype_t", l: int, r: int, d: int, offsize: int) -> "minsn_t *"
|
|
Emit one microinstruction. This variant takes a data type not a size.
|
|
|
|
|
|
ida_hexrays.codegen_t.gen_micro(self) -> "merror_t"
|
|
Generate microcode for one instruction. The instruction is in INSN
|
|
|
|
@returns MERR_OK - all ok MERR_BLOCK - all ok, need to switch to new block MERR_BADBLK - delete current block and continue other error codes are fatal
|
|
|
|
ida_hexrays.codegen_t.load_effective_address(self, n: int, flags: int = 0) -> "mreg_t"
|
|
Generate microcode to calculate the address of a memory operand.
|
|
|
|
@param n: - number of INSN operand
|
|
@param flags: - reserved for future use
|
|
@returns register containing the operand address. mr_none - failed (not a memory operand)
|
|
|
|
ida_hexrays.codegen_t.load_operand(self, opnum: int, flags: int = 0) -> "mreg_t"
|
|
Generate microcode to load one operand.
|
|
|
|
@param opnum: number of INSN operand
|
|
@param flags: reserved for future use
|
|
@returns register containing the operand.
|
|
|
|
ida_hexrays.codegen_t.microgen_completed(self) -> None
|
|
This method is called when the microcode generation is done.
|
|
|
|
ida_hexrays.codegen_t.prepare_gen_micro(self) -> "merror_t"
|
|
Setup internal data to handle new instruction. This method should be called before calling gen_micro(). Usually gen_micro() is called by the decompiler. You have to call this function explicitly only if you yourself call gen_micro(). The instruction is in INSN
|
|
|
|
@returns MERR_OK - all ok other error codes are fatal
|
|
|
|
ida_hexrays.codegen_t.store_operand(self, n: int, mop: "mop_t", flags: int = 0, outins: "minsn_t **" = None) -> bool
|
|
Generate microcode to store an operand. In case of success an arbitrary number of instructions can be generated (and even no instruction if the source and target are the same)
|
|
|
|
@param n: - number of target INSN operand
|
|
@param mop: - operand to be stored
|
|
@param flags: - reserved for future use
|
|
@param outins: - (OUT) the last generated instruction
|
|
@returns success
|
|
|
|
ida_hexrays.convert_to_user_call(udc: "udcall_t", cdg: "codegen_t") -> "merror_t"
|
|
try to generate user-defined call for an instruction
|
|
|
|
@returns Microcode error codes code: MERR_OK - user-defined call generated else - error (MERR_INSN == inacceptable udc.tif)
|
|
|
|
ida_hexrays.cot_add
|
|
x + y
|
|
|
|
ida_hexrays.cot_asg
|
|
x = y
|
|
|
|
ida_hexrays.cot_asgadd
|
|
x += y
|
|
|
|
ida_hexrays.cot_asgband
|
|
x &= y
|
|
|
|
ida_hexrays.cot_asgbor
|
|
x |= y
|
|
|
|
ida_hexrays.cot_asgmul
|
|
x *= y
|
|
|
|
ida_hexrays.cot_asgsdiv
|
|
x /= y signed
|
|
|
|
ida_hexrays.cot_asgshl
|
|
x <<= y
|
|
|
|
ida_hexrays.cot_asgsmod
|
|
x %= y signed
|
|
|
|
ida_hexrays.cot_asgsshr
|
|
x >>= y signed
|
|
|
|
ida_hexrays.cot_asgsub
|
|
x -= y
|
|
|
|
ida_hexrays.cot_asgudiv
|
|
x /= y unsigned
|
|
|
|
ida_hexrays.cot_asgumod
|
|
x %= y unsigned
|
|
|
|
ida_hexrays.cot_asgushr
|
|
x >>= y unsigned
|
|
|
|
ida_hexrays.cot_asgxor
|
|
x ^= y
|
|
|
|
ida_hexrays.cot_band
|
|
x & y
|
|
|
|
ida_hexrays.cot_bnot
|
|
~x
|
|
|
|
ida_hexrays.cot_bor
|
|
x | y
|
|
|
|
ida_hexrays.cot_call
|
|
x(...)
|
|
|
|
ida_hexrays.cot_cast
|
|
(type)x
|
|
|
|
ida_hexrays.cot_comma
|
|
x, y
|
|
|
|
ida_hexrays.cot_eq
|
|
x == y int or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_fadd
|
|
x + y fp
|
|
|
|
ida_hexrays.cot_fdiv
|
|
x / y fp
|
|
|
|
ida_hexrays.cot_fmul
|
|
x * y fp
|
|
|
|
ida_hexrays.cot_fneg
|
|
-x fp
|
|
|
|
ida_hexrays.cot_fnum
|
|
fpc
|
|
|
|
ida_hexrays.cot_fsub
|
|
x - y fp
|
|
|
|
ida_hexrays.cot_helper
|
|
arbitrary name
|
|
|
|
ida_hexrays.cot_idx
|
|
x[y]
|
|
|
|
ida_hexrays.cot_insn
|
|
instruction in expression, internal representation only
|
|
|
|
ida_hexrays.cot_land
|
|
x && y
|
|
|
|
ida_hexrays.cot_lnot
|
|
!x
|
|
|
|
ida_hexrays.cot_lor
|
|
x || y
|
|
|
|
ida_hexrays.cot_memptr
|
|
x->m, access size in 'ptrsize'
|
|
|
|
ida_hexrays.cot_memref
|
|
x.m
|
|
|
|
ida_hexrays.cot_mul
|
|
x * y
|
|
|
|
ida_hexrays.cot_ne
|
|
x != y int or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_neg
|
|
-x
|
|
|
|
ida_hexrays.cot_num
|
|
n
|
|
|
|
ida_hexrays.cot_obj
|
|
obj_ea
|
|
|
|
ida_hexrays.cot_postdec
|
|
x-
|
|
|
|
ida_hexrays.cot_postinc
|
|
x++
|
|
|
|
ida_hexrays.cot_predec
|
|
-x
|
|
|
|
ida_hexrays.cot_preinc
|
|
++x
|
|
|
|
ida_hexrays.cot_ptr
|
|
*x, access size in 'ptrsize'
|
|
|
|
ida_hexrays.cot_ref
|
|
&x
|
|
|
|
ida_hexrays.cot_sdiv
|
|
x / y signed
|
|
|
|
ida_hexrays.cot_sge
|
|
x >= y signed or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_sgt
|
|
x > y signed or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_shl
|
|
x << y
|
|
|
|
ida_hexrays.cot_sizeof
|
|
sizeof(x)
|
|
|
|
ida_hexrays.cot_sle
|
|
x <= y signed or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_slt
|
|
x < y signed or fpu (see EXFL_FPOP)
|
|
|
|
ida_hexrays.cot_smod
|
|
x % y signed
|
|
|
|
ida_hexrays.cot_sshr
|
|
x >> y signed
|
|
|
|
ida_hexrays.cot_str
|
|
string constant (user representation)
|
|
|
|
ida_hexrays.cot_sub
|
|
x - y
|
|
|
|
ida_hexrays.cot_tern
|
|
x ? y : z
|
|
|
|
ida_hexrays.cot_type
|
|
arbitrary type
|
|
|
|
ida_hexrays.cot_udiv
|
|
x / y unsigned
|
|
|
|
ida_hexrays.cot_uge
|
|
x >= y unsigned
|
|
|
|
ida_hexrays.cot_ugt
|
|
x > y unsigned
|
|
|
|
ida_hexrays.cot_ule
|
|
x <= y unsigned
|
|
|
|
ida_hexrays.cot_ult
|
|
x < y unsigned
|
|
|
|
ida_hexrays.cot_umod
|
|
x % y unsigned
|
|
|
|
ida_hexrays.cot_ushr
|
|
x >> y unsigned
|
|
|
|
ida_hexrays.cot_var
|
|
v
|
|
|
|
ida_hexrays.cot_xor
|
|
x ^ y
|
|
|
|
ida_hexrays.create_cfunc(mba: "mba_t") -> "cfuncptr_t"
|
|
Create a new cfunc_t object.
|
|
|
|
@param mba: microcode object. After creating the cfunc object it takes the ownership of MBA.
|
|
|
|
ida_hexrays.create_empty_mba(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None) -> "mba_t *"
|
|
Create an empty microcode object.
|
|
|
|
ida_hexrays.create_field_name(*args) -> str
|
|
|
|
ida_hexrays.create_helper(*args)
|
|
Create a helper object..
|
|
|
|
ida_hexrays.create_typedef(*args) -> "tinfo_t"
|
|
This function has the following signatures:
|
|
|
|
0. create_typedef(name: str) -> tinfo_t
|
|
1. create_typedef(n: int) -> tinfo_t
|
|
|
|
# 0: create_typedef(name: str) -> tinfo_t
|
|
|
|
Create a reference to a named type.
|
|
|
|
@returns type which refers to the specified name. For example, if name is "DWORD", the type info which refers to "DWORD" is created.
|
|
|
|
# 1: create_typedef(n: int) -> tinfo_t
|
|
|
|
Create a reference to an ordinal type.
|
|
|
|
@returns type which refers to the specified ordinal. For example, if n is 1, the type info which refers to ordinal type 1 is created.
|
|
|
|
ida_hexrays.creturn_t
|
|
|
|
ida_hexrays.creturn_t.__eq__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.__ge__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.__gt__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.__init__(self)
|
|
|
|
ida_hexrays.creturn_t.__le__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.__lt__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.__ne__(self, r: "creturn_t") -> bool
|
|
|
|
ida_hexrays.creturn_t.compare(self, r: "creturn_t") -> int
|
|
|
|
ida_hexrays.cswitch_t
|
|
|
|
ida_hexrays.cswitch_t.__eq__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.__ge__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.__gt__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.__init__(self)
|
|
|
|
ida_hexrays.cswitch_t.__le__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.__lt__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.__ne__(self, r: "cswitch_t") -> bool
|
|
|
|
ida_hexrays.cswitch_t.cases
|
|
Switch cases: values and instructions.
|
|
|
|
ida_hexrays.cswitch_t.compare(self, r: "cswitch_t") -> int
|
|
|
|
ida_hexrays.cswitch_t.mvnf
|
|
Maximal switch value and number format.
|
|
|
|
ida_hexrays.ctext_position_t
|
|
|
|
ida_hexrays.ctext_position_t.__eq__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.__ge__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.__gt__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.__init__(self, _lnnum: int = -1, _x: int = 0, _y: int = 0)
|
|
|
|
ida_hexrays.ctext_position_t.__le__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.__lt__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.__ne__(self, r: "ctext_position_t") -> bool
|
|
|
|
ida_hexrays.ctext_position_t.compare(self, r: "ctext_position_t") -> int
|
|
|
|
ida_hexrays.ctext_position_t.in_ctree(self, hdrlines: int) -> bool
|
|
Is the cursor in the variable/type declaration area?
|
|
|
|
@param hdrlines: Number of lines of the declaration area
|
|
|
|
ida_hexrays.ctext_position_t.lnnum
|
|
Line number.
|
|
|
|
ida_hexrays.ctext_position_t.x
|
|
x coordinate of the cursor within the window
|
|
|
|
ida_hexrays.ctext_position_t.y
|
|
y coordinate of the cursor within the window
|
|
|
|
|
|
ida_hexrays.cthrow_t
|
|
|
|
ida_hexrays.cthrow_t.__eq__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.__ge__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.__gt__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.__init__(self)
|
|
|
|
ida_hexrays.cthrow_t.__le__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.__lt__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.__ne__(self, r: "cthrow_t") -> bool
|
|
|
|
ida_hexrays.cthrow_t.compare(self, r: "cthrow_t") -> int
|
|
|
|
ida_hexrays.ctree_anchor_t
|
|
|
|
ida_hexrays.ctree_anchor_t.__init__(self)
|
|
|
|
ida_hexrays.ctree_anchor_t.get_index(self) -> int
|
|
|
|
ida_hexrays.ctree_anchor_t.get_itp(self) -> "item_preciser_t"
|
|
|
|
ida_hexrays.ctree_anchor_t.is_blkcmt_anchor(self) -> bool
|
|
|
|
ida_hexrays.ctree_anchor_t.is_citem_anchor(self) -> bool
|
|
|
|
ida_hexrays.ctree_anchor_t.is_itp_anchor(self) -> bool
|
|
|
|
ida_hexrays.ctree_anchor_t.is_lvar_anchor(self) -> bool
|
|
|
|
ida_hexrays.ctree_anchor_t.is_valid_anchor(self) -> bool
|
|
|
|
ida_hexrays.ctree_item_t
|
|
|
|
ida_hexrays.ctree_item_t.__init__(self)
|
|
|
|
ida_hexrays.ctree_item_t._get_e(self) -> "cexpr_t *"
|
|
|
|
ida_hexrays.ctree_item_t._get_f(self) -> "cfunc_t *"
|
|
|
|
ida_hexrays.ctree_item_t._get_i(self) -> "cinsn_t *"
|
|
|
|
ida_hexrays.ctree_item_t._get_it(self) -> "citem_t *"
|
|
|
|
ida_hexrays.ctree_item_t._get_l(self) -> "lvar_t *"
|
|
|
|
ida_hexrays.ctree_item_t._print(self) -> None
|
|
|
|
ida_hexrays.ctree_item_t.citype
|
|
Item type.
|
|
|
|
ida_hexrays.ctree_item_t.dstr(self) -> str
|
|
|
|
ida_hexrays.ctree_item_t.e
|
|
VDI_EXPR: Expression.
|
|
|
|
ida_hexrays.ctree_item_t.e
|
|
VDI_EXPR: Expression.
|
|
|
|
ida_hexrays.ctree_item_t.f
|
|
VDI_FUNC: Function.
|
|
|
|
ida_hexrays.ctree_item_t.f
|
|
VDI_FUNC: Function.
|
|
|
|
ida_hexrays.ctree_item_t.get_ea(self) -> ida_idaapi.ea_t
|
|
Get address of the current item. Each ctree item has an address.
|
|
|
|
@returns BADADDR if failed
|
|
|
|
ida_hexrays.ctree_item_t.get_edm(self, parent: "tinfo_t") -> int
|
|
Get type of an enum member. If the current item is a symbolic constant, this function will return information about it.
|
|
|
|
@param parent: pointer to buffer for the enum type.
|
|
@returns member index or -1 if failed
|
|
|
|
ida_hexrays.ctree_item_t.get_label_num(self, gln_flags: int) -> int
|
|
Get label number of the current item.
|
|
|
|
@param gln_flags: Combination of get_label_num control bits
|
|
@returns -1 if failed or no label
|
|
|
|
ida_hexrays.ctree_item_t.get_lvar(self) -> "lvar_t *"
|
|
Get pointer to local variable. If the current item is a local variable, this function will return pointer to its definition.
|
|
|
|
@returns nullptr if failed
|
|
|
|
ida_hexrays.ctree_item_t.get_udm(self, udm: "udm_t" = None, parent: "tinfo_t" = None, p_offset: "uint64 *" = None) -> int
|
|
Get type of a structure field. If the current item is a structure/union field, this function will return information about it.
|
|
|
|
@param udm: pointer to buffer for the udt member info.
|
|
@param parent: pointer to buffer for the struct/union type.
|
|
@param p_offset: pointer to the offset in bits inside udt.
|
|
@returns member index or -1 if failed Both output parameters can be nullptr.
|
|
|
|
ida_hexrays.ctree_item_t.i
|
|
VDI_EXPR: Statement.
|
|
|
|
ida_hexrays.ctree_item_t.i
|
|
VDI_EXPR: Statement.
|
|
|
|
ida_hexrays.ctree_item_t.is_citem(self) -> bool
|
|
Is the current item is a ctree item?
|
|
|
|
ida_hexrays.ctree_item_t.l
|
|
VDI_LVAR: Local variable.
|
|
|
|
ida_hexrays.ctree_item_t.l
|
|
VDI_LVAR: Local variable.
|
|
|
|
ida_hexrays.ctree_item_t.loc
|
|
VDI_TAIL: Line tail.
|
|
|
|
ida_hexrays.ctree_items_t
|
|
|
|
ida_hexrays.ctree_items_t.__eq__(self, r: "ctree_items_t") -> bool
|
|
|
|
ida_hexrays.ctree_items_t.__getitem__(self, i: "size_t") -> "citem_t *const &"
|
|
|
|
ida_hexrays.ctree_items_t.__init__(self, *args)
|
|
|
|
ida_hexrays.ctree_items_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.ctree_items_t.__ne__(self, r: "ctree_items_t") -> bool
|
|
|
|
ida_hexrays.ctree_items_t.__setitem__(self, i: "size_t", v: "citem_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t._del(self, x: "citem_t") -> bool
|
|
|
|
ida_hexrays.ctree_items_t.add_unique(self, x: "citem_t") -> bool
|
|
|
|
ida_hexrays.ctree_items_t.append(self, x: "citem_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t.at(self, _idx: "size_t") -> "citem_t *const &"
|
|
|
|
ida_hexrays.ctree_items_t.begin(self, *args) -> "qvector< citem_t * >::const_iterator"
|
|
|
|
ida_hexrays.ctree_items_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.ctree_items_t.clear(self) -> None
|
|
|
|
ida_hexrays.ctree_items_t.empty(self) -> bool
|
|
|
|
ida_hexrays.ctree_items_t.end(self, *args) -> "qvector< citem_t * >::const_iterator"
|
|
|
|
ida_hexrays.ctree_items_t.erase(self, *args) -> "qvector< citem_t * >::iterator"
|
|
|
|
ida_hexrays.ctree_items_t.extend(self, x: "ctree_items_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t.extract(self) -> "citem_t **"
|
|
|
|
ida_hexrays.ctree_items_t.find(self, *args) -> "qvector< citem_t * >::const_iterator"
|
|
|
|
ida_hexrays.ctree_items_t.has(self, x: "citem_t") -> bool
|
|
|
|
ida_hexrays.ctree_items_t.inject(self, s: "citem_t **", len: "size_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t.insert(self, it: "qvector< citem_t * >::iterator", x: "citem_t") -> "qvector< citem_t * >::iterator"
|
|
|
|
ida_hexrays.ctree_items_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.ctree_items_t.push_back(self, *args) -> "citem_t *&"
|
|
|
|
ida_hexrays.ctree_items_t.qclear(self) -> None
|
|
|
|
ida_hexrays.ctree_items_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.ctree_items_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.ctree_items_t.swap(self, r: "ctree_items_t") -> None
|
|
|
|
ida_hexrays.ctree_items_t.truncate(self) -> None
|
|
|
|
ida_hexrays.ctree_parentee_t
|
|
|
|
ida_hexrays.ctree_parentee_t.__disown__(self)
|
|
|
|
ida_hexrays.ctree_parentee_t.__init__(self, post: bool = False)
|
|
|
|
ida_hexrays.ctree_parentee_t.recalc_parent_types(self) -> bool
|
|
Recalculate type of parent nodes. If a node type has been changed, the visitor must recalculate all parent types, otherwise the ctree becomes inconsistent. If during this recalculation a parent node is added/deleted, this function returns true. In this case the traversal must be stopped because the information about parent nodes is stale.
|
|
|
|
@returns false-ok to continue the traversal, true-must stop.
|
|
|
|
ida_hexrays.ctree_visitor_t
|
|
|
|
ida_hexrays.ctree_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.ctree_visitor_t.__init__(self, _flags: int)
|
|
|
|
ida_hexrays.ctree_visitor_t.apply_to(self, item: "citem_t", parent: "citem_t") -> int
|
|
Traverse ctree. The traversal will start at the specified item and continue until of one the visit_...() functions return a non-zero value.
|
|
|
|
@param item: root of the ctree to traverse
|
|
@param parent: parent of the specified item. can be specified as nullptr.
|
|
@returns 0 or a non-zero value returned by a visit_...() function
|
|
|
|
ida_hexrays.ctree_visitor_t.apply_to_exprs(self, item: "citem_t", parent: "citem_t") -> int
|
|
Traverse only expressions. The traversal will start at the specified item and continue until of one the visit_...() functions return a non-zero value.
|
|
|
|
@param item: root of the ctree to traverse
|
|
@param parent: parent of the specified item. can be specified as nullptr.
|
|
@returns 0 or a non-zero value returned by a visit_...() function
|
|
|
|
ida_hexrays.ctree_visitor_t.bposvec
|
|
Vector of block positions. Only cit_block and cit_try parents have the corresponding element in this vector.
|
|
|
|
|
|
ida_hexrays.ctree_visitor_t.clr_prune(self) -> None
|
|
Do not prune children. This is an internal function, no need to call it.
|
|
|
|
ida_hexrays.ctree_visitor_t.clr_restart(self) -> None
|
|
Do not restart. This is an internal function, no need to call it.
|
|
|
|
ida_hexrays.ctree_visitor_t.cv_flags
|
|
Ctree visitor property bits
|
|
|
|
|
|
ida_hexrays.ctree_visitor_t.is_postorder(self) -> bool
|
|
Should the leave...() functions be called?
|
|
|
|
ida_hexrays.ctree_visitor_t.leave_expr(self, arg0: "cexpr_t") -> int
|
|
Visit an expression after having visited its children. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs post-order traserval, i.e. an item is visited after its children.
|
|
|
|
@returns 0 to continue the traversal, nonzero to stop.
|
|
|
|
ida_hexrays.ctree_visitor_t.leave_insn(self, arg0: "cinsn_t") -> int
|
|
Visit a statement after having visited its children. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs post-order traserval, i.e. an item is visited after its children.
|
|
|
|
@returns 0 to continue the traversal, nonzero to stop.
|
|
|
|
ida_hexrays.ctree_visitor_t.maintain_parents(self) -> bool
|
|
Should the parent information by maintained?
|
|
|
|
ida_hexrays.ctree_visitor_t.must_prune(self) -> bool
|
|
Should the traversal skip the children of the current item?
|
|
|
|
ida_hexrays.ctree_visitor_t.must_restart(self) -> bool
|
|
Should the traversal restart?
|
|
|
|
ida_hexrays.ctree_visitor_t.only_insns(self) -> bool
|
|
Should all expressions be automatically pruned?
|
|
|
|
ida_hexrays.ctree_visitor_t.parent_expr(self) -> "cexpr_t *"
|
|
Get parent of the current item as an expression.
|
|
|
|
ida_hexrays.ctree_visitor_t.parent_insn(self) -> "cinsn_t *"
|
|
Get parent of the current item as a statement.
|
|
|
|
ida_hexrays.ctree_visitor_t.parents
|
|
Vector of parents of the current item.
|
|
|
|
ida_hexrays.ctree_visitor_t.prune_now(self) -> None
|
|
Prune children. This function may be called by a visitor() to skip all children of the current item.
|
|
|
|
|
|
ida_hexrays.ctree_visitor_t.set_restart(self) -> None
|
|
Restart the travesal. Meaningful only in apply_to_exprs()
|
|
|
|
ida_hexrays.ctree_visitor_t.visit_expr(self, arg0: "cexpr_t") -> int
|
|
Visit an expression. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs pre-order traserval, i.e. an item is visited before its children.
|
|
|
|
@returns 0 to continue the traversal, nonzero to stop.
|
|
|
|
ida_hexrays.ctree_visitor_t.visit_insn(self, arg0: "cinsn_t") -> int
|
|
Visit a statement. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs pre-order traserval, i.e. an item is visited before its children.
|
|
|
|
@returns 0 to continue the traversal, nonzero to stop.
|
|
|
|
ida_hexrays.ctry_t
|
|
|
|
ida_hexrays.ctry_t.__eq__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.__ge__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.__gt__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.ctry_t.__le__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.__lt__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.__ne__(self, r: "ctry_t") -> bool
|
|
|
|
ida_hexrays.ctry_t.catchs
|
|
"catch all", if present, must be the last element. wind-statements must have "catch all" and nothing else.
|
|
|
|
|
|
ida_hexrays.ctry_t.compare(self, r: "ctry_t") -> int
|
|
|
|
ida_hexrays.ctry_t.is_wind
|
|
Is C++ wind statement? (not part of the C++ language) MSVC generates code like the following to keep track of constructed objects and destroy them upon an exception. Example:
|
|
// an object is constructed at this point __wind { // some other code that may throw an exception } __unwind { // this code is executed only if there was an exception // in the __wind block. normally here we destroy the object // after that the exception is passed to the // exception handler, regular control flow is interrupted here. } // regular logic continues here, if there were no exceptions // also the object's destructor is called
|
|
|
|
|
|
ida_hexrays.ctry_t.new_state
|
|
new state number (internal, MSVC related)
|
|
|
|
ida_hexrays.ctry_t.old_state
|
|
old state number (internal, MSVC related)
|
|
|
|
ida_hexrays.cwhile_t
|
|
|
|
ida_hexrays.cwhile_t.__eq__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.__ge__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.__gt__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.__init__(self)
|
|
|
|
ida_hexrays.cwhile_t.__le__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.__lt__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.__ne__(self, r: "cwhile_t") -> bool
|
|
|
|
ida_hexrays.cwhile_t.compare(self, r: "cwhile_t") -> int
|
|
|
|
ida_hexrays.debug_hexrays_ctree(level: int, msg: str) -> None
|
|
|
|
ida_hexrays.decompile(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None, decomp_flags: int = 0) -> "cfuncptr_t"
|
|
Decompile a snippet or a function.
|
|
|
|
@param mbr: what to decompile
|
|
@param hf: extended error information (if failed)
|
|
@param decomp_flags: bitwise combination of decompile() flags... bits
|
|
@returns pointer to the decompilation result (a reference counted pointer). nullptr if failed.
|
|
|
|
ida_hexrays.decompile(ea, hf = None, flags = 0)
|
|
Decompile a snippet or a function.
|
|
|
|
@param hf: extended error information (if failed)
|
|
@returns pointer to the decompilation result (a reference counted pointer). nullptr if failed.
|
|
|
|
ida_hexrays.decompile_func(pfn: "func_t *", hf: "hexrays_failure_t" = None, decomp_flags: int = 0) -> "cfuncptr_t"
|
|
Decompile a function. Multiple decompilations of the same function return the same object.
|
|
|
|
@param pfn: pointer to function to decompile
|
|
@param hf: extended error information (if failed)
|
|
@param decomp_flags: bitwise combination of decompile() flags... bits
|
|
@returns pointer to the decompilation result (a reference counted pointer). nullptr if failed.
|
|
|
|
ida_hexrays.decompile_many(outfile: str, funcaddrs: "uint64vec_t", flags: int) -> bool
|
|
Batch decompilation. Decompile all or the specified functions
|
|
|
|
@param outfile: name of the output file
|
|
@param funcaddrs: list of functions to decompile. If nullptr or empty, then decompile all nonlib functions
|
|
@param flags: Batch decompilation bits
|
|
@returns true if no internal error occurred and the user has not cancelled decompilation
|
|
|
|
ida_hexrays.dereference(e, ptrsize, is_float = False)
|
|
Dereference a pointer. This function dereferences a pointer expression. It performs the following conversion: "ptr" => "*ptr" It can handle discrepancies in the pointer type and the access size.
|
|
|
|
@param e: expression to deference
|
|
@param ptrsize: access size
|
|
@returns dereferenced expression
|
|
|
|
ida_hexrays.dstr(tif: "tinfo_t") -> str
|
|
Print the specified type info. This function can be used from a debugger by typing "tif->dstr()"
|
|
|
|
|
|
ida_hexrays.dummy_ptrtype(ptrsize: int, isfp: bool) -> "tinfo_t"
|
|
Generate a dummy pointer type
|
|
|
|
@param ptrsize: size of pointed object
|
|
@param isfp: is floating point object?
|
|
|
|
ida_hexrays.eamap_begin(map: "eamap_t") -> "eamap_iterator_t"
|
|
Get iterator pointing to the beginning of eamap_t.
|
|
|
|
ida_hexrays.eamap_clear(map: "eamap_t") -> None
|
|
Clear eamap_t.
|
|
|
|
ida_hexrays.eamap_end(map: "eamap_t") -> "eamap_iterator_t"
|
|
Get iterator pointing to the end of eamap_t.
|
|
|
|
ida_hexrays.eamap_erase(map: "eamap_t", p: "eamap_iterator_t") -> None
|
|
Erase current element from eamap_t.
|
|
|
|
ida_hexrays.eamap_find(map: "eamap_t", key: "ea_t const &") -> "eamap_iterator_t"
|
|
Find the specified key in eamap_t.
|
|
|
|
ida_hexrays.eamap_first(p: "eamap_iterator_t") -> "ea_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.eamap_free(map: "eamap_t") -> None
|
|
Delete eamap_t instance.
|
|
|
|
ida_hexrays.eamap_insert(map: "eamap_t", key: "ea_t const &", val: "cinsnptrvec_t") -> "eamap_iterator_t"
|
|
Insert new (ea_t, cinsnptrvec_t) pair into eamap_t.
|
|
|
|
ida_hexrays.eamap_iterator_t
|
|
|
|
ida_hexrays.eamap_iterator_t.__eq__(self, p: "eamap_iterator_t") -> bool
|
|
|
|
ida_hexrays.eamap_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.eamap_iterator_t.__ne__(self, p: "eamap_iterator_t") -> bool
|
|
|
|
ida_hexrays.eamap_new() -> "eamap_t *"
|
|
Create a new eamap_t instance.
|
|
|
|
ida_hexrays.eamap_next(p: "eamap_iterator_t") -> "eamap_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.eamap_prev(p: "eamap_iterator_t") -> "eamap_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.eamap_second(p: "eamap_iterator_t") -> "cinsnptrvec_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.eamap_size(map: "eamap_t") -> "size_t"
|
|
Get size of eamap_t.
|
|
|
|
ida_hexrays.eamap_t
|
|
|
|
ida_hexrays.eamap_t.__init__(self)
|
|
|
|
ida_hexrays.eamap_t.at(self, _Keyval: "unsigned long long const &") -> "cinsnptrvec_t &"
|
|
|
|
ida_hexrays.eamap_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.fnumber_t
|
|
|
|
ida_hexrays.fnumber_t.__eq__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t.__ge__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t.__gt__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t.__init__(self)
|
|
|
|
ida_hexrays.fnumber_t.__le__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t.__lt__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t.__ne__(self, r: "fnumber_t") -> bool
|
|
|
|
ida_hexrays.fnumber_t._print(self) -> None
|
|
|
|
ida_hexrays.fnumber_t.calc_max_exp(self) -> int
|
|
|
|
ida_hexrays.fnumber_t.compare(self, r: "fnumber_t") -> int
|
|
|
|
ida_hexrays.fnumber_t.dereference_const_uint16(self) -> "uint16 const *"
|
|
|
|
ida_hexrays.fnumber_t.dereference_uint16(self) -> "uint16 *"
|
|
|
|
ida_hexrays.fnumber_t.fnum
|
|
Internal representation of the number.
|
|
|
|
ida_hexrays.fnumber_t.is_nan(self) -> bool
|
|
|
|
ida_hexrays.fnumber_t.nbytes
|
|
Original size of the constant in bytes.
|
|
|
|
ida_hexrays.gco_info_t
|
|
|
|
ida_hexrays.gco_info_t.__init__(self)
|
|
|
|
ida_hexrays.gco_info_t.append_to_list(self, list: "mlist_t", mba: "mba_t") -> bool
|
|
Append operand info to LIST. This function converts IDA register number or stack offset to a decompiler list.
|
|
|
|
@param list: list to append to
|
|
@param mba: microcode object
|
|
|
|
ida_hexrays.gco_info_t.cvt_to_ivl(self) -> "vivl_t"
|
|
Convert operand info to VIVL. The returned VIVL can be used, for example, in a call of get_valranges().
|
|
|
|
|
|
ida_hexrays.gco_info_t.is_def(self) -> bool
|
|
|
|
ida_hexrays.gco_info_t.is_reg(self) -> bool
|
|
|
|
ida_hexrays.gco_info_t.is_use(self) -> bool
|
|
|
|
ida_hexrays.gco_info_t.name
|
|
register or stkvar name
|
|
|
|
ida_hexrays.gco_info_t.regnum
|
|
if register, the register id
|
|
|
|
ida_hexrays.gco_info_t.size
|
|
operand size
|
|
|
|
ida_hexrays.gco_info_t.stkoff
|
|
if stkvar, stack offset
|
|
|
|
ida_hexrays.gen_microcode(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None, retlist: "mlist_t" = None, decomp_flags: int = 0, reqmat: "mba_maturity_t" = MMAT_GLBOPT3) -> "mba_t *"
|
|
Generate microcode of an arbitrary code snippet
|
|
|
|
@param mbr: snippet ranges
|
|
@param hf: extended error information (if failed)
|
|
@param retlist: list of registers the snippet returns
|
|
@param decomp_flags: bitwise combination of decompile() flags... bits
|
|
@param reqmat: required microcode maturity
|
|
@returns pointer to the microcode, nullptr if failed.
|
|
|
|
ida_hexrays.get_ctype_name(op: "ctype_t") -> str
|
|
|
|
ida_hexrays.get_current_operand(out: "gco_info_t") -> bool
|
|
Get the instruction operand under the cursor. This function determines the operand that is under the cursor in the active disassembly listing. If the operand refers to a register or stack variable, it returns true.
|
|
|
|
|
|
ida_hexrays.get_float_type(width: int) -> "tinfo_t"
|
|
Get a type of a floating point value with the specified width
|
|
|
|
@param width: width of the desired type
|
|
@returns type info object
|
|
|
|
ida_hexrays.get_hexrays_version() -> str
|
|
Get decompiler version. The returned string is of the form <major>.<minor>.<revision>.<build-date>
|
|
|
|
@returns pointer to version string. For example: "2.0.0.140605"
|
|
|
|
ida_hexrays.get_int_type_by_width_and_sign(srcwidth: int, sign: "type_sign_t") -> "tinfo_t"
|
|
Create a type info by width and sign. Returns a simple type (examples: int, short) with the given width and sign.
|
|
|
|
@param srcwidth: size of the type in bytes
|
|
@param sign: sign of the type
|
|
|
|
ida_hexrays.get_merror_desc(code: "merror_t", mba: "mba_t") -> str
|
|
Get textual description of an error code
|
|
|
|
@param code: Microcode error codes
|
|
@param mba: the microcode array
|
|
@returns the error address
|
|
|
|
ida_hexrays.get_mreg_name(reg: "mreg_t", width: int, ud: "void *" = None) -> str
|
|
Get the microregister name.
|
|
|
|
@param reg: microregister number
|
|
@param width: size of microregister in bytes. may be bigger than the real register size.
|
|
@param ud: reserved, must be nullptr
|
|
@returns width of the printed register. this value may be less than the WIDTH argument.
|
|
|
|
ida_hexrays.get_op_signness(op: "ctype_t") -> "type_sign_t"
|
|
Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv.
|
|
|
|
ida_hexrays.get_signed_mcode(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.get_temp_regs() -> "mlist_t const &"
|
|
Get list of temporary registers. Tempregs are temporary registers that are used during code generation. They do not map to regular processor registers. They are used only to store temporary values during execution of one instruction. Tempregs may not be used to pass a value from one block to another. In other words, at the end of a block all tempregs must be dead.
|
|
|
|
|
|
ida_hexrays.get_type(id: int, tif: "tinfo_t", guess: "type_source_t") -> bool
|
|
Get a global type. Global types are types of addressable objects and struct/union/enum types
|
|
|
|
@param id: address or id of the object
|
|
@param tif: buffer for the answer
|
|
@param guess: what kind of types to consider
|
|
@returns success
|
|
|
|
ida_hexrays.get_unk_type(size: int) -> "tinfo_t"
|
|
Create a partial type info by width. Returns a partially defined type (examples: _DWORD, _BYTE) with the given width.
|
|
|
|
@param size: size of the type in bytes
|
|
|
|
ida_hexrays.get_unsigned_mcode(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.get_widget_vdui(f: "TWidget *") -> "vdui_t *"
|
|
Get the vdui_t instance associated to the TWidget
|
|
|
|
@param f: pointer to window
|
|
@returns a vdui_t *, or nullptr
|
|
|
|
ida_hexrays.getb_reginsn(ins: "minsn_t") -> "minsn_t *"
|
|
Skip assertions backward.
|
|
|
|
ida_hexrays.getf_reginsn(ins: "minsn_t") -> "minsn_t *"
|
|
Skip assertions forward.
|
|
|
|
ida_hexrays.graph_chains_t
|
|
|
|
ida_hexrays.graph_chains_t.__init__(self)
|
|
|
|
ida_hexrays.graph_chains_t.acquire(self) -> None
|
|
Lock the chains.
|
|
|
|
ida_hexrays.graph_chains_t.for_all_chains(self, cv: "chain_visitor_t", gca_flags: int) -> int
|
|
Visit all chains
|
|
|
|
@param cv: chain visitor
|
|
@param gca_flags: combination of GCA_ bits
|
|
|
|
ida_hexrays.graph_chains_t.is_locked(self) -> bool
|
|
Are the chains locked? It is a good idea to lock the chains before using them. This ensures that they won't be recalculated and reallocated during the use. See the chain_keeper_t class for that.
|
|
|
|
|
|
ida_hexrays.graph_chains_t.release(self) -> None
|
|
Unlock the chains.
|
|
|
|
ida_hexrays.graph_chains_t.swap(self, r: "graph_chains_t") -> None
|
|
|
|
ida_hexrays.has_cached_cfunc(ea: ida_idaapi.ea_t) -> bool
|
|
Do we have a cached decompilation result for 'ea'?
|
|
|
|
ida_hexrays.has_mcode_seloff(op: "mcode_t") -> bool
|
|
|
|
ida_hexrays.hexrays_alloc(size: "size_t") -> "void *"
|
|
|
|
ida_hexrays.hexrays_failure_t
|
|
|
|
ida_hexrays.hexrays_failure_t.__init__(self, *args)
|
|
|
|
ida_hexrays.hexrays_failure_t.code
|
|
Microcode error codes
|
|
|
|
ida_hexrays.hexrays_failure_t.desc(self) -> str
|
|
|
|
ida_hexrays.hexrays_failure_t.errea
|
|
associated address
|
|
|
|
ida_hexrays.hexrays_failure_t.str
|
|
string information
|
|
|
|
ida_hexrays.hexrays_free(ptr: "void *") -> None
|
|
|
|
ida_hexrays.hexwarn_t
|
|
|
|
ida_hexrays.hexwarn_t.__eq__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.__ge__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.__gt__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.__init__(self)
|
|
|
|
ida_hexrays.hexwarn_t.__le__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.__lt__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.__ne__(self, r: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarn_t.compare(self, r: "hexwarn_t") -> int
|
|
|
|
ida_hexrays.hexwarn_t.ea
|
|
Address where the warning occurred.
|
|
|
|
ida_hexrays.hexwarn_t.id
|
|
Warning id.
|
|
|
|
ida_hexrays.hexwarn_t.text
|
|
Fully formatted text of the warning.
|
|
|
|
ida_hexrays.hexwarns_t
|
|
|
|
ida_hexrays.hexwarns_t.__eq__(self, r: "hexwarns_t") -> bool
|
|
|
|
ida_hexrays.hexwarns_t.__getitem__(self, i: "size_t") -> "hexwarn_t const &"
|
|
|
|
ida_hexrays.hexwarns_t.__init__(self, *args)
|
|
|
|
ida_hexrays.hexwarns_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.hexwarns_t.__ne__(self, r: "hexwarns_t") -> bool
|
|
|
|
ida_hexrays.hexwarns_t.__setitem__(self, i: "size_t", v: "hexwarn_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t._del(self, x: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarns_t.add_unique(self, x: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarns_t.append(self, x: "hexwarn_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t.at(self, _idx: "size_t") -> "hexwarn_t const &"
|
|
|
|
ida_hexrays.hexwarns_t.begin(self, *args) -> "qvector< hexwarn_t >::const_iterator"
|
|
|
|
ida_hexrays.hexwarns_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.hexwarns_t.clear(self) -> None
|
|
|
|
ida_hexrays.hexwarns_t.empty(self) -> bool
|
|
|
|
ida_hexrays.hexwarns_t.end(self, *args) -> "qvector< hexwarn_t >::const_iterator"
|
|
|
|
ida_hexrays.hexwarns_t.erase(self, *args) -> "qvector< hexwarn_t >::iterator"
|
|
|
|
ida_hexrays.hexwarns_t.extend(self, x: "hexwarns_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t.extract(self) -> "hexwarn_t *"
|
|
|
|
ida_hexrays.hexwarns_t.find(self, *args) -> "qvector< hexwarn_t >::const_iterator"
|
|
|
|
ida_hexrays.hexwarns_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.hexwarns_t.has(self, x: "hexwarn_t") -> bool
|
|
|
|
ida_hexrays.hexwarns_t.inject(self, s: "hexwarn_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t.insert(self, it: "hexwarn_t", x: "hexwarn_t") -> "qvector< hexwarn_t >::iterator"
|
|
|
|
ida_hexrays.hexwarns_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.hexwarns_t.push_back(self, *args) -> "hexwarn_t &"
|
|
|
|
ida_hexrays.hexwarns_t.qclear(self) -> None
|
|
|
|
ida_hexrays.hexwarns_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.hexwarns_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.hexwarns_t.swap(self, r: "hexwarns_t") -> None
|
|
|
|
ida_hexrays.hexwarns_t.truncate(self) -> None
|
|
|
|
ida_hexrays.history_item_t
|
|
|
|
ida_hexrays.history_item_t.__init__(self, *args)
|
|
|
|
ida_hexrays.history_item_t.curr_ea
|
|
Current address.
|
|
|
|
ida_hexrays.history_item_t.end
|
|
BADADDR-decompile a function; otherwise end of the range.
|
|
|
|
ida_hexrays.history_item_t.func_ea
|
|
The entry address of the decompiled function.
|
|
|
|
ida_hexrays.history_t
|
|
|
|
ida_hexrays.history_t.__init__(self)
|
|
|
|
ida_hexrays.history_t.pop(self) -> "history_item_t"
|
|
|
|
ida_hexrays.history_t.push(self, v: "history_item_t") -> None
|
|
|
|
ida_hexrays.history_t.top(self, *args) -> "history_item_t &"
|
|
|
|
ida_hexrays.hxe_begin_inlining
|
|
Starting to inline outlined functions.
|
|
|
|
|
|
ida_hexrays.hxe_build_callinfo
|
|
Analyzing a call instruction.
|
|
|
|
|
|
ida_hexrays.hxe_callinfo_built
|
|
A call instruction has been anallyzed.
|
|
|
|
|
|
ida_hexrays.hxe_calls_done
|
|
All calls have been analyzed.
|
|
|
|
|
|
ida_hexrays.hxe_close_pseudocode
|
|
Pseudocode view is being closed.
|
|
|
|
|
|
ida_hexrays.hxe_cmt_changed
|
|
Comment got changed.
|
|
|
|
|
|
ida_hexrays.hxe_collect_warnings
|
|
Collect warning messages from plugins. These warnings will be displayed at the function header, after the user-defined comments.
|
|
|
|
|
|
ida_hexrays.hxe_combine
|
|
Trying to combine instructions of basic block.
|
|
|
|
|
|
ida_hexrays.hxe_create_hint
|
|
Create a hint for the current item.
|
|
|
|
|
|
ida_hexrays.hxe_curpos
|
|
Current cursor position has been changed. (for example, by left-clicking or using keyboard)
|
|
|
|
|
|
|
|
ida_hexrays.hxe_double_click
|
|
Mouse double click.
|
|
|
|
|
|
ida_hexrays.hxe_flowchart
|
|
Flowchart has been generated.
|
|
|
|
|
|
ida_hexrays.hxe_func_printed
|
|
Function text has been generated. Plugins may modify the text in cfunc_t::sv. However, it is too late to modify the ctree or microcode. The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree items.
|
|
|
|
|
|
ida_hexrays.hxe_glbopt
|
|
Global optimization has been finished. If microcode is modified, MERR_LOOP must be returned. It will cause a complete restart of the optimization.
|
|
|
|
|
|
ida_hexrays.hxe_inlined_func
|
|
A set of ranges got inlined.
|
|
|
|
|
|
ida_hexrays.hxe_inlining_func
|
|
A set of ranges is going to be inlined.
|
|
|
|
|
|
ida_hexrays.hxe_interr
|
|
Internal error has occurred.
|
|
|
|
|
|
ida_hexrays.hxe_keyboard
|
|
Keyboard has been hit.
|
|
|
|
|
|
ida_hexrays.hxe_locopt
|
|
Basic block level optimization has been finished.
|
|
|
|
|
|
ida_hexrays.hxe_maturity
|
|
Ctree maturity level is being changed.
|
|
|
|
|
|
ida_hexrays.hxe_microcode
|
|
Microcode has been generated.
|
|
|
|
|
|
ida_hexrays.hxe_open_pseudocode
|
|
New pseudocode view has been opened.
|
|
|
|
|
|
ida_hexrays.hxe_populating_popup
|
|
Populating popup menu. We can add menu items now.
|
|
|
|
|
|
ida_hexrays.hxe_pre_structural
|
|
Structure analysis is starting.
|
|
|
|
|
|
ida_hexrays.hxe_prealloc
|
|
Local variables: preallocation step begins.
|
|
|
|
|
|
ida_hexrays.hxe_preoptimized
|
|
Microcode has been preoptimized.
|
|
|
|
|
|
ida_hexrays.hxe_print_func
|
|
Printing ctree and generating text.
|
|
|
|
|
|
ida_hexrays.hxe_prolog
|
|
Prolog analysis has been finished.
|
|
|
|
|
|
ida_hexrays.hxe_refresh_pseudocode
|
|
Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is forbidden in this event.
|
|
|
|
|
|
ida_hexrays.hxe_resolve_stkaddrs
|
|
The optimizer is about to resolve stack addresses.
|
|
|
|
|
|
ida_hexrays.hxe_right_click
|
|
Mouse right click. Use hxe_populating_popup instead, in case you want to add items in the popup menu.
|
|
|
|
|
|
ida_hexrays.hxe_stkpnts
|
|
SP change points have been calculated.
|
|
|
|
|
|
ida_hexrays.hxe_structural
|
|
Structural analysis has been finished.
|
|
|
|
|
|
ida_hexrays.hxe_switch_pseudocode
|
|
Existing pseudocode view has been reloaded with a new function. Its text has not been refreshed yet, only cfunc and mba pointers are ready.
|
|
|
|
|
|
ida_hexrays.hxe_text_ready
|
|
Decompiled text is ready.
|
|
|
|
|
|
ida_hexrays.init_hexrays_plugin(flags: int = 0) -> bool
|
|
Check that your plugin is compatible with hex-rays decompiler. This function must be called before calling any other decompiler function.
|
|
|
|
@param flags: reserved, must be 0
|
|
@returns true if the decompiler exists and is compatible with your plugin
|
|
|
|
ida_hexrays.install_hexrays_callback(callback)
|
|
Install handler for decompiler events.
|
|
|
|
@param callback: handler to install
|
|
@returns false if failed
|
|
|
|
ida_hexrays.install_microcode_filter(filter: "microcode_filter_t", install: bool = True) -> bool
|
|
register/unregister non-standard microcode generator
|
|
|
|
@param filter: - microcode generator object
|
|
@param install: - TRUE - register the object, FALSE - unregister
|
|
@returns success
|
|
|
|
ida_hexrays.is_additive(op: "ctype_t") -> bool
|
|
Is additive operator?
|
|
|
|
ida_hexrays.is_assignment(op: "ctype_t") -> bool
|
|
Is assignment operator?
|
|
|
|
ida_hexrays.is_binary(op: "ctype_t") -> bool
|
|
Is binary operator?
|
|
|
|
ida_hexrays.is_bitop(op: "ctype_t") -> bool
|
|
Is bit related operator?
|
|
|
|
ida_hexrays.is_bool_type(type: "tinfo_t") -> bool
|
|
Is a boolean type?
|
|
|
|
@returns true if the type is a boolean type
|
|
|
|
ida_hexrays.is_break_consumer(op: "ctype_t") -> bool
|
|
Does a break statement influence the specified statement code?
|
|
|
|
ida_hexrays.is_cmpop_with_eq(cmpop: "cmpop_t") -> bool
|
|
|
|
ida_hexrays.is_cmpop_without_eq(cmpop: "cmpop_t") -> bool
|
|
|
|
ida_hexrays.is_commutative(op: "ctype_t") -> bool
|
|
Is commutative operator?
|
|
|
|
ida_hexrays.is_inplace_def(type: "tinfo_t") -> bool
|
|
Is struct/union/enum definition (not declaration)?
|
|
|
|
ida_hexrays.is_kreg(r: "mreg_t") -> bool
|
|
Is a kernel register? Kernel registers are temporary registers that can be used freely. They may be used to store values that cross instruction or basic block boundaries. Kernel registers do not map to regular processor registers. See also mba_t::alloc_kreg()
|
|
|
|
|
|
ida_hexrays.is_logical(op: "ctype_t") -> bool
|
|
Is logical operator?
|
|
|
|
ida_hexrays.is_loop(op: "ctype_t") -> bool
|
|
Is loop statement code?
|
|
|
|
ida_hexrays.is_lvalue(op: "ctype_t") -> bool
|
|
Is Lvalue operator?
|
|
|
|
ida_hexrays.is_may_access(maymust: "maymust_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_addsub(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_call(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_commutative(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_convertible_to_jmp(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_convertible_to_set(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_divmod(op: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_fpu(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_j1(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_jcond(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_propagatable(mcode: "mcode_t") -> bool
|
|
May opcode be propagated? Such opcodes can be used in sub-instructions (nested instructions) There is a handful of non-propagatable opcodes, like jumps, ret, nop, etc All other regular opcodes are propagatable and may appear in a nested instruction.
|
|
|
|
|
|
ida_hexrays.is_mcode_set(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_set1(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_shift(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_mcode_xdsu(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_multiplicative(op: "ctype_t") -> bool
|
|
Is multiplicative operator?
|
|
|
|
ida_hexrays.is_nonbool_type(type: "tinfo_t") -> bool
|
|
Is definitely a non-boolean type?
|
|
|
|
@returns true if the type is a non-boolean type (non bool and well defined)
|
|
|
|
ida_hexrays.is_paf(t: "type_t") -> bool
|
|
Is a pointer, array, or function type?
|
|
|
|
ida_hexrays.is_prepost(op: "ctype_t") -> bool
|
|
Is pre/post increment/decrement operator?
|
|
|
|
ida_hexrays.is_ptr_or_array(t: "type_t") -> bool
|
|
Is a pointer or array type?
|
|
|
|
ida_hexrays.is_relational(op: "ctype_t") -> bool
|
|
Is comparison operator?
|
|
|
|
ida_hexrays.is_signed_cmpop(cmpop: "cmpop_t") -> bool
|
|
|
|
ida_hexrays.is_signed_mcode(code: "mcode_t") -> bool
|
|
|
|
ida_hexrays.is_small_udt(tif: "tinfo_t") -> bool
|
|
Is a small structure or union?
|
|
|
|
@returns true if the type is a small UDT (user defined type). Small UDTs fit into a register (or pair or registers) as a rule.
|
|
|
|
ida_hexrays.is_type_correct(ptr: "type_t const *") -> bool
|
|
Verify a type string.
|
|
|
|
@returns true if type string is correct
|
|
|
|
ida_hexrays.is_unary(op: "ctype_t") -> bool
|
|
Is unary operator?
|
|
|
|
ida_hexrays.is_unsigned_cmpop(cmpop: "cmpop_t") -> bool
|
|
|
|
ida_hexrays.is_unsigned_mcode(code: "mcode_t") -> bool
|
|
|
|
ida_hexrays.iterator
|
|
|
|
ida_hexrays.iterator.__eq__(self, n: "iterator") -> bool
|
|
|
|
ida_hexrays.iterator.__init__(self, n: int = -1)
|
|
|
|
ida_hexrays.iterator.__ne__(self, n: "iterator") -> bool
|
|
|
|
ida_hexrays.iterator.__ref__(self) -> int
|
|
|
|
ida_hexrays.ivl_t
|
|
|
|
ida_hexrays.ivl_t.__eq__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.__ge__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.__gt__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.__init__(self, _off: int = 0, _size: int = 0)
|
|
|
|
ida_hexrays.ivl_t.__le__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.__lt__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.__ne__(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.clear(self) -> None
|
|
|
|
ida_hexrays.ivl_t.compare(self, r: "ivl_t") -> int
|
|
|
|
ida_hexrays.ivl_t.contains(self, off2: int) -> bool
|
|
|
|
ida_hexrays.ivl_t.dstr(self) -> str
|
|
|
|
ida_hexrays.ivl_t.empty(self) -> bool
|
|
|
|
ida_hexrays.ivl_t.extend_to_cover(self, r: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.includes(self, ivl: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_t.intersect(self, r: "ivl_t") -> None
|
|
|
|
ida_hexrays.ivl_t.overlap(self, ivl: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivl_with_name_t
|
|
|
|
ida_hexrays.ivl_with_name_t.__init__(self)
|
|
|
|
ida_hexrays.ivlset_t
|
|
|
|
ida_hexrays.ivlset_t.__eq__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.__ge__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.__gt__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.__init__(self, *args)
|
|
|
|
ida_hexrays.ivlset_t.__le__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.__lt__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.__ne__(self, r: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t._print(self) -> None
|
|
|
|
ida_hexrays.ivlset_t.add(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. add(ivl: const ivl_t &) -> bool
|
|
1. add(ea: ida_idaapi.ea_t, size: asize_t) -> bool
|
|
2. add(ivs: const ivlset_t &) -> bool
|
|
|
|
# 0: add(ivl: const ivl_t &) -> bool
|
|
|
|
|
|
# 1: add(ea: ida_idaapi.ea_t, size: asize_t) -> bool
|
|
|
|
|
|
# 2: add(ivs: const ivlset_t &) -> bool
|
|
|
|
ida_hexrays.ivlset_t.addmasked(self, ivs: "ivlset_t", mask: "ivl_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.compare(self, r: "ivlset_t") -> int
|
|
|
|
ida_hexrays.ivlset_t.contains(self, off: int) -> bool
|
|
|
|
ida_hexrays.ivlset_t.count(self) -> "asize_t"
|
|
|
|
ida_hexrays.ivlset_t.dstr(self) -> str
|
|
|
|
ida_hexrays.ivlset_t.has_common(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. has_common(ivl: const ivl_t &, strict: bool=false) -> bool
|
|
1. has_common(ivs: const ivlset_t &) -> bool
|
|
|
|
# 0: has_common(ivl: const ivl_t &, strict: bool=false) -> bool
|
|
|
|
|
|
# 1: has_common(ivs: const ivlset_t &) -> bool
|
|
|
|
ida_hexrays.ivlset_t.includes(self, ivs: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.intersect(self, ivs: "ivlset_t") -> bool
|
|
|
|
ida_hexrays.ivlset_t.sub(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. sub(ivl: const ivl_t &) -> bool
|
|
1. sub(ea: ida_idaapi.ea_t, size: asize_t) -> bool
|
|
2. sub(ivs: const ivlset_t &) -> bool
|
|
|
|
# 0: sub(ivl: const ivl_t &) -> bool
|
|
|
|
|
|
# 1: sub(ea: ida_idaapi.ea_t, size: asize_t) -> bool
|
|
|
|
|
|
# 2: sub(ivs: const ivlset_t &) -> bool
|
|
|
|
ida_hexrays.jcnd2set(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.lexcompare(a: "mop_t", b: "mop_t") -> int
|
|
|
|
ida_hexrays.lnot(e)
|
|
Logically negate the specified expression. The specified expression will be logically negated. For example, "x == y" is converted into "x != y" by this function.
|
|
|
|
@param e: expression to negate. After the call, e must not be used anymore because it can be changed by the function. The function return value must be used to refer to the expression.
|
|
@returns logically negated expression.
|
|
|
|
ida_hexrays.locate_lvar(out: "lvar_locator_t", func_ea: ida_idaapi.ea_t, varname: str) -> bool
|
|
Find a variable by name.
|
|
|
|
@param out: output buffer for the variable locator
|
|
@param func_ea: function start address
|
|
@param varname: variable name
|
|
@returns success Since VARNAME is not always enough to find the variable, it may decompile the function.
|
|
|
|
ida_hexrays.lvar_locator_t
|
|
|
|
ida_hexrays.lvar_locator_t.__eq__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.__ge__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.__gt__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.__init__(self, *args)
|
|
|
|
ida_hexrays.lvar_locator_t.__le__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.__lt__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.__ne__(self, r: "lvar_locator_t") -> bool
|
|
|
|
ida_hexrays.lvar_locator_t.compare(self, r: "lvar_locator_t") -> int
|
|
|
|
ida_hexrays.lvar_locator_t.defea
|
|
Definition address. Usually, this is the address of the instruction that initializes the variable. In some cases it can be a fictional address.
|
|
|
|
|
|
ida_hexrays.lvar_locator_t.get_reg1(self) -> "mreg_t"
|
|
Get the register number of the variable.
|
|
|
|
ida_hexrays.lvar_locator_t.get_reg2(self) -> "mreg_t"
|
|
Get the number of the second register (works only for ALOC_REG2 lvars)
|
|
|
|
ida_hexrays.lvar_locator_t.get_scattered(self) -> "scattered_aloc_t &"
|
|
Get information about scattered variable.
|
|
|
|
ida_hexrays.lvar_locator_t.get_stkoff(self) -> int
|
|
Get offset of the varialbe in the stack frame.
|
|
|
|
@returns a non-negative value for stack variables. The value is an offset from the bottom of the stack frame in terms of vd-offsets. negative values mean error (not a stack variable)
|
|
|
|
ida_hexrays.lvar_locator_t.is_reg1(self) -> bool
|
|
Is variable located on one register?
|
|
|
|
ida_hexrays.lvar_locator_t.is_reg2(self) -> bool
|
|
Is variable located on two registers?
|
|
|
|
ida_hexrays.lvar_locator_t.is_reg_var(self) -> bool
|
|
Is variable located on register(s)?
|
|
|
|
ida_hexrays.lvar_locator_t.is_scattered(self) -> bool
|
|
Is variable scattered?
|
|
|
|
ida_hexrays.lvar_locator_t.is_stk_var(self) -> bool
|
|
Is variable located on the stack?
|
|
|
|
ida_hexrays.lvar_locator_t.location
|
|
Variable location.
|
|
|
|
ida_hexrays.lvar_mapping_begin(map: "lvar_mapping_t") -> "lvar_mapping_iterator_t"
|
|
Get iterator pointing to the beginning of lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_clear(map: "lvar_mapping_t") -> None
|
|
Clear lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_end(map: "lvar_mapping_t") -> "lvar_mapping_iterator_t"
|
|
Get iterator pointing to the end of lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_erase(map: "lvar_mapping_t", p: "lvar_mapping_iterator_t") -> None
|
|
Erase current element from lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_find(map: "lvar_mapping_t", key: "lvar_locator_t") -> "lvar_mapping_iterator_t"
|
|
Find the specified key in lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_first(p: "lvar_mapping_iterator_t") -> "lvar_locator_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.lvar_mapping_free(map: "lvar_mapping_t") -> None
|
|
Delete lvar_mapping_t instance.
|
|
|
|
ida_hexrays.lvar_mapping_insert(map: "lvar_mapping_t", key: "lvar_locator_t", val: "lvar_locator_t") -> "lvar_mapping_iterator_t"
|
|
Insert new (lvar_locator_t, lvar_locator_t) pair into lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_iterator_t
|
|
|
|
ida_hexrays.lvar_mapping_iterator_t.__eq__(self, p: "lvar_mapping_iterator_t") -> bool
|
|
|
|
ida_hexrays.lvar_mapping_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.lvar_mapping_iterator_t.__ne__(self, p: "lvar_mapping_iterator_t") -> bool
|
|
|
|
ida_hexrays.lvar_mapping_new() -> "lvar_mapping_t *"
|
|
Create a new lvar_mapping_t instance.
|
|
|
|
ida_hexrays.lvar_mapping_next(p: "lvar_mapping_iterator_t") -> "lvar_mapping_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.lvar_mapping_prev(p: "lvar_mapping_iterator_t") -> "lvar_mapping_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.lvar_mapping_second(p: "lvar_mapping_iterator_t") -> "lvar_locator_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.lvar_mapping_size(map: "lvar_mapping_t") -> "size_t"
|
|
Get size of lvar_mapping_t.
|
|
|
|
ida_hexrays.lvar_mapping_t
|
|
|
|
ida_hexrays.lvar_mapping_t.__init__(self)
|
|
|
|
ida_hexrays.lvar_mapping_t.at(self, _Keyval: "lvar_locator_t") -> "lvar_locator_t &"
|
|
|
|
ida_hexrays.lvar_mapping_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.lvar_ref_t
|
|
|
|
ida_hexrays.lvar_ref_t.__eq__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.__ge__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.__gt__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.__init__(self, *args)
|
|
|
|
ida_hexrays.lvar_ref_t.__le__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.__lt__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.__ne__(self, r: "lvar_ref_t") -> bool
|
|
|
|
ida_hexrays.lvar_ref_t.compare(self, r: "lvar_ref_t") -> int
|
|
|
|
ida_hexrays.lvar_ref_t.idx
|
|
index into mba->vars
|
|
|
|
ida_hexrays.lvar_ref_t.mba
|
|
Pointer to the parent mba_t object. Since we need to access the 'mba->vars' array in order to retrieve the referenced variable, we keep a pointer to mba_t here. Note: this means this class and consequently mop_t, minsn_t, mblock_t are specific to a mba_t object and cannot migrate between them. fortunately this is not something we need to do. second, lvar_ref_t's appear only after MMAT_LVARS.
|
|
|
|
|
|
ida_hexrays.lvar_ref_t.off
|
|
offset from the beginning of the variable
|
|
|
|
ida_hexrays.lvar_ref_t.swap(self, r: "lvar_ref_t") -> None
|
|
|
|
ida_hexrays.lvar_ref_t.var(self) -> "lvar_t &"
|
|
Retrieve the referenced variable.
|
|
|
|
ida_hexrays.lvar_saved_info_t
|
|
|
|
ida_hexrays.lvar_saved_info_t.__eq__(self, r: "lvar_saved_info_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.__init__(self)
|
|
|
|
ida_hexrays.lvar_saved_info_t.__ne__(self, r: "lvar_saved_info_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.clear_keep(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.clr_nomap_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.clr_noptr_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.clr_split_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.clr_unused_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.cmt
|
|
Comment.
|
|
|
|
ida_hexrays.lvar_saved_info_t.flags
|
|
saved user lvar info property bits
|
|
|
|
|
|
ida_hexrays.lvar_saved_info_t.has_info(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.is_kept(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.is_nomap_lvar(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.is_noptr_lvar(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.is_split_lvar(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.is_unused_lvar(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_info_t.ll
|
|
Variable locator.
|
|
|
|
ida_hexrays.lvar_saved_info_t.name
|
|
Name.
|
|
|
|
ida_hexrays.lvar_saved_info_t.set_keep(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.set_nomap_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.set_noptr_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.set_split_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.set_unused_lvar(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_info_t.size
|
|
Type size (if not initialized then -1)
|
|
|
|
ida_hexrays.lvar_saved_info_t.type
|
|
Type.
|
|
|
|
ida_hexrays.lvar_saved_infos_t
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__eq__(self, r: "lvar_saved_infos_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__getitem__(self, i: "size_t") -> "lvar_saved_info_t const &"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__init__(self, *args)
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__ne__(self, r: "lvar_saved_infos_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.__setitem__(self, i: "size_t", v: "lvar_saved_info_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t._del(self, x: "lvar_saved_info_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.add_unique(self, x: "lvar_saved_info_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.append(self, x: "lvar_saved_info_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.at(self, _idx: "size_t") -> "lvar_saved_info_t const &"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.begin(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.clear(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.empty(self) -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.end(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.erase(self, *args) -> "qvector< lvar_saved_info_t >::iterator"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.extend(self, x: "lvar_saved_infos_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.extract(self) -> "lvar_saved_info_t *"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.find(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.has(self, x: "lvar_saved_info_t") -> bool
|
|
|
|
ida_hexrays.lvar_saved_infos_t.inject(self, s: "lvar_saved_info_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.insert(self, it: "lvar_saved_info_t", x: "lvar_saved_info_t") -> "qvector< lvar_saved_info_t >::iterator"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.push_back(self, *args) -> "lvar_saved_info_t &"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.qclear(self) -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.lvar_saved_infos_t.swap(self, r: "lvar_saved_infos_t") -> None
|
|
|
|
ida_hexrays.lvar_saved_infos_t.truncate(self) -> None
|
|
|
|
ida_hexrays.lvar_t
|
|
|
|
ida_hexrays.lvar_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.lvar_t.accepts_type(self, t: "tinfo_t", may_change_thisarg: bool = False) -> bool
|
|
Check if the variable accept the specified type. Some types are forbidden (void, function types, wrong arrays, etc)
|
|
|
|
|
|
ida_hexrays.lvar_t.append_list(self, mba: "mba_t", lst: "mlist_t", pad_if_scattered: bool = False) -> None
|
|
Append local variable to mlist.
|
|
|
|
@param mba: ptr to the current mba_t
|
|
@param lst: list to append to
|
|
@param pad_if_scattered: if true, append padding bytes in case of scattered lvar
|
|
|
|
ida_hexrays.lvar_t.clear_used(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_arg_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_automapped(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_decl_unused(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_dummy_arg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_fake_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_floating_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_mapdst_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_mreg_done(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_noptr_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_notarg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_overlapped_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_scattered_arg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_shared(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_split_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_spoiled_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_thisarg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_unknown_width(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_used_byref(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_user_info(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_user_name(self) -> None
|
|
|
|
ida_hexrays.lvar_t.clr_user_type(self) -> None
|
|
|
|
ida_hexrays.lvar_t.cmt
|
|
variable comment string
|
|
|
|
ida_hexrays.lvar_t.defblk
|
|
first block defining the variable. 0 for args, -1 if unknown
|
|
|
|
|
|
ida_hexrays.lvar_t.divisor
|
|
max known divisor of the variable
|
|
|
|
ida_hexrays.lvar_t.has_common(self, v: "lvar_t") -> bool
|
|
Do variables overlap?
|
|
|
|
ida_hexrays.lvar_t.has_common_bit(self, loc: "vdloc_t", width2: "asize_t") -> bool
|
|
Does the variable overlap with the specified location?
|
|
|
|
ida_hexrays.lvar_t.has_nice_name(self) -> bool
|
|
Does the variable have a nice name?
|
|
|
|
ida_hexrays.lvar_t.has_regname(self) -> bool
|
|
Has a register name? (like _RAX)
|
|
|
|
ida_hexrays.lvar_t.has_user_info(self) -> bool
|
|
Has any user-defined information?
|
|
|
|
ida_hexrays.lvar_t.has_user_name(self) -> bool
|
|
Has user-defined name?
|
|
|
|
ida_hexrays.lvar_t.has_user_type(self) -> bool
|
|
Has user-defined type?
|
|
|
|
ida_hexrays.lvar_t.in_asm(self) -> bool
|
|
Is variable used in an instruction translated into __asm?
|
|
|
|
ida_hexrays.lvar_t.is_aliasable(self, mba: "mba_t") -> bool
|
|
Is the variable aliasable?
|
|
|
|
@param mba: ptr to the current mba_t Aliasable variables may be modified indirectly (through a pointer)
|
|
|
|
ida_hexrays.lvar_t.is_arg_var(self) -> bool
|
|
Is the function argument?
|
|
|
|
ida_hexrays.lvar_t.is_automapped(self) -> bool
|
|
Was the variable automatically mapped to another variable?
|
|
|
|
ida_hexrays.lvar_t.is_decl_unused(self) -> bool
|
|
Was declared as __unused by the user? See CVAR_UNUSED.
|
|
|
|
ida_hexrays.lvar_t.is_dummy_arg(self) -> bool
|
|
Is a dummy argument (added to fill a hole in the argument list)
|
|
|
|
ida_hexrays.lvar_t.is_fake_var(self) -> bool
|
|
Is fake return variable?
|
|
|
|
ida_hexrays.lvar_t.is_floating_var(self) -> bool
|
|
Used by a fpu insn?
|
|
|
|
ida_hexrays.lvar_t.is_mapdst_var(self) -> bool
|
|
Other variable(s) map to this var?
|
|
|
|
ida_hexrays.lvar_t.is_noptr_var(self) -> bool
|
|
Variable type should not be a pointer.
|
|
|
|
ida_hexrays.lvar_t.is_notarg(self) -> bool
|
|
Is a local variable? (local variable cannot be an input argument)
|
|
|
|
ida_hexrays.lvar_t.is_overlapped_var(self) -> bool
|
|
Is overlapped variable?
|
|
|
|
ida_hexrays.lvar_t.is_result_var(self) -> bool
|
|
Is the function result?
|
|
|
|
ida_hexrays.lvar_t.is_shared(self) -> bool
|
|
Is lvar mapped to several chains.
|
|
|
|
ida_hexrays.lvar_t.is_split_var(self) -> bool
|
|
Is a split variable?
|
|
|
|
ida_hexrays.lvar_t.is_spoiled_var(self) -> bool
|
|
Is spoiled var? (meaningful only during lvar allocation)
|
|
|
|
ida_hexrays.lvar_t.is_thisarg(self) -> bool
|
|
Is 'this' argument of a C++ member function?
|
|
|
|
ida_hexrays.lvar_t.is_unknown_width(self) -> bool
|
|
Do we know the width of the variable?
|
|
|
|
ida_hexrays.lvar_t.is_used_byref(self) -> bool
|
|
Was the address of the variable taken?
|
|
|
|
ida_hexrays.lvar_t.mreg_done(self) -> bool
|
|
Have corresponding microregs been replaced by references to this variable?
|
|
|
|
ida_hexrays.lvar_t.name
|
|
variable name. use mba_t::set_nice_lvar_name() and mba_t::set_user_lvar_name() to modify it
|
|
|
|
|
|
ida_hexrays.lvar_t.set_arg_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_automapped(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_decl_unused(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_dummy_arg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_fake_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_final_lvar_type(self, t: "tinfo_t") -> None
|
|
Set final variable type.
|
|
|
|
ida_hexrays.lvar_t.set_floating_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_lvar_type(self, t: "tinfo_t", may_fail: bool = False) -> bool
|
|
Set variable type Note: this function does not modify the idb, only the lvar instance in the memory. For permanent changes see modify_user_lvars() Also, the variable type is not considered as final by the decompiler and may be modified later by the type derivation. In some cases set_final_var_type() may work better, but it does not do persistent changes to the database neither.
|
|
|
|
@param t: new type
|
|
@param may_fail: if false and type is bad, interr
|
|
@returns success
|
|
|
|
ida_hexrays.lvar_t.set_mapdst_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_mreg_done(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_non_typed(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_noptr_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_notarg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_overlapped_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_scattered_arg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_shared(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_split_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_spoiled_var(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_thisarg(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_typed(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_unknown_width(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_used(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_used_byref(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_user_name(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_user_type(self) -> None
|
|
|
|
ida_hexrays.lvar_t.set_width(self, w: int, svw_flags: int = 0) -> bool
|
|
Change the variable width. We call the variable size 'width', it is represents the number of bytes. This function may change the variable type using set_lvar_type().
|
|
|
|
@param w: new width
|
|
@param svw_flags: combination of SVW_... bits
|
|
@returns success
|
|
|
|
ida_hexrays.lvar_t.tif
|
|
variable type
|
|
|
|
ida_hexrays.lvar_t.type(self) -> "tinfo_t &"
|
|
Get variable type.
|
|
|
|
ida_hexrays.lvar_t.typed(self) -> bool
|
|
Has the variable a type?
|
|
|
|
ida_hexrays.lvar_t.used(self) -> bool
|
|
Is the variable used in the code?
|
|
|
|
ida_hexrays.lvar_t.was_scattered_arg(self) -> bool
|
|
Was lvar transformed from a scattered argument?
|
|
|
|
ida_hexrays.lvar_t.width
|
|
variable size in bytes
|
|
|
|
ida_hexrays.lvar_uservec_t
|
|
|
|
ida_hexrays.lvar_uservec_t.__init__(self)
|
|
|
|
ida_hexrays.lvar_uservec_t.clear(self) -> None
|
|
|
|
ida_hexrays.lvar_uservec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.lvar_uservec_t.find_info(self, vloc: "lvar_locator_t") -> "lvar_saved_info_t *"
|
|
find saved user settings for given var
|
|
|
|
ida_hexrays.lvar_uservec_t.keep_info(self, v: "lvar_t") -> None
|
|
Preserve user settings for given var.
|
|
|
|
ida_hexrays.lvar_uservec_t.lmaps
|
|
Local variable mapping (used for merging variables)
|
|
|
|
ida_hexrays.lvar_uservec_t.lvvec
|
|
User-specified names, types, comments for lvars. Variables without user-specified info are not present in this vector.
|
|
|
|
|
|
ida_hexrays.lvar_uservec_t.stkoff_delta
|
|
Delta to add to IDA stack offset to calculate Hex-Rays stack offsets. Should be set by the caller before calling save_user_lvar_settings();
|
|
|
|
|
|
ida_hexrays.lvar_uservec_t.swap(self, r: "lvar_uservec_t") -> None
|
|
|
|
ida_hexrays.lvar_uservec_t.ulv_flags
|
|
Various flags. Possible values are from lvar_uservec_t property bits.
|
|
|
|
ida_hexrays.lvars_t
|
|
|
|
ida_hexrays.lvars_t.__init__(self)
|
|
|
|
ida_hexrays.lvars_t.find(self, ll: "lvar_locator_t") -> "lvar_t *"
|
|
Find a variable at the specified location.
|
|
|
|
@param ll: variable location
|
|
@returns pointer to variable or nullptr
|
|
|
|
ida_hexrays.lvars_t.find_input_lvar(self, argloc: "vdloc_t", _size: int) -> int
|
|
Find an input variable at the specified location.
|
|
|
|
@param argloc: variable location
|
|
@param _size: variable size in bytes
|
|
@returns -1 if failed, otherwise an index into 'vars'
|
|
|
|
ida_hexrays.lvars_t.find_input_reg(self, reg: int, _size: int = 1) -> int
|
|
Find an input register variable.
|
|
|
|
@param reg: register to find
|
|
@param _size: variable size in bytes
|
|
@returns -1 if failed, otherwise an index into 'vars'
|
|
|
|
ida_hexrays.lvars_t.find_lvar(self, location: "vdloc_t", width: int, defblk: int = -1) -> int
|
|
Find a variable at the specified location.
|
|
|
|
@param location: variable location
|
|
@param width: variable size in bytes
|
|
@param defblk: definition block of the lvar. -1 means any block
|
|
@returns -1 if failed, otherwise an index into 'vars'
|
|
|
|
ida_hexrays.lvars_t.find_stkvar(self, spoff: int, width: int) -> int
|
|
Find a stack variable at the specified location.
|
|
|
|
@param spoff: offset from the minimal sp
|
|
@param width: variable size in bytes
|
|
@returns -1 if failed, otherwise an index into 'vars'
|
|
|
|
ida_hexrays.lxe_lvar_cmt_changed
|
|
Local variable comment got changed.
|
|
|
|
|
|
ida_hexrays.lxe_lvar_mapping_changed
|
|
Local variable mapping got changed.
|
|
|
|
|
|
ida_hexrays.lxe_lvar_name_changed
|
|
Local variable got renamed.
|
|
|
|
|
|
ida_hexrays.lxe_lvar_type_changed
|
|
Local variable type got changed.
|
|
|
|
|
|
ida_hexrays.make_num(*args)
|
|
Create a number expression
|
|
|
|
@param n: value
|
|
@param func: current function
|
|
@param ea: definition address of the number
|
|
@param opnum: operand number of the number (in the disassembly listing)
|
|
@param sign: number sign
|
|
@param size: size of number in bytes Please note that the type of the resulting expression can be anything because it can be inherited from the disassembly listing or taken from the user specified number representation in the pseudocode view.
|
|
|
|
ida_hexrays.make_pointer(type: "tinfo_t") -> "tinfo_t"
|
|
Create a pointer type. This function performs the following conversion: "type" -> "type*"
|
|
|
|
@param type: object type.
|
|
@returns "type*". for example, if 'char' is passed as the argument,
|
|
|
|
ida_hexrays.make_ref(e)
|
|
Create a reference. This function performs the following conversion: "obj" => "&obj". It can handle casts, annihilate "&*", and process other special cases.
|
|
|
|
|
|
ida_hexrays.mark_cfunc_dirty(ea: ida_idaapi.ea_t, close_views: bool = False) -> bool
|
|
Flush the cached decompilation results. Erases a cache entry for the specified function.
|
|
|
|
@param ea: function to erase from the cache
|
|
@param close_views: close pseudocode windows that show the function
|
|
@returns if a cache entry existed.
|
|
|
|
ida_hexrays.max_vlr_svalue(size: int) -> "uvlr_t"
|
|
|
|
ida_hexrays.max_vlr_value(size: int) -> "uvlr_t"
|
|
|
|
ida_hexrays.mba_range_iterator_t
|
|
|
|
ida_hexrays.mba_range_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.mba_range_iterator_t.chunk(self) -> "range_t const &"
|
|
|
|
ida_hexrays.mba_range_iterator_t.is_snippet(self) -> bool
|
|
|
|
ida_hexrays.mba_range_iterator_t.next(self) -> bool
|
|
|
|
ida_hexrays.mba_range_iterator_t.set(self, mbr: "mba_ranges_t") -> bool
|
|
|
|
ida_hexrays.mba_ranges_t
|
|
|
|
ida_hexrays.mba_ranges_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mba_ranges_t.clear(self) -> None
|
|
|
|
ida_hexrays.mba_ranges_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mba_ranges_t.is_fragmented(self) -> bool
|
|
|
|
ida_hexrays.mba_ranges_t.is_snippet(self) -> bool
|
|
|
|
ida_hexrays.mba_ranges_t.pfn
|
|
function to decompile. if not null, then function mode.
|
|
|
|
ida_hexrays.mba_ranges_t.ranges
|
|
snippet mode: ranges to decompile. function mode: list of outlined ranges
|
|
|
|
|
|
ida_hexrays.mba_ranges_t.start(self) -> ida_idaapi.ea_t
|
|
|
|
ida_hexrays.mba_t
|
|
Deprecated. Please do not use.
|
|
|
|
ida_hexrays.mba_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.mba_t._deregister(self) -> None
|
|
|
|
ida_hexrays.mba_t._print(self, vp: "vd_printer_t") -> None
|
|
|
|
ida_hexrays.mba_t._register(self) -> None
|
|
|
|
ida_hexrays.mba_t.aliased_memory
|
|
aliased_memory+restricted_memory=ALLMEM
|
|
|
|
ida_hexrays.mba_t.alloc_fict_ea(self, real_ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Allocate a fictional address. This function can be used to allocate a new unique address for a new instruction, if re-using any existing address leads to conflicts. For example, if the last instruction of the function modifies R0 and falls through to the next function, it will be a tail call: LDM R0!, {R4,R7} end of the function start of another function In this case R0 generates two different lvars at the same address:
|
|
* one modified by LDM
|
|
* another that represents the return value from the tail call
|
|
|
|
|
|
Another example: a third-party plugin makes a copy of an instruction. This may lead to the generation of two variables at the same address. Example 3: fictional addresses can be used for new instructions created while modifying the microcode. This function can be used to allocate a new unique address for a new instruction or a variable. The fictional address is selected from an unallocated address range.
|
|
|
|
@param real_ea: real instruction address (BADADDR is ok too)
|
|
@returns a unique fictional address
|
|
|
|
ida_hexrays.mba_t.alloc_kreg(self, size: "size_t", check_size: bool = True) -> "mreg_t"
|
|
Allocate a kernel register.
|
|
|
|
@param size: size of the register in bytes
|
|
@param check_size: if true, only the sizes that correspond to a size of a basic type will be accepted.
|
|
@returns allocated register. mr_none means failure.
|
|
|
|
ida_hexrays.mba_t.alloc_lvars(self) -> None
|
|
Allocate local variables. Must be called only immediately after optimize_global(), with no modifications to the microcode. Converts registers, stack variables, and similar operands into mop_l. This call will not fail because all necessary checks were performed in optimize_global(). After this call the microcode reaches its final state.
|
|
|
|
|
|
ida_hexrays.mba_t.analyze_calls(self, acflags: int) -> int
|
|
Analyze calls and determine calling conventions.
|
|
|
|
@param acflags: permitted actions that are necessary for successful detection of calling conventions. See Bits for analyze_calls()
|
|
@returns number of calls. -1 means error.
|
|
|
|
ida_hexrays.mba_t.arg(self, n: int) -> "lvar_t &"
|
|
Get input argument of the decompiled function.
|
|
|
|
@param n: argument number (0..nargs-1)
|
|
|
|
ida_hexrays.mba_t.argbase(self) -> int
|
|
|
|
ida_hexrays.mba_t.argidx
|
|
input arguments (indexes into 'vars')
|
|
|
|
ida_hexrays.mba_t.argidx_ok(self) -> bool
|
|
|
|
ida_hexrays.mba_t.argidx_sorted(self) -> bool
|
|
|
|
ida_hexrays.mba_t.bad_call_sp_detected(self) -> bool
|
|
|
|
ida_hexrays.mba_t.blocks
|
|
double linked list of blocks
|
|
|
|
ida_hexrays.mba_t.build_graph(self) -> "merror_t"
|
|
Build control flow graph. This function may be called only once. It calculates the type of each basic block and the adjacency list. optimize_local() calls this function if necessary. You need to call this function only before MMAT_LOCOPT.
|
|
|
|
@returns error code
|
|
|
|
ida_hexrays.mba_t.calc_shins_flags(self) -> int
|
|
|
|
ida_hexrays.mba_t.callinfo_built(self) -> bool
|
|
|
|
ida_hexrays.mba_t.cc
|
|
calling convention
|
|
|
|
ida_hexrays.mba_t.chain_varnums_ok(self) -> bool
|
|
|
|
ida_hexrays.mba_t.clr_cdtr(self) -> None
|
|
|
|
ida_hexrays.mba_t.clr_mba_flags(self, f: int) -> None
|
|
|
|
ida_hexrays.mba_t.clr_mba_flags2(self, f: int) -> None
|
|
|
|
ida_hexrays.mba_t.code16_bit_removed(self) -> bool
|
|
|
|
ida_hexrays.mba_t.common_stkvars_stkargs(self) -> bool
|
|
|
|
ida_hexrays.mba_t.consumed_argregs
|
|
registers converted into stack arguments, should not be used as arguments
|
|
|
|
ida_hexrays.mba_t.copy_block(self, blk: "mblock_t", new_serial: int, cpblk_flags: int = 3) -> "mblock_t *"
|
|
Make a copy of a block. This function makes a simple copy of the block. It does not fix the predecessor and successor lists, they must be fixed if necessary.
|
|
|
|
@param blk: block to copy
|
|
@param new_serial: position of the copied block
|
|
@param cpblk_flags: combination of Batch decompilation bits... bits
|
|
@returns pointer to the new copy
|
|
|
|
ida_hexrays.mba_t.create_helper_call(self, ea: ida_idaapi.ea_t, helper: str, rettype: "tinfo_t" = None, callargs: "mcallargs_t" = None, out: "mop_t" = None) -> "minsn_t *"
|
|
Create a call of a helper function.
|
|
|
|
@param ea: The desired address of the instruction
|
|
@param helper: The helper name
|
|
@param rettype: The return type (nullptr or empty type means 'void')
|
|
@param callargs: The helper arguments (nullptr-no arguments)
|
|
@param out: The operand where the call result should be stored. If this argument is not nullptr, "mov helper_call(), out" will be generated. Otherwise "call helper()" will be generated. Note: the size of this operand must be equal to the RETTYPE size
|
|
@returns pointer to the created instruction or nullptr if error
|
|
|
|
ida_hexrays.mba_t.deleted_pairs(self) -> bool
|
|
|
|
ida_hexrays.mba_t.deserialize(bytes: "uchar const *") -> "mba_t *"
|
|
Deserialize a byte sequence into mbl array.
|
|
|
|
@param bytes: pointer to the beginning of the byte sequence.
|
|
@returns new mbl array
|
|
|
|
ida_hexrays.mba_t.display_numaddrs(self) -> bool
|
|
|
|
ida_hexrays.mba_t.display_valnums(self) -> bool
|
|
|
|
ida_hexrays.mba_t.dump(self) -> None
|
|
Dump microcode to a file. The file will be created in the directory pointed by IDA_DUMPDIR envvar. Dump will be created only if IDA is run under debugger.
|
|
|
|
|
|
ida_hexrays.mba_t.dump_mba(self, _verify: bool, title: str) -> None
|
|
|
|
ida_hexrays.mba_t.error_ea
|
|
during microcode generation holds ins.ea
|
|
|
|
ida_hexrays.mba_t.final_type
|
|
is the function type final? (specified by the user)
|
|
|
|
ida_hexrays.mba_t.find_mop(self, ctx: "op_parent_info_t", ea: ida_idaapi.ea_t, is_dest: bool, list: "mlist_t") -> "mop_t *"
|
|
Find an operand in the microcode. This function tries to find the operand that matches LIST. Any operand that overlaps with LIST is considered as a match.
|
|
|
|
@param ctx: context information for the result
|
|
@param ea: desired address of the operand. BADADDR means to accept any address.
|
|
@param is_dest: search for destination operand? this argument may be ignored if the exact match could not be found
|
|
@param list: list of locations the correspond to the operand
|
|
@returns pointer to the operand or nullptr.
|
|
|
|
ida_hexrays.mba_t.for_all_insns(self, mv: "minsn_visitor_t") -> int
|
|
Visit all instructions. This function visits all instruction and subinstructions.
|
|
|
|
@param mv: instruction visitor
|
|
@returns non-zero value returned by mv.visit_mop() or zero
|
|
|
|
ida_hexrays.mba_t.for_all_ops(self, mv: "mop_visitor_t") -> int
|
|
Visit all operands of all instructions.
|
|
|
|
@param mv: operand visitor
|
|
@returns non-zero value returned by mv.visit_mop() or zero
|
|
|
|
ida_hexrays.mba_t.for_all_topinsns(self, mv: "minsn_visitor_t") -> int
|
|
Visit all top level instructions.
|
|
|
|
@param mv: instruction visitor
|
|
@returns non-zero value returned by mv.visit_mop() or zero
|
|
|
|
ida_hexrays.mba_t.fpd
|
|
frame pointer delta
|
|
|
|
ida_hexrays.mba_t.free_kreg(self, reg: "mreg_t", size: "size_t") -> None
|
|
Free a kernel register. If wrong arguments are passed, this function will generate an internal error.
|
|
|
|
@param reg: a previously allocated kernel register
|
|
@param size: size of the register in bytes
|
|
|
|
ida_hexrays.mba_t.frregs
|
|
size of saved registers range in the stack frame
|
|
|
|
ida_hexrays.mba_t.frsize
|
|
size of local stkvars range in the stack frame
|
|
|
|
ida_hexrays.mba_t.fti_flags
|
|
FTI_... constants for the current function.
|
|
|
|
ida_hexrays.mba_t.fullsize
|
|
Full stack size including incoming args.
|
|
|
|
ida_hexrays.mba_t.generated_asserts(self) -> bool
|
|
|
|
ida_hexrays.mba_t.get_args_region(self) -> "ivl_t const &"
|
|
|
|
ida_hexrays.mba_t.get_curfunc(self) -> "func_t *"
|
|
|
|
ida_hexrays.mba_t.get_func_output_lists(self, *args) -> None
|
|
Prepare the lists of registers & memory that are defined/killed by a function
|
|
|
|
@param return_regs: defined regs to return (eax,edx)
|
|
@param spoiled: spoiled regs (flags,ecx,mem)
|
|
@param type: the function type
|
|
@param call_ea: the call insn address (if known)
|
|
@param tail_call: is it the tail call?
|
|
|
|
ida_hexrays.mba_t.get_graph(self) -> "mbl_graph_t *"
|
|
Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT.
|
|
|
|
|
|
ida_hexrays.mba_t.get_ida_argloc(self, v: "lvar_t") -> "argloc_t"
|
|
|
|
ida_hexrays.mba_t.get_lvars_region(self) -> "ivl_t const &"
|
|
|
|
ida_hexrays.mba_t.get_mba_flags(self) -> int
|
|
|
|
ida_hexrays.mba_t.get_mba_flags2(self) -> int
|
|
|
|
ida_hexrays.mba_t.get_mblock(self, n: "uint") -> "mblock_t *"
|
|
Get basic block by its serial number.
|
|
|
|
ida_hexrays.mba_t.get_shadow_region(self) -> "ivl_t const &"
|
|
|
|
ida_hexrays.mba_t.get_stack_region(self) -> "ivl_t"
|
|
|
|
ida_hexrays.mba_t.get_std_region(self, idx: "memreg_index_t") -> "ivl_t const &"
|
|
Get information about various memory regions. We map the stack frame to the global memory, to some unused range.
|
|
|
|
|
|
ida_hexrays.mba_t.gotoff_stkvars
|
|
stkvars that hold .got offsets. considered to be unaliasable
|
|
|
|
ida_hexrays.mba_t.graph_insns(self) -> bool
|
|
|
|
ida_hexrays.mba_t.has_bad_sp(self) -> bool
|
|
|
|
ida_hexrays.mba_t.has_outlines(self) -> bool
|
|
|
|
ida_hexrays.mba_t.has_over_chains(self) -> bool
|
|
|
|
ida_hexrays.mba_t.has_passregs(self) -> bool
|
|
|
|
ida_hexrays.mba_t.has_stack_retval(self) -> bool
|
|
|
|
ida_hexrays.mba_t.idaloc2vd(self, loc: "argloc_t", width: int) -> "vdloc_t"
|
|
|
|
ida_hexrays.mba_t.idb_spoiled
|
|
MBA_SPLINFO && final_type: info in ida format.
|
|
|
|
ida_hexrays.mba_t.idb_type
|
|
function type as retrieved from the database
|
|
|
|
ida_hexrays.mba_t.inargoff
|
|
offset of the first stack argument; after fix_scattered_movs() INARGOFF may be less than STACKSIZE
|
|
|
|
|
|
ida_hexrays.mba_t.inline_func(self, cdg: "codegen_t", blknum: int, ranges: "mba_ranges_t", decomp_flags: int = 0, inline_flags: int = 0) -> "merror_t"
|
|
Inline a range. Currently only functions are supported, not arbitrary ranges. This function may be called only during the initial microcode generation phase.
|
|
|
|
@param cdg: the codegenerator object
|
|
@param blknum: the block contaning the call/jump instruction to inline
|
|
@param ranges: the set of ranges to inline
|
|
@param decomp_flags: combination of decompile() flags bits
|
|
@param inline_flags: combination of inline_func() flags bits
|
|
@returns error code
|
|
|
|
ida_hexrays.mba_t.insert_block(self, bblk: int) -> "mblock_t *"
|
|
Insert a block in the middle of the mbl array. The very first block of microcode must be empty, it is the entry block. The very last block of microcode must be BLT_STOP, it is the exit block. Therefore inserting a new block before the entry point or after the exit block is not a good idea.
|
|
|
|
@param bblk: the new block will be inserted before BBLK
|
|
@returns ptr to the new block
|
|
|
|
ida_hexrays.mba_t.is_cdtr(self) -> bool
|
|
|
|
ida_hexrays.mba_t.is_ctr(self) -> bool
|
|
|
|
ida_hexrays.mba_t.is_dtr(self) -> bool
|
|
|
|
ida_hexrays.mba_t.is_pattern(self) -> bool
|
|
|
|
ida_hexrays.mba_t.is_snippet(self) -> bool
|
|
|
|
ida_hexrays.mba_t.is_stkarg(self, v: "lvar_t") -> bool
|
|
|
|
ida_hexrays.mba_t.is_thunk(self) -> bool
|
|
|
|
ida_hexrays.mba_t.label
|
|
name of the function or pattern (colored)
|
|
|
|
ida_hexrays.mba_t.loaded_gdl(self) -> bool
|
|
|
|
ida_hexrays.mba_t.locate_stkpnt(self, ea: ida_idaapi.ea_t) -> "stkpnt_t const *"
|
|
|
|
ida_hexrays.mba_t.lvar_names_ok(self) -> bool
|
|
|
|
ida_hexrays.mba_t.lvars_allocated(self) -> bool
|
|
|
|
ida_hexrays.mba_t.lvars_renamed(self) -> bool
|
|
|
|
ida_hexrays.mba_t.map_fict_ea(self, fict_ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Resolve a fictional address. This function provides a reverse of the mapping made by alloc_fict_ea().
|
|
|
|
@param fict_ea: fictional definition address
|
|
@returns the real instruction address
|
|
|
|
ida_hexrays.mba_t.mark_chains_dirty(self) -> None
|
|
Mark the microcode use-def chains dirty. Call this function is any inter-block data dependencies got changed because of your modifications to the microcode. Failing to do so may cause an internal error.
|
|
|
|
|
|
ida_hexrays.mba_t.maturity
|
|
current maturity level
|
|
|
|
ida_hexrays.mba_t.may_refine_rettype(self) -> bool
|
|
|
|
ida_hexrays.mba_t.merge_blocks(self) -> bool
|
|
Merge blocks. This function merges blocks constituting linear flow. It calls remove_empty_and_unreachable_blocks() as well.
|
|
|
|
@returns true if changed any blocks
|
|
|
|
ida_hexrays.mba_t.minargref
|
|
The lowest stack argument location whose address was taken This location and locations above it can be aliased It controls locations >= inargoff-shadow_args
|
|
|
|
|
|
ida_hexrays.mba_t.minstkref
|
|
The lowest stack location whose address was taken.
|
|
|
|
ida_hexrays.mba_t.minstkref_ea
|
|
address with lowest minstkref (for debugging)
|
|
|
|
ida_hexrays.mba_t.natural
|
|
natural order of blocks
|
|
|
|
ida_hexrays.mba_t.nodel_memory
|
|
global dead elimination may not delete references to this area
|
|
|
|
ida_hexrays.mba_t.npurged
|
|
-1 - unknown
|
|
|
|
ida_hexrays.mba_t.optimize_global(self) -> "merror_t"
|
|
Optimize microcode globally. This function applies various optimization methods until we reach the fixed point. After that it preallocates lvars unless reqmat forbids it.
|
|
|
|
@returns error code
|
|
|
|
ida_hexrays.mba_t.optimize_local(self, locopt_bits: int) -> int
|
|
Optimize each basic block locally
|
|
|
|
@param locopt_bits: combination of Bits for optimize_local() bits
|
|
@returns number of changes. 0 means nothing changed This function is called by the decompiler, usually there is no need to call it explicitly.
|
|
|
|
ida_hexrays.mba_t.optimized(self) -> bool
|
|
|
|
ida_hexrays.mba_t.pfn_flags
|
|
copy of func_t::flags
|
|
|
|
ida_hexrays.mba_t.precise_defeas(self) -> bool
|
|
|
|
ida_hexrays.mba_t.prop_complex(self) -> bool
|
|
|
|
ida_hexrays.mba_t.propagated_asserts(self) -> bool
|
|
|
|
ida_hexrays.mba_t.qty
|
|
number of basic blocks
|
|
|
|
ida_hexrays.mba_t.really_alloc(self) -> bool
|
|
|
|
ida_hexrays.mba_t.regargs_is_not_aligned(self) -> bool
|
|
|
|
ida_hexrays.mba_t.remove_block(self, blk: "mblock_t") -> bool
|
|
Delete a block.
|
|
|
|
@param blk: block to delete
|
|
@returns true if at least one of the other blocks became empty or unreachable
|
|
|
|
ida_hexrays.mba_t.remove_blocks(self, start_blk: int, end_blk: int) -> bool
|
|
|
|
ida_hexrays.mba_t.remove_empty_and_unreachable_blocks(self) -> bool
|
|
Delete all empty and unreachable blocks. Blocks marked with MBL_KEEP won't be deleted.
|
|
|
|
|
|
ida_hexrays.mba_t.reqmat
|
|
required maturity level
|
|
|
|
ida_hexrays.mba_t.retsize
|
|
size of return address in the stack frame
|
|
|
|
ida_hexrays.mba_t.returns_fpval(self) -> bool
|
|
|
|
ida_hexrays.mba_t.retvaridx
|
|
index of variable holding the return value -1 means none
|
|
|
|
|
|
ida_hexrays.mba_t.rtype_refined(self) -> bool
|
|
|
|
ida_hexrays.mba_t.save_snapshot(self, description: str) -> None
|
|
Create and save microcode snapshot.
|
|
|
|
ida_hexrays.mba_t.saverest_done(self) -> bool
|
|
|
|
ida_hexrays.mba_t.serialize(self) -> None
|
|
Serialize mbl array into a sequence of bytes.
|
|
|
|
ida_hexrays.mba_t.set_lvar_name(self, v: "lvar_t", name: str, flagbits: int) -> bool
|
|
|
|
ida_hexrays.mba_t.set_maturity(self, mat: "mba_maturity_t") -> bool
|
|
Set maturity level.
|
|
|
|
@param mat: new maturity level
|
|
@returns true if it is time to stop analysis Plugins may use this function to skip some parts of the analysis. The maturity level cannot be decreased.
|
|
|
|
ida_hexrays.mba_t.set_mba_flags(self, f: int) -> None
|
|
|
|
ida_hexrays.mba_t.set_mba_flags2(self, f: int) -> None
|
|
|
|
ida_hexrays.mba_t.set_nice_lvar_name(self, v: "lvar_t", name: str) -> bool
|
|
|
|
ida_hexrays.mba_t.set_user_lvar_name(self, v: "lvar_t", name: str) -> bool
|
|
|
|
ida_hexrays.mba_t.shadow_args
|
|
size of shadow argument area
|
|
|
|
ida_hexrays.mba_t.short_display(self) -> bool
|
|
|
|
ida_hexrays.mba_t.should_beautify(self) -> bool
|
|
|
|
ida_hexrays.mba_t.show_reduction(self) -> bool
|
|
|
|
ida_hexrays.mba_t.spd_adjust
|
|
If sp>0, the max positive sp value.
|
|
|
|
ida_hexrays.mba_t.split_block(self, blk: "mblock_t", start_insn: "minsn_t") -> "mblock_t *"
|
|
Split a block: insert a new one after the block, move some instructions to new block
|
|
|
|
@param blk: block to be split
|
|
@param start_insn: all instructions to be moved to new block: starting with this one up to the end
|
|
@returns ptr to the new block
|
|
|
|
ida_hexrays.mba_t.spoiled_list
|
|
MBA_SPLINFO && !final_type: info in vd format.
|
|
|
|
ida_hexrays.mba_t.stacksize
|
|
The maximal size of the function stack including bytes allocated for outgoing call arguments (up to retaddr)
|
|
|
|
|
|
ida_hexrays.mba_t.std_ivls
|
|
we treat memory as consisting of 6 parts see memreg_index_t
|
|
|
|
|
|
ida_hexrays.mba_t.stkoff_ida2vd(self, off: int) -> int
|
|
|
|
ida_hexrays.mba_t.stkoff_vd2ida(self, off: int) -> int
|
|
|
|
ida_hexrays.mba_t.term(self) -> None
|
|
|
|
ida_hexrays.mba_t.tmpstk_size
|
|
size of the temporary stack part (which dynamically changes with push/pops)
|
|
|
|
|
|
ida_hexrays.mba_t.use_frame(self) -> bool
|
|
|
|
ida_hexrays.mba_t.use_wingraph32(self) -> bool
|
|
|
|
ida_hexrays.mba_t.valranges_done(self) -> bool
|
|
|
|
ida_hexrays.mba_t.vars
|
|
local variables
|
|
|
|
ida_hexrays.mba_t.vd2idaloc(self, *args) -> "argloc_t"
|
|
This function has the following signatures:
|
|
|
|
0. vd2idaloc(loc: const vdloc_t &, width: int) -> argloc_t
|
|
1. vd2idaloc(loc: const vdloc_t &, width: int, spd: int) -> argloc_t
|
|
|
|
# 0: vd2idaloc(loc: const vdloc_t &, width: int) -> argloc_t
|
|
|
|
|
|
# 1: vd2idaloc(loc: const vdloc_t &, width: int, spd: int) -> argloc_t
|
|
|
|
ida_hexrays.mba_t.verify(self, always: bool) -> None
|
|
Verify microcode consistency.
|
|
|
|
@param always: if false, the check will be performed only if ida runs under debugger If any inconsistency is discovered, an internal error will be generated. We strongly recommend you to call this function before returing control to the decompiler from your callbacks, in the case if you modified the microcode. If the microcode is inconsistent, this function will generate an internal error. We provide the source code of this function in the plugins/hexrays_sdk/verifier directory for your reference.
|
|
|
|
ida_hexrays.mba_t.write_to_const_detected(self) -> bool
|
|
|
|
ida_hexrays.mbl_graph_t
|
|
|
|
ida_hexrays.mbl_graph_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.mbl_graph_t.get_chain_stamp(self) -> int
|
|
|
|
ida_hexrays.mbl_graph_t.get_du(self, gctype: "gctype_t") -> "graph_chains_t *"
|
|
Get def-use chains.
|
|
|
|
ida_hexrays.mbl_graph_t.get_mblock(self, n: int) -> "mblock_t *"
|
|
|
|
ida_hexrays.mbl_graph_t.get_ud(self, gctype: "gctype_t") -> "graph_chains_t *"
|
|
Get use-def chains.
|
|
|
|
ida_hexrays.mbl_graph_t.is_du_chain_dirty(self, gctype: "gctype_t") -> bool
|
|
Is the def-use chain of the specified kind dirty?
|
|
|
|
ida_hexrays.mbl_graph_t.is_redefined_globally(self, *args) -> bool
|
|
Is LIST redefined in the graph?
|
|
|
|
ida_hexrays.mbl_graph_t.is_ud_chain_dirty(self, gctype: "gctype_t") -> bool
|
|
Is the use-def chain of the specified kind dirty?
|
|
|
|
ida_hexrays.mbl_graph_t.is_used_globally(self, *args) -> bool
|
|
Is LIST used in the graph?
|
|
|
|
ida_hexrays.mblock_t
|
|
|
|
ida_hexrays.mblock_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.mblock_t._print(self, vp: "vd_printer_t") -> None
|
|
|
|
ida_hexrays.mblock_t.append_def_list(self, list: "mlist_t", op: "mop_t", maymust: "maymust_t") -> None
|
|
Append def-list of an operand. This function calculates list of locations that may or must be modified by the operand and appends it to LIST.
|
|
|
|
@param list: ptr to the output buffer. we will append to it.
|
|
@param op: operand to calculate the def list of
|
|
@param maymust: should we calculate 'may-def' or 'must-def' list? see maymust_t for more details.
|
|
|
|
ida_hexrays.mblock_t.append_use_list(self, *args) -> None
|
|
Append use-list of an operand. This function calculates list of locations that may or must be used by the operand and appends it to LIST.
|
|
|
|
@param list: ptr to the output buffer. we will append to it.
|
|
@param op: operand to calculate the use list of
|
|
@param maymust: should we calculate 'may-use' or 'must-use' list? see maymust_t for more details.
|
|
@param mask: if only part of the operand should be considered, a bitmask can be used to specify which part. example: op=AX,mask=0xFF means that we will consider only AL.
|
|
|
|
ida_hexrays.mblock_t.build_def_list(self, ins: "minsn_t", maymust: "maymust_t") -> "mlist_t"
|
|
Build def-list of an instruction. This function calculates list of locations that may or must be modified by the instruction. Examples: "stx ebx.4, ds.2, eax.4", may-list: all aliasable memory "stx ebx.4, ds.2, eax.4", must-list: empty Since STX uses EAX for indirect access, it may modify any aliasable memory. On the other hand, we cannot tell for sure which memory cells will be modified, this is why the must-list is empty.
|
|
|
|
@param ins: instruction to calculate the def list of
|
|
@param maymust: should we calculate 'may-def' or 'must-def' list? see maymust_t for more details.
|
|
@returns the calculated def-list
|
|
|
|
ida_hexrays.mblock_t.build_lists(self, kill_deads: bool) -> int
|
|
Build def-use lists and eliminate deads.
|
|
|
|
@param kill_deads: do delete dead instructions?
|
|
@returns the number of eliminated instructions Better mblock_t::call make_lists_ready() rather than this function.
|
|
|
|
ida_hexrays.mblock_t.build_use_list(self, ins: "minsn_t", maymust: "maymust_t") -> "mlist_t"
|
|
Build use-list of an instruction. This function calculates list of locations that may or must be used by the instruction. Examples: "ldx ds.2, eax.4, ebx.4", may-list: all aliasable memory "ldx ds.2, eax.4, ebx.4", must-list: empty Since LDX uses EAX for indirect access, it may access any aliasable memory. On the other hand, we cannot tell for sure which memory cells will be accessed, this is why the must-list is empty.
|
|
|
|
@param ins: instruction to calculate the use list of
|
|
@param maymust: should we calculate 'may-use' or 'must-use' list? see maymust_t for more details.
|
|
@returns the calculated use-list
|
|
|
|
ida_hexrays.mblock_t.dead_at_start
|
|
data that is dead at the block entry
|
|
|
|
ida_hexrays.mblock_t.dnu
|
|
data that is defined but not used in the block
|
|
|
|
ida_hexrays.mblock_t.dump(self) -> None
|
|
Dump block info. This function is useful for debugging, see mba_t::dump for info
|
|
|
|
|
|
ida_hexrays.mblock_t.dump_block(self, title: str) -> None
|
|
|
|
ida_hexrays.mblock_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.end
|
|
end address note: we cannot rely on start/end addresses very much because instructions are propagated between blocks
|
|
|
|
|
|
ida_hexrays.mblock_t.find_access(self, op: "mop_t", parent: "minsn_t **", mend: "minsn_t", fdflags: int) -> "minsn_t *"
|
|
Find the instruction that accesses the specified operand. This function search inside one block.
|
|
|
|
@param op: operand to search for
|
|
@param parent: ptr to ptr to a top level instruction. in: denotes the beginning of the search range. out: denotes the parent of the found instruction.
|
|
@param mend: end instruction of the range (must be a top level insn) mend is excluded from the range. it can be specified as nullptr. parent and mend must belong to the same block.
|
|
@param fdflags: combination of bits for mblock_t::find_access bits
|
|
@returns the instruction that accesses the operand. this instruction may be a sub-instruction. to find out the top level instruction, check out *parent. nullptr means 'not found'.
|
|
|
|
ida_hexrays.mblock_t.find_def(self, op: "mop_t", p_i1: "minsn_t **", i2: "minsn_t", fdflags: int) -> "minsn_t *"
|
|
|
|
ida_hexrays.mblock_t.find_first_use(self, *args) -> "minsn_t *"
|
|
This function has the following signatures:
|
|
|
|
0. find_first_use(list: mlist_t *, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t *
|
|
1. find_first_use(list: mlist_t *, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t *
|
|
|
|
# 0: find_first_use(list: mlist_t *, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t *
|
|
|
|
Find the first insn that uses the specified list in the insn range.
|
|
|
|
@returns pointer to such instruction or nullptr. Upon return LIST will contain only locations not redefined by insns [i1..result]
|
|
|
|
# 1: find_first_use(list: mlist_t *, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t *
|
|
|
|
ida_hexrays.mblock_t.find_redefinition(self, *args) -> "minsn_t *"
|
|
This function has the following signatures:
|
|
|
|
0. find_redefinition(list: const mlist_t &, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t *
|
|
1. find_redefinition(list: const mlist_t &, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t *
|
|
|
|
# 0: find_redefinition(list: const mlist_t &, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t *
|
|
|
|
Find the first insn that redefines any part of the list in the insn range.
|
|
|
|
@returns pointer to such instruction or nullptr.
|
|
|
|
# 1: find_redefinition(list: const mlist_t &, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t *
|
|
|
|
ida_hexrays.mblock_t.find_use(self, op: "mop_t", p_i1: "minsn_t **", i2: "minsn_t", fdflags: int) -> "minsn_t *"
|
|
|
|
ida_hexrays.mblock_t.flags
|
|
combination of Basic block properties bits
|
|
|
|
|
|
ida_hexrays.mblock_t.for_all_insns(self, mv: "minsn_visitor_t") -> int
|
|
Visit all instructions. This function visits subinstructions too.
|
|
|
|
@param mv: instruction visitor
|
|
@returns zero or the value returned by mv.visit_insn() See also mba_t::for_all_topinsns()
|
|
|
|
ida_hexrays.mblock_t.for_all_ops(self, mv: "mop_visitor_t") -> int
|
|
Visit all operands. This function visit subinstruction operands too.
|
|
|
|
@param mv: operand visitor
|
|
@returns zero or the value returned by mv.visit_mop()
|
|
|
|
ida_hexrays.mblock_t.for_all_uses(self, list: "mlist_t", i1: "minsn_t", i2: "minsn_t", mmv: "mlist_mop_visitor_t") -> int
|
|
Visit all operands that use LIST.
|
|
|
|
@param list: ptr to the list of locations. it may be modified: parts that get redefined by the instructions in [i1,i2) will be deleted.
|
|
@param i1: starting instruction. must be a top level insn.
|
|
@param i2: ending instruction (excluded). must be a top level insn.
|
|
@param mmv: operand visitor
|
|
@returns zero or the value returned by mmv.visit_mop()
|
|
|
|
ida_hexrays.mblock_t.get_reginsn_qty(self) -> "size_t"
|
|
Calculate number of regular instructions in the block. Assertions are skipped by this function.
|
|
|
|
@returns Number of non-assertion instructions in the block.
|
|
|
|
ida_hexrays.mblock_t.get_valranges(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. get_valranges(res: valrng_t *, vivl: const vivl_t &, vrflags: int) -> bool
|
|
1. get_valranges(res: valrng_t *, vivl: const vivl_t &, m: const minsn_t *, vrflags: int) -> bool
|
|
|
|
# 0: get_valranges(res: valrng_t *, vivl: const vivl_t &, vrflags: int) -> bool
|
|
|
|
Find possible values for a block.
|
|
|
|
|
|
# 1: get_valranges(res: valrng_t *, vivl: const vivl_t &, m: const minsn_t *, vrflags: int) -> bool
|
|
|
|
Find possible values for an instruction.
|
|
|
|
|
|
ida_hexrays.mblock_t.head
|
|
pointer to the first instruction of the block
|
|
|
|
ida_hexrays.mblock_t.insert_into_block(self, nm: "minsn_t", om: "minsn_t") -> "minsn_t *"
|
|
Insert instruction into the doubly linked list
|
|
|
|
@param nm: new instruction
|
|
@param om: existing instruction, part of the doubly linked list if nullptr, then the instruction will be inserted at the beginning of the list NM will be inserted immediately after OM
|
|
@returns pointer to NM
|
|
|
|
ida_hexrays.mblock_t.is_branch(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_call_block(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_nway(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_redefined(self, *args) -> bool
|
|
Is the list redefined by the specified instructions?
|
|
|
|
@param list: list of locations to check.
|
|
@param i1: starting instruction of the range (must be a top level insn)
|
|
@param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block.
|
|
@param maymust: should we search in 'may-access' or 'must-access' mode?
|
|
|
|
ida_hexrays.mblock_t.is_rhs_redefined(self, ins: "minsn_t", i1: "minsn_t", i2: "minsn_t") -> bool
|
|
Is the right hand side of the instruction redefined the insn range? "right hand side" corresponds to the source operands of the instruction.
|
|
|
|
@param ins: instruction to consider
|
|
@param i1: starting instruction of the range (must be a top level insn)
|
|
@param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block.
|
|
|
|
ida_hexrays.mblock_t.is_simple_goto_block(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_simple_jcnd_block(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_unknown_call(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.is_used(self, *args) -> bool
|
|
Is the list used by the specified instruction range?
|
|
|
|
@param list: list of locations. LIST may be modified by the function: redefined locations will be removed from it.
|
|
@param i1: starting instruction of the range (must be a top level insn)
|
|
@param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block.
|
|
@param maymust: should we search in 'may-access' or 'must-access' mode?
|
|
|
|
ida_hexrays.mblock_t.lists_dirty(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.lists_ready(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.make_lists_ready(self) -> int
|
|
|
|
ida_hexrays.mblock_t.make_nop(self, m: "minsn_t") -> None
|
|
Erase the instruction (convert it to nop) and mark the lists dirty. This is the recommended function to use because it also marks the block use-def lists dirty.
|
|
|
|
|
|
ida_hexrays.mblock_t.mark_lists_dirty(self) -> None
|
|
|
|
ida_hexrays.mblock_t.maxbsp
|
|
maximal sp value in the block (0...stacksize)
|
|
|
|
ida_hexrays.mblock_t.maybdef
|
|
data that may be defined by the block
|
|
|
|
ida_hexrays.mblock_t.maybuse
|
|
data that may be used by the block
|
|
|
|
ida_hexrays.mblock_t.mba
|
|
the parent micro block array
|
|
|
|
ida_hexrays.mblock_t.minbargref
|
|
the same for arguments
|
|
|
|
ida_hexrays.mblock_t.minbstkref
|
|
lowest stack location accessible with indirect addressing (offset from the stack bottom) initially it is 0 (not computed)
|
|
|
|
|
|
ida_hexrays.mblock_t.mustbdef
|
|
data that must be defined by the block
|
|
|
|
ida_hexrays.mblock_t.mustbuse
|
|
data that must be used by the block
|
|
|
|
ida_hexrays.mblock_t.needs_propagation(self) -> bool
|
|
|
|
ida_hexrays.mblock_t.nextb
|
|
next block in the doubly linked list
|
|
|
|
ida_hexrays.mblock_t.npred(self) -> int
|
|
Get number of block predecessors.
|
|
|
|
ida_hexrays.mblock_t.nsucc(self) -> int
|
|
Get number of block successors.
|
|
|
|
ida_hexrays.mblock_t.optimize_block(self) -> int
|
|
Optimize a basic block. Usually there is no need to call this function explicitly because the decompiler will call it itself if optinsn_t::func or optblock_t::func return non-zero.
|
|
|
|
@returns number of changes made to the block
|
|
|
|
ida_hexrays.mblock_t.optimize_insn(self, *args) -> int
|
|
Optimize one instruction in the context of the block.
|
|
|
|
@param m: pointer to a top level instruction
|
|
@param optflags: combination of optimization flags bits
|
|
@returns number of changes made to the block This function may change other instructions in the block too. However, it will not destroy top level instructions (it may convert them to nop's). This function performs only intrablock modifications. See also minsn_t::optimize_solo()
|
|
|
|
ida_hexrays.mblock_t.optimize_useless_jump(self) -> int
|
|
Remove a jump at the end of the block if it is useless. This function preserves any side effects when removing a useless jump. Both conditional and unconditional jumps are handled (and jtbl too). This function deletes useless jumps, not only replaces them with a nop. (please note that \optimize_insn does not handle useless jumps).
|
|
|
|
@returns number of changes made to the block
|
|
|
|
ida_hexrays.mblock_t.pred(self, n: int) -> int
|
|
|
|
ida_hexrays.mblock_t.preds(self)
|
|
Iterates the list of predecessor blocks
|
|
|
|
ida_hexrays.mblock_t.predset
|
|
control flow graph: list of our predecessors use npred() and pred() to access it
|
|
|
|
|
|
ida_hexrays.mblock_t.prevb
|
|
previous block in the doubly linked list
|
|
|
|
ida_hexrays.mblock_t.remove_from_block(self, m: "minsn_t") -> "minsn_t *"
|
|
Remove instruction from the doubly linked list
|
|
|
|
@param m: instruction to remove The removed instruction is not deleted, the caller gets its ownership
|
|
@returns pointer to the next instruction
|
|
|
|
ida_hexrays.mblock_t.request_demote64(self) -> None
|
|
|
|
ida_hexrays.mblock_t.request_propagation(self) -> None
|
|
|
|
ida_hexrays.mblock_t.serial
|
|
block number
|
|
|
|
ida_hexrays.mblock_t.start
|
|
start address
|
|
|
|
ida_hexrays.mblock_t.succ(self, n: int) -> int
|
|
|
|
ida_hexrays.mblock_t.succs(self)
|
|
Iterates the list of successor blocks
|
|
|
|
ida_hexrays.mblock_t.succset
|
|
control flow graph: list of our successors use nsucc() and succ() to access it
|
|
|
|
|
|
ida_hexrays.mblock_t.tail
|
|
pointer to the last instruction of the block
|
|
|
|
ida_hexrays.mblock_t.type
|
|
block type (BLT_NONE - not computed yet)
|
|
|
|
ida_hexrays.mcallarg_t
|
|
|
|
ida_hexrays.mcallarg_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mcallarg_t._print(self, *args) -> None
|
|
|
|
ida_hexrays.mcallarg_t.argloc
|
|
ida argloc
|
|
|
|
ida_hexrays.mcallarg_t.copy_mop(self, op: "mop_t") -> None
|
|
|
|
ida_hexrays.mcallarg_t.dstr(self) -> str
|
|
|
|
ida_hexrays.mcallarg_t.ea
|
|
address where the argument was initialized. BADADDR means unknown.
|
|
|
|
|
|
ida_hexrays.mcallarg_t.flags
|
|
FAI_...
|
|
|
|
ida_hexrays.mcallarg_t.make_int(self, val: int, val_ea: ida_idaapi.ea_t, opno: int = 0) -> None
|
|
|
|
ida_hexrays.mcallarg_t.make_uint(self, val: int, val_ea: ida_idaapi.ea_t, opno: int = 0) -> None
|
|
|
|
ida_hexrays.mcallarg_t.name
|
|
formal argument name
|
|
|
|
ida_hexrays.mcallarg_t.set_regarg(self, *args) -> None
|
|
This function has the following signatures:
|
|
|
|
0. set_regarg(mr: mreg_t, sz: int, tif: const tinfo_t &) -> None
|
|
1. set_regarg(mr: mreg_t, tif: const tinfo_t &) -> None
|
|
2. set_regarg(mr: mreg_t, dt: char, sign: type_sign_t=type_unsigned) -> None
|
|
|
|
# 0: set_regarg(mr: mreg_t, sz: int, tif: const tinfo_t &) -> None
|
|
|
|
|
|
# 1: set_regarg(mr: mreg_t, tif: const tinfo_t &) -> None
|
|
|
|
|
|
# 2: set_regarg(mr: mreg_t, dt: char, sign: type_sign_t=type_unsigned) -> None
|
|
|
|
ida_hexrays.mcallarg_t.type
|
|
formal argument type
|
|
|
|
ida_hexrays.mcallargs_t
|
|
|
|
ida_hexrays.mcallargs_t.__eq__(self, r: "mcallargs_t") -> bool
|
|
|
|
ida_hexrays.mcallargs_t.__getitem__(self, i: "size_t") -> "mcallarg_t const &"
|
|
|
|
ida_hexrays.mcallargs_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mcallargs_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.mcallargs_t.__ne__(self, r: "mcallargs_t") -> bool
|
|
|
|
ida_hexrays.mcallargs_t.__setitem__(self, i: "size_t", v: "mcallarg_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t._del(self, x: "mcallarg_t") -> bool
|
|
|
|
ida_hexrays.mcallargs_t.add_unique(self, x: "mcallarg_t") -> bool
|
|
|
|
ida_hexrays.mcallargs_t.append(self, x: "mcallarg_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t.at(self, _idx: "size_t") -> "mcallarg_t const &"
|
|
|
|
ida_hexrays.mcallargs_t.begin(self, *args) -> "qvector< mcallarg_t >::const_iterator"
|
|
|
|
ida_hexrays.mcallargs_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.mcallargs_t.clear(self) -> None
|
|
|
|
ida_hexrays.mcallargs_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mcallargs_t.end(self, *args) -> "qvector< mcallarg_t >::const_iterator"
|
|
|
|
ida_hexrays.mcallargs_t.erase(self, *args) -> "qvector< mcallarg_t >::iterator"
|
|
|
|
ida_hexrays.mcallargs_t.extend(self, x: "mcallargs_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t.extract(self) -> "mcallarg_t *"
|
|
|
|
ida_hexrays.mcallargs_t.find(self, *args) -> "qvector< mcallarg_t >::const_iterator"
|
|
|
|
ida_hexrays.mcallargs_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.mcallargs_t.has(self, x: "mcallarg_t") -> bool
|
|
|
|
ida_hexrays.mcallargs_t.inject(self, s: "mcallarg_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t.insert(self, it: "mcallarg_t", x: "mcallarg_t") -> "qvector< mcallarg_t >::iterator"
|
|
|
|
ida_hexrays.mcallargs_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.mcallargs_t.push_back(self, *args) -> "mcallarg_t &"
|
|
|
|
ida_hexrays.mcallargs_t.qclear(self) -> None
|
|
|
|
ida_hexrays.mcallargs_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.mcallargs_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.mcallargs_t.swap(self, r: "mcallargs_t") -> None
|
|
|
|
ida_hexrays.mcallargs_t.truncate(self) -> None
|
|
|
|
ida_hexrays.mcallinfo_t
|
|
|
|
ida_hexrays.mcallinfo_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mcallinfo_t._print(self, *args) -> None
|
|
|
|
ida_hexrays.mcallinfo_t.args
|
|
call arguments
|
|
|
|
ida_hexrays.mcallinfo_t.call_spd
|
|
sp value at call insn
|
|
|
|
ida_hexrays.mcallinfo_t.callee
|
|
address of the called function, if known
|
|
|
|
ida_hexrays.mcallinfo_t.cc
|
|
calling convention
|
|
|
|
ida_hexrays.mcallinfo_t.dead_regs
|
|
registers defined by the function but never used. upon propagation we do the following:
|
|
* dead_regs += return_regs
|
|
* retregs.clear() since the call is propagated
|
|
|
|
|
|
|
|
|
|
ida_hexrays.mcallinfo_t.dstr(self) -> str
|
|
|
|
ida_hexrays.mcallinfo_t.flags
|
|
combination of Call properties... bits
|
|
|
|
|
|
ida_hexrays.mcallinfo_t.fti_attrs
|
|
extended function attributes
|
|
|
|
ida_hexrays.mcallinfo_t.get_type(self) -> "tinfo_t"
|
|
|
|
ida_hexrays.mcallinfo_t.is_vararg(self) -> bool
|
|
|
|
ida_hexrays.mcallinfo_t.lexcompare(self, f: "mcallinfo_t") -> int
|
|
|
|
ida_hexrays.mcallinfo_t.pass_regs
|
|
passthrough registers: registers that depend on input values (subset of spoiled)
|
|
|
|
|
|
ida_hexrays.mcallinfo_t.retregs
|
|
return register(s) (e.g., AX, AX:DX, etc.) this vector is built from return_regs
|
|
|
|
|
|
ida_hexrays.mcallinfo_t.return_argloc
|
|
location of the returned value
|
|
|
|
ida_hexrays.mcallinfo_t.return_regs
|
|
list of values returned by the function
|
|
|
|
ida_hexrays.mcallinfo_t.return_type
|
|
type of the returned value
|
|
|
|
ida_hexrays.mcallinfo_t.role
|
|
function role
|
|
|
|
ida_hexrays.mcallinfo_t.set_type(self, type: "tinfo_t") -> bool
|
|
|
|
ida_hexrays.mcallinfo_t.solid_args
|
|
number of solid args. there may be variadic args in addtion
|
|
|
|
|
|
ida_hexrays.mcallinfo_t.spoiled
|
|
list of spoiled locations (includes return_regs)
|
|
|
|
ida_hexrays.mcallinfo_t.stkargs_top
|
|
first offset past stack arguments
|
|
|
|
ida_hexrays.mcallinfo_t.visible_memory
|
|
what memory is visible to the call?
|
|
|
|
ida_hexrays.mcases_t
|
|
|
|
ida_hexrays.mcases_t.__eq__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t.__ge__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t.__gt__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t.__init__(self)
|
|
|
|
ida_hexrays.mcases_t.__le__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t.__lt__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t.__ne__(self, r: "mcases_t") -> bool
|
|
|
|
ida_hexrays.mcases_t._print(self) -> None
|
|
|
|
ida_hexrays.mcases_t.compare(self, r: "mcases_t") -> int
|
|
|
|
ida_hexrays.mcases_t.dstr(self) -> str
|
|
|
|
ida_hexrays.mcases_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mcases_t.resize(self, s: int) -> None
|
|
|
|
ida_hexrays.mcases_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.mcases_t.swap(self, r: "mcases_t") -> None
|
|
|
|
ida_hexrays.mcases_t.targets
|
|
target block numbers
|
|
|
|
ida_hexrays.mcases_t.values
|
|
expression values for each target
|
|
|
|
ida_hexrays.mcode_modifies_d(mcode: "mcode_t") -> bool
|
|
|
|
ida_hexrays.microcode_filter_t
|
|
|
|
ida_hexrays.microcode_filter_t.__disown__(self)
|
|
|
|
ida_hexrays.microcode_filter_t.__init__(self)
|
|
|
|
ida_hexrays.microcode_filter_t.apply(self, cdg: "codegen_t") -> "merror_t"
|
|
generate microcode for an instruction
|
|
|
|
@returns MERR_... code: MERR_OK - user-defined microcode generated, go to the next instruction MERR_INSN - not generated - the caller should try the standard way else - error
|
|
|
|
ida_hexrays.microcode_filter_t.match(self, cdg: "codegen_t") -> bool
|
|
check if the filter object is to be applied
|
|
|
|
@returns success
|
|
|
|
ida_hexrays.min_vlr_svalue(size: int) -> "uvlr_t"
|
|
|
|
ida_hexrays.minsn_t
|
|
|
|
ida_hexrays.minsn_t.__dbg_get_meminfo(self) -> str
|
|
|
|
ida_hexrays.minsn_t.__dbg_get_registered_kind(self) -> int
|
|
|
|
ida_hexrays.minsn_t.__init__(self, *args)
|
|
|
|
ida_hexrays.minsn_t.__lt__(self, ri: "minsn_t") -> bool
|
|
|
|
ida_hexrays.minsn_t._acquire_ownership(self, v, acquire)
|
|
|
|
ida_hexrays.minsn_t._deregister(self) -> None
|
|
|
|
ida_hexrays.minsn_t._ensure_cond(self, ok, cond_str)
|
|
|
|
ida_hexrays.minsn_t._ensure_no_obj(self, o, attr, attr_is_acquired)
|
|
|
|
ida_hexrays.minsn_t._ensure_ownership_transferrable(self, v)
|
|
|
|
ida_hexrays.minsn_t._make_nop(self) -> None
|
|
Convert instruction to nop. This function erases all info but the prev/next fields. In most cases it is better to use mblock_t::make_nop(), which also marks the block lists as dirty.
|
|
|
|
|
|
ida_hexrays.minsn_t._maybe_disown_and_deregister(self)
|
|
|
|
ida_hexrays.minsn_t._meminfo(self)
|
|
|
|
ida_hexrays.minsn_t._obj_id(self) -> "PyObject *"
|
|
|
|
ida_hexrays.minsn_t._own_and_register(self)
|
|
|
|
ida_hexrays.minsn_t._print(self, *args) -> None
|
|
|
|
ida_hexrays.minsn_t._register(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_assert(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_combinable(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_combined(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_fpinsn(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_ignlowsrc(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_multimov(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_noret_icall(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_propagatable(self) -> None
|
|
|
|
ida_hexrays.minsn_t.clr_tailcall(self) -> None
|
|
|
|
ida_hexrays.minsn_t.contains_call(self, with_helpers: bool = False) -> bool
|
|
Does the instruction contain a call?
|
|
|
|
ida_hexrays.minsn_t.contains_opcode(self, mcode: "mcode_t") -> bool
|
|
Does the instruction have the specified opcode? This function searches subinstructions as well.
|
|
|
|
@param mcode: opcode to search for.
|
|
|
|
ida_hexrays.minsn_t.d
|
|
destination operand
|
|
|
|
ida_hexrays.minsn_t.deserialize(self, bytes: "uchar const *", format_version: int) -> bool
|
|
Deserialize an instruction
|
|
|
|
@param bytes: pointer to serialized data
|
|
@param format_version: serialization format version. this value is returned by minsn_t::serialize()
|
|
@returns success
|
|
|
|
ida_hexrays.minsn_t.dstr(self) -> str
|
|
Get displayable text without tags in a static buffer.
|
|
|
|
ida_hexrays.minsn_t.ea
|
|
instruction address
|
|
|
|
ida_hexrays.minsn_t.equal_insns(self, m: "minsn_t", eqflags: int) -> bool
|
|
Compare instructions. This is the main comparison function for instructions.
|
|
|
|
@param m: instruction to compare with
|
|
@param eqflags: combination of comparison bits bits
|
|
|
|
ida_hexrays.minsn_t.find_call(self, with_helpers: bool = False) -> "minsn_t *"
|
|
Find a call instruction. Check for the current instruction and its subinstructions.
|
|
|
|
@param with_helpers: consider helper calls as well?
|
|
|
|
ida_hexrays.minsn_t.find_ins_op(self, op: "mcode_t" = m_nop) -> "minsn_t *"
|
|
Find an operand that is a subinsruction with the specified opcode. This function checks only the 'l' and 'r' operands of the current insn.
|
|
|
|
@param op: opcode to search for
|
|
@returns &l or &r or nullptr
|
|
|
|
ida_hexrays.minsn_t.find_num_op(self) -> "mop_t *"
|
|
Find a numeric operand of the current instruction. This function checks only the 'l' and 'r' operands of the current insn.
|
|
|
|
@returns &l or &r or nullptr
|
|
|
|
ida_hexrays.minsn_t.find_opcode(self, mcode: "mcode_t") -> "minsn_t *"
|
|
Find a (sub)insruction with the specified opcode.
|
|
|
|
@param mcode: opcode to search for.
|
|
|
|
ida_hexrays.minsn_t.for_all_insns(self, mv: "minsn_visitor_t") -> int
|
|
Visit all instructions. This function visits the instruction itself and all its subinstructions.
|
|
|
|
@param mv: instruction visitor
|
|
@returns non-zero value returned by mv.visit_mop() or zero
|
|
|
|
ida_hexrays.minsn_t.for_all_ops(self, mv: "mop_visitor_t") -> int
|
|
Visit all instruction operands. This function visits subinstruction operands as well.
|
|
|
|
@param mv: operand visitor
|
|
@returns non-zero value returned by mv.visit_mop() or zero
|
|
|
|
ida_hexrays.minsn_t.get_role(self) -> "funcrole_t"
|
|
Get the function role of a call.
|
|
|
|
ida_hexrays.minsn_t.get_split_size(self) -> int
|
|
|
|
ida_hexrays.minsn_t.has_side_effects(self, include_ldx_and_divs: bool = False) -> bool
|
|
Does the instruction have a side effect?
|
|
|
|
@param include_ldx_and_divs: consider ldx/div/mod as having side effects? stx is always considered as having side effects. Apart from ldx/std only call may have side effects.
|
|
|
|
ida_hexrays.minsn_t.iprops
|
|
combination of instruction property bits bits
|
|
|
|
ida_hexrays.minsn_t.is_after(self, m: "minsn_t") -> bool
|
|
Is the instruction after the specified one?
|
|
|
|
@param m: the instruction to compare against in the list
|
|
|
|
ida_hexrays.minsn_t.is_alloca(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_assert(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_between(self, m1: "minsn_t", m2: "minsn_t") -> bool
|
|
Is the instruction in the specified range of instructions?
|
|
|
|
@param m1: beginning of the range in the doubly linked list
|
|
@param m2: end of the range in the doubly linked list (excluded, may be nullptr) This function assumes that m1 and m2 belong to the same basic block and they are top level instructions.
|
|
|
|
ida_hexrays.minsn_t.is_bswap(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_cleaning_pop(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_combinable(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_combined(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_extstx(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_farcall(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_fpinsn(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_helper(self, name: str) -> bool
|
|
Is a helper call with the specified name? Helper calls usually have well-known function names (see Well known function names) but they may have any other name. The decompiler does not assume any special meaning for non-well-known names.
|
|
|
|
|
|
ida_hexrays.minsn_t.is_ignlowsrc(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_inverted_jx(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_like_move(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_mbarrier(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_memcpy(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_memset(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_mov(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_multimov(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_noret_call(self, flags: int = 0) -> bool
|
|
Is a non-returing call?
|
|
|
|
@param flags: combination of NORET_... bits
|
|
|
|
ida_hexrays.minsn_t.is_optional(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_persistent(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_propagatable(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_readflags(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_tailcall(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.is_unknown_call(self) -> bool
|
|
Is an unknown call? Unknown calls are calls without the argument list (mcallinfo_t). Usually the argument lists are determined by mba_t::analyze_calls(). Unknown calls exist until the MMAT_CALLS maturity level. See also mblock_t::is_call_block
|
|
|
|
|
|
ida_hexrays.minsn_t.is_wild_match(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.l
|
|
left operand
|
|
|
|
ida_hexrays.minsn_t.lexcompare(self, ri: "minsn_t") -> int
|
|
|
|
ida_hexrays.minsn_t.may_use_aliased_memory(self) -> bool
|
|
Is it possible for the instruction to use aliased memory?
|
|
|
|
ida_hexrays.minsn_t.modifies_d(self) -> bool
|
|
Does the instruction modify its 'd' operand? Some instructions (e.g. m_stx) do not modify the 'd' operand.
|
|
|
|
|
|
ida_hexrays.minsn_t.modifies_pair_mop(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.next
|
|
next insn in doubly linked list. check also nexti()
|
|
|
|
ida_hexrays.minsn_t.opcode
|
|
instruction opcode
|
|
|
|
ida_hexrays.minsn_t.optimize_solo(self, optflags: int = 0) -> int
|
|
Optimize one instruction without context. This function does not have access to the instruction context (the previous and next instructions in the list, the block number, etc). It performs only basic optimizations that are available without this info.
|
|
|
|
@param optflags: combination of optimization flags bits
|
|
@returns number of changes, 0-unchanged See also mblock_t::optimize_insn()
|
|
|
|
ida_hexrays.minsn_t.optimize_subtree(self, blk: "mblock_t", top: "minsn_t", parent: "minsn_t", converted_call: "ea_t *", optflags: int = 2) -> int
|
|
Optimize instruction in its context. Do not use this function, use mblock_t::optimize()
|
|
|
|
|
|
ida_hexrays.minsn_t.prev
|
|
prev insn in doubly linked list. check also previ()
|
|
|
|
ida_hexrays.minsn_t.r
|
|
right operand
|
|
|
|
ida_hexrays.minsn_t.replace_by(self, o)
|
|
|
|
ida_hexrays.minsn_t.serialize(self, b: "bytevec_t *") -> int
|
|
Serialize an instruction
|
|
|
|
@param b: the output buffer
|
|
@returns the serialization format that was used to store info
|
|
|
|
ida_hexrays.minsn_t.set_assert(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_cleaning_pop(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_combinable(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_extstx(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_farcall(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_fpinsn(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_ignlowsrc(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_inverted_jx(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_mbarrier(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_multimov(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_noret_icall(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_optional(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_persistent(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_split_size(self, s: int) -> None
|
|
|
|
ida_hexrays.minsn_t.set_tailcall(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_unmerged(self) -> None
|
|
|
|
ida_hexrays.minsn_t.set_wild_match(self) -> None
|
|
|
|
ida_hexrays.minsn_t.setaddr(self, new_ea: ida_idaapi.ea_t) -> None
|
|
Change the instruction address. This function modifies subinstructions as well.
|
|
|
|
|
|
ida_hexrays.minsn_t.swap(self, m: "minsn_t") -> None
|
|
Swap two instructions. The prev/next fields are not modified by this function because it would corrupt the doubly linked list.
|
|
|
|
|
|
ida_hexrays.minsn_t.was_noret_icall(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.was_split(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.was_unmerged(self) -> bool
|
|
|
|
ida_hexrays.minsn_t.was_unpaired(self) -> bool
|
|
|
|
ida_hexrays.minsn_visitor_t
|
|
|
|
ida_hexrays.minsn_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.minsn_visitor_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None)
|
|
|
|
ida_hexrays.minsn_visitor_t.visit_minsn(self) -> int
|
|
|
|
ida_hexrays.mlist_mop_visitor_t
|
|
|
|
ida_hexrays.mlist_mop_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.mlist_mop_visitor_t.__init__(self)
|
|
|
|
ida_hexrays.mlist_mop_visitor_t.prune
|
|
Should skip sub-operands of the current operand? visit_mop() may set 'prune=true' for that.
|
|
|
|
|
|
ida_hexrays.mlist_mop_visitor_t.visit_mop(self, op: "mop_t") -> int
|
|
|
|
ida_hexrays.mlist_t
|
|
|
|
ida_hexrays.mlist_t.__eq__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.__ge__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.__gt__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mlist_t.__le__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.__lt__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.__ne__(self, r: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t._print(self) -> None
|
|
|
|
ida_hexrays.mlist_t.add(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. add(r: mreg_t, size: int) -> bool
|
|
1. add(r: const rlist_t &) -> bool
|
|
2. add(ivl: const ivl_t &) -> bool
|
|
3. add(lst: const mlist_t &) -> bool
|
|
|
|
# 0: add(r: mreg_t, size: int) -> bool
|
|
|
|
|
|
# 1: add(r: const rlist_t &) -> bool
|
|
|
|
|
|
# 2: add(ivl: const ivl_t &) -> bool
|
|
|
|
|
|
# 3: add(lst: const mlist_t &) -> bool
|
|
|
|
ida_hexrays.mlist_t.addmem(self, ea: ida_idaapi.ea_t, size: "asize_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.clear(self) -> None
|
|
|
|
ida_hexrays.mlist_t.compare(self, r: "mlist_t") -> int
|
|
|
|
ida_hexrays.mlist_t.count(self) -> "asize_t"
|
|
|
|
ida_hexrays.mlist_t.dstr(self) -> str
|
|
|
|
ida_hexrays.mlist_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mlist_t.has(self, r: "mreg_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.has_all(self, r: "mreg_t", size: int) -> bool
|
|
|
|
ida_hexrays.mlist_t.has_any(self, r: "mreg_t", size: int) -> bool
|
|
|
|
ida_hexrays.mlist_t.has_common(self, lst: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.has_memory(self) -> bool
|
|
|
|
ida_hexrays.mlist_t.includes(self, lst: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.intersect(self, lst: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.is_subset_of(self, lst: "mlist_t") -> bool
|
|
|
|
ida_hexrays.mlist_t.sub(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. sub(r: mreg_t, size: int) -> bool
|
|
1. sub(ivl: const ivl_t &) -> bool
|
|
2. sub(lst: const mlist_t &) -> bool
|
|
|
|
# 0: sub(r: mreg_t, size: int) -> bool
|
|
|
|
|
|
# 1: sub(ivl: const ivl_t &) -> bool
|
|
|
|
|
|
# 2: sub(lst: const mlist_t &) -> bool
|
|
|
|
ida_hexrays.mlist_t.swap(self, r: "mlist_t") -> None
|
|
|
|
ida_hexrays.mnumber_t
|
|
|
|
ida_hexrays.mnumber_t.__eq__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.__ge__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.__gt__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mnumber_t.__le__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.__lt__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.__ne__(self, r: "mnumber_t") -> bool
|
|
|
|
ida_hexrays.mnumber_t.compare(self, r: "mnumber_t") -> int
|
|
|
|
ida_hexrays.mnumber_t.update_value(self, val64: "uint64") -> None
|
|
|
|
ida_hexrays.modify_user_lvar_info(func_ea: ida_idaapi.ea_t, mli_flags: "uint", info: "lvar_saved_info_t") -> bool
|
|
Modify saved local variable settings of one variable.
|
|
|
|
@param func_ea: function start address
|
|
@param mli_flags: bits that specify which attrs defined by INFO are to be set
|
|
@param info: local variable info attrs
|
|
@returns true if modified, false if invalid MLI_FLAGS passed
|
|
|
|
ida_hexrays.modify_user_lvars(entry_ea: ida_idaapi.ea_t, mlv: "user_lvar_modifier_t") -> bool
|
|
Modify saved local variable settings.
|
|
|
|
@param entry_ea: function start address
|
|
@param mlv: local variable modifier
|
|
@returns true if modified variables
|
|
|
|
ida_hexrays.mop_S
|
|
local stack variable (they exist until MMAT_LVARS)
|
|
|
|
ida_hexrays.mop_a
|
|
mop_addr_t: address of operand (mop_l, mop_v, mop_S, mop_r)
|
|
|
|
ida_hexrays.mop_addr_t
|
|
|
|
ida_hexrays.mop_addr_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mop_addr_t.lexcompare(self, ra: "mop_addr_t") -> int
|
|
|
|
ida_hexrays.mop_b
|
|
micro basic block (mblock_t)
|
|
|
|
ida_hexrays.mop_c
|
|
mcases
|
|
|
|
ida_hexrays.mop_d
|
|
result of another instruction
|
|
|
|
ida_hexrays.mop_f
|
|
list of arguments
|
|
|
|
ida_hexrays.mop_fn
|
|
floating point constant
|
|
|
|
ida_hexrays.mop_h
|
|
helper function
|
|
|
|
ida_hexrays.mop_l
|
|
local variable
|
|
|
|
ida_hexrays.mop_n
|
|
immediate number constant
|
|
|
|
ida_hexrays.mop_p
|
|
operand pair
|
|
|
|
ida_hexrays.mop_pair_t
|
|
|
|
ida_hexrays.mop_pair_t.__init__(self)
|
|
|
|
ida_hexrays.mop_pair_t.hop
|
|
high operand
|
|
|
|
ida_hexrays.mop_pair_t.lop
|
|
low operand
|
|
|
|
ida_hexrays.mop_r
|
|
register (they exist until MMAT_LVARS)
|
|
|
|
ida_hexrays.mop_sc
|
|
scattered
|
|
|
|
ida_hexrays.mop_str
|
|
immediate string constant (user representation)
|
|
|
|
ida_hexrays.mop_t
|
|
|
|
ida_hexrays.mop_t.__dbg_get_meminfo(self) -> str
|
|
|
|
ida_hexrays.mop_t.__dbg_get_registered_kind(self) -> int
|
|
|
|
ida_hexrays.mop_t.__eq__(self, rop: "mop_t") -> bool
|
|
|
|
ida_hexrays.mop_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mop_t.__lt__(self, rop: "mop_t") -> bool
|
|
|
|
ida_hexrays.mop_t.__ne__(self, rop: "mop_t") -> bool
|
|
|
|
ida_hexrays.mop_t._acquire_ownership(self, v, acquire)
|
|
|
|
ida_hexrays.mop_t._deregister(self) -> None
|
|
|
|
ida_hexrays.mop_t._ensure_cond(self, ok, cond_str)
|
|
|
|
ida_hexrays.mop_t._ensure_no_obj(self, o, attr, attr_is_acquired)
|
|
|
|
ida_hexrays.mop_t._ensure_no_t(self)
|
|
|
|
ida_hexrays.mop_t._ensure_ownership_transferrable(self, v)
|
|
|
|
ida_hexrays.mop_t._get_a(self) -> "mop_addr_t *"
|
|
|
|
ida_hexrays.mop_t._get_b(self) -> int
|
|
|
|
ida_hexrays.mop_t._get_c(self) -> "mcases_t *"
|
|
|
|
ida_hexrays.mop_t._get_cstr(self) -> str
|
|
|
|
ida_hexrays.mop_t._get_d(self) -> "minsn_t *"
|
|
|
|
ida_hexrays.mop_t._get_f(self) -> "mcallinfo_t *"
|
|
|
|
ida_hexrays.mop_t._get_fpc(self) -> "fnumber_t *"
|
|
|
|
ida_hexrays.mop_t._get_g(self) -> ida_idaapi.ea_t
|
|
|
|
ida_hexrays.mop_t._get_helper(self) -> str
|
|
|
|
ida_hexrays.mop_t._get_l(self) -> "lvar_ref_t *"
|
|
|
|
ida_hexrays.mop_t._get_nnn(self) -> "mnumber_t *"
|
|
|
|
ida_hexrays.mop_t._get_pair(self) -> "mop_pair_t *"
|
|
|
|
ida_hexrays.mop_t._get_r(self) -> "mreg_t"
|
|
|
|
ida_hexrays.mop_t._get_s(self) -> "stkvar_ref_t *"
|
|
|
|
ida_hexrays.mop_t._get_scif(self) -> "scif_t *"
|
|
|
|
ida_hexrays.mop_t._get_t(self) -> "mopt_t"
|
|
|
|
ida_hexrays.mop_t._make_blkref(self, blknum: int) -> None
|
|
Create a block reference operand without erasing previous data.
|
|
|
|
@param blknum: block number Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
ida_hexrays.mop_t._make_callinfo(self, fi: "mcallinfo_t") -> None
|
|
Create a call info operand without erasing previous data.
|
|
|
|
@param fi: callinfo Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
ida_hexrays.mop_t._make_cases(self, _cases: "mcases_t") -> None
|
|
Create a 'switch cases' operand without erasing previous data. Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
|
|
ida_hexrays.mop_t._make_gvar(self, ea: ida_idaapi.ea_t) -> None
|
|
Create a global variable operand without erasing previous data.
|
|
|
|
@param ea: address of the variable Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
ida_hexrays.mop_t._make_insn(self, ins: "minsn_t") -> None
|
|
Create a nested instruction without erasing previous data.
|
|
|
|
@param ins: pointer to the instruction to encapsulate into the operand Note: this function does not erase the previous contents of the operand; call erase() if necessary See also create_from_insn, which is higher level
|
|
|
|
ida_hexrays.mop_t._make_lvar(self, mba: "mba_t", idx: int, off: int = 0) -> None
|
|
Create a local variable operand.
|
|
|
|
@param mba: pointer to microcode
|
|
@param idx: index into mba->vars
|
|
@param off: offset from the beginning of the variable Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
ida_hexrays.mop_t._make_pair(self, _pair: "mop_pair_t") -> None
|
|
Create a pair operand without erasing previous data. Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
|
|
ida_hexrays.mop_t._make_reg(self, *args) -> None
|
|
This function has the following signatures:
|
|
|
|
0. _make_reg(reg: mreg_t) -> None
|
|
1. _make_reg(reg: mreg_t, _size: int) -> None
|
|
|
|
# 0: _make_reg(reg: mreg_t) -> None
|
|
|
|
Create a register operand without erasing previous data.
|
|
|
|
|
|
# 1: _make_reg(reg: mreg_t, _size: int) -> None
|
|
|
|
ida_hexrays.mop_t._make_stkvar(self, mba: "mba_t", off: int) -> None
|
|
Create a stack variable operand.
|
|
|
|
@param mba: pointer to microcode
|
|
@param off: decompiler stkoff Note: this function does not erase the previous contents of the operand; call erase() if necessary
|
|
|
|
ida_hexrays.mop_t._make_strlit(self, str: str) -> None
|
|
Create a constant string operand.
|
|
|
|
ida_hexrays.mop_t._maybe_disown_and_deregister(self)
|
|
|
|
ida_hexrays.mop_t._meminfo(self)
|
|
|
|
ida_hexrays.mop_t._obj_id(self) -> "PyObject *"
|
|
|
|
ida_hexrays.mop_t._own_and_register(self)
|
|
|
|
ida_hexrays.mop_t._print(self, *args) -> None
|
|
|
|
ida_hexrays.mop_t._register(self) -> None
|
|
|
|
ida_hexrays.mop_t._set_a(self, _v: "mop_addr_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_b(self, _v: int) -> None
|
|
|
|
ida_hexrays.mop_t._set_c(self, _v: "mcases_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_cstr(self, _v: str) -> None
|
|
|
|
ida_hexrays.mop_t._set_d(self, _v: "minsn_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_f(self, _v: "mcallinfo_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_fpc(self, _v: "fnumber_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_g(self, _v: ida_idaapi.ea_t) -> None
|
|
|
|
ida_hexrays.mop_t._set_helper(self, _v: str) -> None
|
|
|
|
ida_hexrays.mop_t._set_l(self, _v: "lvar_ref_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_nnn(self, _v: "mnumber_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_pair(self, _v: "mop_pair_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_r(self, _v: "mreg_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_s(self, _v: "stkvar_ref_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_scif(self, _v: "scif_t") -> None
|
|
|
|
ida_hexrays.mop_t._set_t(self, v: "mopt_t") -> None
|
|
|
|
ida_hexrays.mop_t.apply_ld_mcode(self, mcode: "mcode_t", ea: ida_idaapi.ea_t, newsize: int) -> None
|
|
Apply a unary opcode to the operand.
|
|
|
|
@param mcode: opcode to apply. it must accept 'l' and 'd' operands but not 'r'. examples: m_low/m_high/m_xds/m_xdu
|
|
@param ea: value of minsn_t::ea for the newly created insruction
|
|
@param newsize: new operand size Example: apply_ld_mcode(m_low) will convert op => low(op)
|
|
|
|
ida_hexrays.mop_t.apply_xds(self, ea: ida_idaapi.ea_t, newsize: int) -> None
|
|
|
|
ida_hexrays.mop_t.apply_xdu(self, ea: ida_idaapi.ea_t, newsize: int) -> None
|
|
|
|
ida_hexrays.mop_t.assign(self, rop: "mop_t") -> "mop_t &"
|
|
|
|
ida_hexrays.mop_t.change_size(self, nsize: int, sideff: "side_effect_t" = WITH_SIDEFF) -> bool
|
|
Change the operand size. Examples: change_size(AL.1, 2) -> AX.2 change_size(qword_00000008.8, 4) -> dword_00000008.4 change_size(xdu.8(op.4), 4) -> op.4 change_size(#0x12345678.4, 1) -> #0x78.1
|
|
|
|
@param nsize: new operand size
|
|
@param sideff: may modify the database because of the size change?
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.create_from_insn(self, m: "minsn_t") -> None
|
|
Create operand from an instruction. This function creates a nested instruction that can be used as an operand. Example: if m="add x,y,z", our operand will be (t=mop_d,d=m). The destination operand of 'add' (z) is lost.
|
|
|
|
@param m: instruction to embed into operand. may not be nullptr.
|
|
|
|
ida_hexrays.mop_t.create_from_ivlset(self, mba: "mba_t", ivs: "ivlset_t", fullsize: int) -> bool
|
|
Create operand from ivlset_t. Example: if IVS contains [glbvar..glbvar+4), our operand will be (t=mop_v, g=&glbvar, size=4)
|
|
|
|
@param mba: pointer to microcode
|
|
@param ivs: set of memory intervals
|
|
@param fullsize: mba->fullsize
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.create_from_mlist(self, mba: "mba_t", lst: "mlist_t", fullsize: int) -> bool
|
|
Create operand from mlist_t. Example: if LST contains 4 bits for R0.4, our operand will be (t=mop_r, r=R0, size=4)
|
|
|
|
@param mba: pointer to microcode
|
|
@param lst: list of locations
|
|
@param fullsize: mba->fullsize
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.create_from_scattered_vdloc(self, mba: "mba_t", name: str, type: "tinfo_t", loc: "vdloc_t") -> None
|
|
Create operand from scattered vdloc_t. Example: if LOC is (ALOC_DIST, {EAX.4, EDX.4}) and TYPE is _LARGE_INTEGER, our operand will be (t=mop_sc, scif={EAX.4, EDX.4})
|
|
|
|
@param mba: pointer to microcode
|
|
@param name: name of the operand, if available
|
|
@param type: type of the operand, must be present
|
|
@param loc: a scattered location
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.create_from_vdloc(self, mba: "mba_t", loc: "vdloc_t", _size: int) -> None
|
|
Create operand from vdloc_t. Example: if LOC contains (type=ALOC_REG1, r=R0), our operand will be (t=mop_r, r=R0, size=_SIZE)
|
|
|
|
@param mba: pointer to microcode
|
|
@param loc: location
|
|
@param _size: operand size Note: this function cannot handle scattered locations.
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.double_size(self, sideff: "side_effect_t" = WITH_SIDEFF) -> bool
|
|
|
|
ida_hexrays.mop_t.dstr(self) -> str
|
|
|
|
ida_hexrays.mop_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mop_t.equal_mops(self, rop: "mop_t", eqflags: int) -> bool
|
|
Compare operands. This is the main comparison function for operands.
|
|
|
|
@param rop: operand to compare with
|
|
@param eqflags: combination of comparison bits bits
|
|
|
|
ida_hexrays.mop_t.erase(self) -> None
|
|
|
|
ida_hexrays.mop_t.erase_but_keep_size(self) -> None
|
|
|
|
ida_hexrays.mop_t.for_all_ops(self, mv: "mop_visitor_t", type: "tinfo_t" = None, is_target: bool = False) -> int
|
|
Visit the operand and all its sub-operands. This function visits the current operand as well.
|
|
|
|
@param mv: visitor object
|
|
@param type: operand type
|
|
@param is_target: is a destination operand?
|
|
|
|
ida_hexrays.mop_t.for_all_scattered_submops(self, sv: "scif_visitor_t") -> int
|
|
Visit all sub-operands of a scattered operand. This function does not visit the current operand, only its sub-operands. All sub-operands are synthetic and are destroyed after the visitor. This function works only with scattered operands.
|
|
|
|
@param sv: visitor object
|
|
|
|
ida_hexrays.mop_t.get_insn(self, code: "mcode_t") -> "minsn_t *"
|
|
Get subinstruction of the operand. If the operand has a subinstruction with the specified opcode, return it.
|
|
|
|
@param code: desired opcode
|
|
@returns pointer to the instruction or nullptr
|
|
|
|
ida_hexrays.mop_t.get_stkoff(self, p_vdoff: "sval_t *") -> bool
|
|
Get the referenced stack offset. This function can also handle mop_sc if it is entirely mapped into a continuous stack region.
|
|
|
|
@param p_vdoff: the output buffer
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.get_stkvar(self, udm: "udm_t" = None, p_idaoff: "uval_t *" = None) -> "ssize_t"
|
|
Retrieve the referenced stack variable.
|
|
|
|
@param udm: stkvar, may be nullptr
|
|
@param p_idaoff: if specified, will hold IDA stkoff after the call.
|
|
@returns index of stkvar in the frame or -1
|
|
|
|
ida_hexrays.mop_t.has_side_effects(self, include_ldx_and_divs: bool = False) -> bool
|
|
Has any side effects?
|
|
|
|
@param include_ldx_and_divs: consider ldx/div/mod as having side effects?
|
|
|
|
ida_hexrays.mop_t.is01(self) -> bool
|
|
Are the possible values of the operand only 0 and 1? This function returns true for 0/1 constants, bit registers, the result of 'set' insns, etc.
|
|
|
|
|
|
ida_hexrays.mop_t.is_arglist(self) -> bool
|
|
Is a list of arguments?
|
|
|
|
ida_hexrays.mop_t.is_bit_reg(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. is_bit_reg() -> bool
|
|
1. is_bit_reg(reg: mreg_t) -> bool
|
|
|
|
# 0: is_bit_reg() -> bool
|
|
|
|
|
|
# 1: is_bit_reg(reg: mreg_t) -> bool
|
|
|
|
Is a bit register? This includes condition codes and eventually other bit registers
|
|
|
|
|
|
ida_hexrays.mop_t.is_cc(self) -> bool
|
|
Is a condition code?
|
|
|
|
ida_hexrays.mop_t.is_ccflags(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_constant(self, is_signed: bool = True) -> bool
|
|
Retrieve value of a constant integer operand.
|
|
|
|
@param is_signed: should treat the value as signed
|
|
@returns true if the operand is mop_n
|
|
|
|
ida_hexrays.mop_t.is_equal_to(self, n: "uint64", is_signed: bool = True) -> bool
|
|
|
|
ida_hexrays.mop_t.is_extended_from(self, nbytes: int, is_signed: bool) -> bool
|
|
Does the high part of the operand consist of zero or sign bytes?
|
|
|
|
ida_hexrays.mop_t.is_glbaddr(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. is_glbaddr() -> bool
|
|
1. is_glbaddr(ea: ida_idaapi.ea_t) -> bool
|
|
|
|
# 0: is_glbaddr() -> bool
|
|
|
|
Is address of a global memory cell?
|
|
|
|
|
|
# 1: is_glbaddr(ea: ida_idaapi.ea_t) -> bool
|
|
|
|
Is address of the specified global memory cell?
|
|
|
|
ida_hexrays.mop_t.is_glbaddr_from_fixup(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_impptr_done(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_insn(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. is_insn() -> bool
|
|
1. is_insn(code: mcode_t) -> bool
|
|
|
|
# 0: is_insn() -> bool
|
|
|
|
Is a sub-instruction?
|
|
|
|
|
|
# 1: is_insn(code: mcode_t) -> bool
|
|
|
|
Is a sub-instruction with the specified opcode?
|
|
|
|
ida_hexrays.mop_t.is_kreg(self) -> bool
|
|
Is a kernel register?
|
|
|
|
ida_hexrays.mop_t.is_lowaddr(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_mob(self, serial: int) -> bool
|
|
Is a block reference to the specified block?
|
|
|
|
ida_hexrays.mop_t.is_negative_constant(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_one(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_pcval(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_positive_constant(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_reg(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. is_reg() -> bool
|
|
1. is_reg(_r: mreg_t) -> bool
|
|
2. is_reg(_r: mreg_t, _size: int) -> bool
|
|
|
|
# 0: is_reg() -> bool
|
|
|
|
Is a register operand? See also get_mreg_name()
|
|
|
|
|
|
# 1: is_reg(_r: mreg_t) -> bool
|
|
|
|
Is the specified register?
|
|
|
|
|
|
# 2: is_reg(_r: mreg_t, _size: int) -> bool
|
|
|
|
Is the specified register of the specified size?
|
|
|
|
ida_hexrays.mop_t.is_scattered(self) -> bool
|
|
Is a scattered operand?
|
|
|
|
ida_hexrays.mop_t.is_sign_extended_from(self, nbytes: int) -> bool
|
|
Does the high part of the operand consist of the sign bytes?
|
|
|
|
@param nbytes: number of bytes that were sign extended. the remaining size-nbytes high bytes must be sign bytes Example: is_sign_extended_from(xds.4(op.1), 1) -> true because the high 3 bytes are certainly sign bits
|
|
|
|
ida_hexrays.mop_t.is_stkaddr(self) -> bool
|
|
Is address of a stack variable?
|
|
|
|
ida_hexrays.mop_t.is_udt(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_undef_val(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_zero(self) -> bool
|
|
|
|
ida_hexrays.mop_t.is_zero_extended_from(self, nbytes: int) -> bool
|
|
Does the high part of the operand consist of zero bytes?
|
|
|
|
@param nbytes: number of bytes that were zero extended. the remaining size-nbytes high bytes must be zero Example: is_zero_extended_from(xdu.8(op.1), 2) -> true because the high 6 bytes are certainly zero
|
|
|
|
ida_hexrays.mop_t.lexcompare(self, rop: "mop_t") -> int
|
|
|
|
ida_hexrays.mop_t.make_blkref(self, blknum: int) -> None
|
|
Create a global variable operand.
|
|
|
|
ida_hexrays.mop_t.make_first_half(self, width: int) -> bool
|
|
Make the first part of the operand. This function does not care about the memory endianness
|
|
|
|
@param width: the desired size of the operand part in bytes
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.make_fpnum(self, bytes: "void const *") -> bool
|
|
Create a floating point constant operand.
|
|
|
|
@param bytes: pointer to the floating point value as used by the current processor (e.g. for x86 it must be in IEEE 754)
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.make_gvar(self, ea: ida_idaapi.ea_t) -> None
|
|
Create a global variable operand.
|
|
|
|
ida_hexrays.mop_t.make_helper(self, name: str) -> None
|
|
Create a helper operand. A helper operand usually keeps a built-in function name like "va_start" It is essentially just an arbitrary identifier without any additional info.
|
|
|
|
|
|
ida_hexrays.mop_t.make_high_half(self, width: int) -> bool
|
|
Make the high part of the operand. This function takes into account the memory endianness (byte sex)
|
|
|
|
@param width: the desired size of the operand part in bytes
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.make_insn(self, ins: "minsn_t") -> None
|
|
Create a nested instruction.
|
|
|
|
ida_hexrays.mop_t.make_low_half(self, width: int) -> bool
|
|
Make the low part of the operand. This function takes into account the memory endianness (byte sex)
|
|
|
|
@param width: the desired size of the operand part in bytes
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.make_number(self, *args) -> None
|
|
Create an integer constant operand.
|
|
|
|
@param _value: value to store in the operand
|
|
@param _size: size of the value in bytes (1,2,4,8)
|
|
@param _ea: address of the processor instruction that made the value
|
|
@param opnum: operand number of the processor instruction
|
|
|
|
ida_hexrays.mop_t.make_reg(self, *args) -> None
|
|
This function has the following signatures:
|
|
|
|
0. make_reg(reg: mreg_t) -> None
|
|
1. make_reg(reg: mreg_t, _size: int) -> None
|
|
|
|
# 0: make_reg(reg: mreg_t) -> None
|
|
|
|
Create a register operand.
|
|
|
|
|
|
# 1: make_reg(reg: mreg_t, _size: int) -> None
|
|
|
|
ida_hexrays.mop_t.make_reg_pair(self, loreg: int, hireg: int, halfsize: int) -> None
|
|
Create pair of registers.
|
|
|
|
@param loreg: register holding the low part of the value
|
|
@param hireg: register holding the high part of the value
|
|
@param halfsize: the size of each of loreg/hireg
|
|
|
|
ida_hexrays.mop_t.make_second_half(self, width: int) -> bool
|
|
Make the second part of the operand. This function does not care about the memory endianness
|
|
|
|
@param width: the desired size of the operand part in bytes
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.make_stkvar(self, mba: "mba_t", off: int) -> None
|
|
|
|
ida_hexrays.mop_t.may_use_aliased_memory(self) -> bool
|
|
Is it possible for the operand to use aliased memory?
|
|
|
|
ida_hexrays.mop_t.oprops
|
|
Operand properties.
|
|
|
|
ida_hexrays.mop_t.preserve_side_effects(self, blk: "mblock_t", top: "minsn_t", moved_calls: "bool *" = None) -> bool
|
|
Move subinstructions with side effects out of the operand. If we decide to delete an instruction operand, it is a good idea to call this function. Alternatively we should skip such operands by calling mop_t::has_side_effects() For example, if we transform: jnz x, x, @blk => goto @blk then we must call this function before deleting the X operands.
|
|
|
|
@param blk: current block
|
|
@param top: top level instruction that contains our operand
|
|
@param moved_calls: pointer to the boolean that will track if all side effects get handled correctly. must be false initially.
|
|
@returns false failed to preserve a side effect, it is not safe to delete the operand true no side effects or successfully preserved them
|
|
|
|
ida_hexrays.mop_t.probably_floating(self) -> bool
|
|
|
|
ida_hexrays.mop_t.replace_by(self, o)
|
|
|
|
ida_hexrays.mop_t.set_impptr_done(self) -> None
|
|
|
|
ida_hexrays.mop_t.set_lowaddr(self) -> None
|
|
|
|
ida_hexrays.mop_t.set_udt(self) -> None
|
|
|
|
ida_hexrays.mop_t.set_undef_val(self) -> None
|
|
|
|
ida_hexrays.mop_t.shift_mop(self, offset: int) -> bool
|
|
Shift the operand. This function shifts only the beginning of the operand. The operand size will be changed. Examples: shift_mop(AH.1, -1) -> AX.2 shift_mop(qword_00000008.8, 4) -> dword_0000000C.4 shift_mop(xdu.8(op.4), 4) -> #0.4 shift_mop(#0x12345678.4, 3) -> #12.1
|
|
|
|
@param offset: shift count (the number of bytes to shift)
|
|
@returns success
|
|
|
|
ida_hexrays.mop_t.signed_value(self) -> "int64"
|
|
|
|
ida_hexrays.mop_t.size
|
|
Operand size. Usually it is 1,2,4,8 or NOSIZE but for UDTs other sizes are permitted
|
|
|
|
|
|
ida_hexrays.mop_t.swap(self, rop: "mop_t") -> None
|
|
|
|
ida_hexrays.mop_t.t
|
|
Operand type.
|
|
|
|
ida_hexrays.mop_t.t
|
|
Operand type.
|
|
|
|
ida_hexrays.mop_t.unsigned_value(self) -> "uint64"
|
|
|
|
ida_hexrays.mop_t.update_numop_value(self, val: "uint64") -> None
|
|
|
|
ida_hexrays.mop_t.valnum
|
|
Value number. Zero means unknown. Operands with the same value number are equal.
|
|
|
|
|
|
ida_hexrays.mop_t.value(self, is_signed: bool) -> "uint64"
|
|
Retrieve value of a constant integer operand. These functions can be called only for mop_n operands. See is_constant() that can be called on any operand.
|
|
|
|
|
|
ida_hexrays.mop_t.zero(self) -> None
|
|
|
|
ida_hexrays.mop_v
|
|
global variable
|
|
|
|
ida_hexrays.mop_visitor_t
|
|
|
|
ida_hexrays.mop_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.mop_visitor_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None)
|
|
|
|
ida_hexrays.mop_visitor_t.prune
|
|
Should skip sub-operands of the current operand? visit_mop() may set 'prune=true' for that.
|
|
|
|
|
|
ida_hexrays.mop_visitor_t.visit_mop(self, op: "mop_t", type: "tinfo_t", is_target: bool) -> int
|
|
|
|
ida_hexrays.mop_z
|
|
none
|
|
|
|
ida_hexrays.mopvec_t
|
|
|
|
ida_hexrays.mopvec_t.__eq__(self, r: "mopvec_t") -> bool
|
|
|
|
ida_hexrays.mopvec_t.__getitem__(self, i: "size_t") -> "mop_t const &"
|
|
|
|
ida_hexrays.mopvec_t.__init__(self, *args)
|
|
|
|
ida_hexrays.mopvec_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.mopvec_t.__ne__(self, r: "mopvec_t") -> bool
|
|
|
|
ida_hexrays.mopvec_t.__setitem__(self, i: "size_t", v: "mop_t") -> None
|
|
|
|
ida_hexrays.mopvec_t._del(self, x: "mop_t") -> bool
|
|
|
|
ida_hexrays.mopvec_t.add_unique(self, x: "mop_t") -> bool
|
|
|
|
ida_hexrays.mopvec_t.append(self, x: "mop_t") -> None
|
|
|
|
ida_hexrays.mopvec_t.at(self, _idx: "size_t") -> "mop_t const &"
|
|
|
|
ida_hexrays.mopvec_t.begin(self, *args) -> "qvector< mop_t >::const_iterator"
|
|
|
|
ida_hexrays.mopvec_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.mopvec_t.clear(self) -> None
|
|
|
|
ida_hexrays.mopvec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.mopvec_t.end(self, *args) -> "qvector< mop_t >::const_iterator"
|
|
|
|
ida_hexrays.mopvec_t.erase(self, *args) -> "qvector< mop_t >::iterator"
|
|
|
|
ida_hexrays.mopvec_t.extend(self, x: "mopvec_t") -> None
|
|
|
|
ida_hexrays.mopvec_t.extract(self) -> "mop_t *"
|
|
|
|
ida_hexrays.mopvec_t.find(self, *args) -> "qvector< mop_t >::const_iterator"
|
|
|
|
ida_hexrays.mopvec_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.mopvec_t.has(self, x: "mop_t") -> bool
|
|
|
|
ida_hexrays.mopvec_t.inject(self, s: "mop_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.mopvec_t.insert(self, it: "mop_t", x: "mop_t") -> "qvector< mop_t >::iterator"
|
|
|
|
ida_hexrays.mopvec_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.mopvec_t.push_back(self, *args) -> "mop_t &"
|
|
|
|
ida_hexrays.mopvec_t.qclear(self) -> None
|
|
|
|
ida_hexrays.mopvec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.mopvec_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.mopvec_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.mopvec_t.swap(self, r: "mopvec_t") -> None
|
|
|
|
ida_hexrays.mopvec_t.truncate(self) -> None
|
|
|
|
ida_hexrays.mreg2reg(reg: "mreg_t", width: int) -> int
|
|
Map a microregister to a processor register.
|
|
|
|
@param reg: microregister number
|
|
@param width: size of microregister in bytes
|
|
@returns processor register id or -1
|
|
|
|
ida_hexrays.must_mcode_close_block(mcode: "mcode_t", including_calls: bool) -> bool
|
|
Must an instruction with the given opcode be the last one in a block? Such opcodes are called closing opcodes.
|
|
|
|
@param mcode: instruction opcode
|
|
@param including_calls: should m_call/m_icall be considered as the closing opcodes? If this function returns true, the opcode cannot appear in the middle of a block. Calls are a special case: unknown calls (is_unknown_call) are considered as closing opcodes.
|
|
|
|
ida_hexrays.negate_mcode_relation(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.negated_relation(op: "ctype_t") -> "ctype_t"
|
|
Negate a comparison operator. For example, cot_sge becomes cot_slt.
|
|
|
|
ida_hexrays.new_block()
|
|
Create a new block-statement.
|
|
|
|
ida_hexrays.node_bitset_t
|
|
|
|
ida_hexrays.node_bitset_t.__init__(self, *args)
|
|
|
|
ida_hexrays.number_format_t
|
|
|
|
ida_hexrays.number_format_t.__init__(self, _opnum: int = 0)
|
|
|
|
ida_hexrays.number_format_t.flags
|
|
ida flags, which describe number radix, enum, etc
|
|
|
|
|
|
ida_hexrays.number_format_t.flags32
|
|
low 32bit of flags (for compatibility)
|
|
|
|
ida_hexrays.number_format_t.get_radix(self) -> int
|
|
Get number radix
|
|
|
|
@returns 2,8,10, or 16
|
|
|
|
ida_hexrays.number_format_t.has_unmutable_type(self) -> bool
|
|
|
|
ida_hexrays.number_format_t.is_char(self) -> bool
|
|
Is a character constant?
|
|
|
|
ida_hexrays.number_format_t.is_dec(self) -> bool
|
|
Is a decimal number?
|
|
|
|
ida_hexrays.number_format_t.is_enum(self) -> bool
|
|
Is a symbolic constant?
|
|
|
|
ida_hexrays.number_format_t.is_fixed(self) -> bool
|
|
Is number representation fixed? Fixed representation cannot be modified by the decompiler
|
|
|
|
|
|
ida_hexrays.number_format_t.is_hex(self) -> bool
|
|
Is a hexadecimal number?
|
|
|
|
ida_hexrays.number_format_t.is_numop(self) -> bool
|
|
Is a number?
|
|
|
|
ida_hexrays.number_format_t.is_oct(self) -> bool
|
|
Is a octal number?
|
|
|
|
ida_hexrays.number_format_t.is_stroff(self) -> bool
|
|
Is a structure field offset?
|
|
|
|
ida_hexrays.number_format_t.needs_to_be_inverted(self) -> bool
|
|
Does the number need to be negated or bitwise negated? Returns true if the user requested a negation but it is not done yet
|
|
|
|
|
|
ida_hexrays.number_format_t.opnum
|
|
operand number: 0..UA_MAXOP
|
|
|
|
ida_hexrays.number_format_t.org_nbytes
|
|
original number size in bytes
|
|
|
|
ida_hexrays.number_format_t.props
|
|
properties: combination of NF_ bits (Number format property bits)
|
|
|
|
|
|
ida_hexrays.number_format_t.serial
|
|
for enums: constant serial number
|
|
|
|
ida_hexrays.number_format_t.type_name
|
|
for stroffs: structure for offsetof()
|
|
for enums: enum name
|
|
|
|
|
|
ida_hexrays.op_parent_info_t
|
|
|
|
ida_hexrays.op_parent_info_t.__disown__(self)
|
|
|
|
ida_hexrays.op_parent_info_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None)
|
|
|
|
ida_hexrays.op_uses_x(op: "ctype_t") -> bool
|
|
Does operator use the 'x' field of cexpr_t?
|
|
|
|
ida_hexrays.op_uses_y(op: "ctype_t") -> bool
|
|
Does operator use the 'y' field of cexpr_t?
|
|
|
|
ida_hexrays.op_uses_z(op: "ctype_t") -> bool
|
|
Does operator use the 'z' field of cexpr_t?
|
|
|
|
ida_hexrays.open_pseudocode(ea: ida_idaapi.ea_t, flags: int) -> "vdui_t *"
|
|
Open pseudocode window. The specified function is decompiled and the pseudocode window is opened.
|
|
|
|
@param ea: function to decompile
|
|
@param flags: a combination of OPF_ flags
|
|
@returns false if failed
|
|
|
|
ida_hexrays.operand_locator_t
|
|
|
|
ida_hexrays.operand_locator_t.__eq__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.__ge__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.__gt__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.__init__(self, _ea: ida_idaapi.ea_t, _opnum: int)
|
|
|
|
ida_hexrays.operand_locator_t.__le__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.__lt__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.__ne__(self, r: "operand_locator_t") -> bool
|
|
|
|
ida_hexrays.operand_locator_t.compare(self, r: "operand_locator_t") -> int
|
|
|
|
ida_hexrays.operand_locator_t.ea
|
|
address of the original processor instruction
|
|
|
|
ida_hexrays.operand_locator_t.opnum
|
|
operand number in the instruction
|
|
|
|
ida_hexrays.optblock_t
|
|
|
|
ida_hexrays.optblock_t.__disown__(self)
|
|
|
|
ida_hexrays.optblock_t.__init__(self)
|
|
|
|
ida_hexrays.optblock_t.func(self, blk: "mblock_t") -> int
|
|
Optimize a block. This function usually performs the optimizations that require analyzing the entire block and/or its neighbors. For example it can recognize patterns and perform conversions like: b0: b0: ... ... jnz x, 0, @b2 => jnz x, 0, @b2 b1: b1: add x, 0, y mov x, y ... ...
|
|
|
|
@param blk: Basic block to optimize as a whole.
|
|
@returns number of changes made to the block. See also mark_lists_dirty.
|
|
|
|
ida_hexrays.optblock_t.install(self) -> None
|
|
|
|
ida_hexrays.optblock_t.remove(self) -> bool
|
|
|
|
ida_hexrays.optinsn_t
|
|
|
|
ida_hexrays.optinsn_t.__disown__(self)
|
|
|
|
ida_hexrays.optinsn_t.__init__(self)
|
|
|
|
ida_hexrays.optinsn_t.func(self, blk: "mblock_t", ins: "minsn_t", optflags: int) -> int
|
|
Optimize an instruction.
|
|
|
|
@param blk: current basic block. maybe nullptr, which means that the instruction must be optimized without context
|
|
@param ins: instruction to optimize; it is always a top-level instruction. the callback may not delete the instruction but may convert it into nop (see mblock_t::make_nop). to optimize sub-instructions, visit them using minsn_visitor_t. sub-instructions may not be converted into nop but can be converted to "mov x,x". for example: add x,0,x => mov x,x this callback may change other instructions in the block, but should do this with care, e.g. to no break the propagation algorithm if called with OPTI_NO_LDXOPT.
|
|
@param optflags: combination of optimization flags bits
|
|
@returns number of changes made to the instruction. if after this call the instruction's use/def lists have changed, you must mark the block level lists as dirty (see mark_lists_dirty)
|
|
|
|
ida_hexrays.optinsn_t.install(self) -> None
|
|
|
|
ida_hexrays.optinsn_t.remove(self) -> bool
|
|
|
|
ida_hexrays.parse_user_call(udc: "udcall_t", decl: str, silent: bool) -> bool
|
|
Convert function type declaration into internal structure
|
|
|
|
@param udc: - pointer to output structure
|
|
@param decl: - function type declaration
|
|
@param silent: - if TRUE: do not show warning in case of incorrect type
|
|
@returns success
|
|
|
|
ida_hexrays.partial_type_num(type: "tinfo_t") -> int
|
|
Calculate number of partial subtypes.
|
|
|
|
@returns number of partial subtypes. The bigger is this number, the uglier is the type.
|
|
|
|
ida_hexrays.print_vdloc(loc: "vdloc_t", nbytes: int) -> str
|
|
Print vdloc. Since vdloc does not always carry the size info, we pass it as NBYTES..
|
|
|
|
|
|
ida_hexrays.property_op_to_typename(self)
|
|
|
|
ida_hexrays.qstring_printer_t
|
|
|
|
ida_hexrays.qstring_printer_t.__init__(self, f: "cfunc_t", tags: bool)
|
|
|
|
ida_hexrays.qstring_printer_t._print(self, indent: int, format: str) -> int
|
|
|
|
ida_hexrays.qstring_printer_t.get_s(self) -> str
|
|
|
|
ida_hexrays.qstring_printer_t.s
|
|
Reference to the output string
|
|
|
|
|
|
ida_hexrays.qstring_printer_t.s
|
|
Reference to the output string
|
|
|
|
|
|
ida_hexrays.qstring_printer_t.with_tags
|
|
Generate output with color tags.
|
|
|
|
ida_hexrays.qswap(a: "cinsn_t", b: "cinsn_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t
|
|
|
|
ida_hexrays.qvector_carg_t.__eq__(self, r: "qvector_carg_t") -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.__getitem__(self, i: "size_t") -> "carg_t const &"
|
|
|
|
ida_hexrays.qvector_carg_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_carg_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_carg_t.__ne__(self, r: "qvector_carg_t") -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.__setitem__(self, i: "size_t", v: "carg_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t._del(self, x: "carg_t") -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.add_unique(self, x: "carg_t") -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.append(self, x: "carg_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t.at(self, _idx: "size_t") -> "carg_t const &"
|
|
|
|
ida_hexrays.qvector_carg_t.begin(self, *args) -> "qvector< carg_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_carg_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_carg_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_carg_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.end(self, *args) -> "qvector< carg_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_carg_t.erase(self, *args) -> "qvector< carg_t >::iterator"
|
|
|
|
ida_hexrays.qvector_carg_t.extend(self, x: "qvector_carg_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t.extract(self) -> "carg_t *"
|
|
|
|
ida_hexrays.qvector_carg_t.find(self, *args) -> "qvector< carg_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_carg_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_carg_t.has(self, x: "carg_t") -> bool
|
|
|
|
ida_hexrays.qvector_carg_t.inject(self, s: "carg_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t.insert(self, it: "carg_t", x: "carg_t") -> "qvector< carg_t >::iterator"
|
|
|
|
ida_hexrays.qvector_carg_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_carg_t.push_back(self, *args) -> "carg_t &"
|
|
|
|
ida_hexrays.qvector_carg_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_carg_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_carg_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_carg_t.swap(self, r: "qvector_carg_t") -> None
|
|
|
|
ida_hexrays.qvector_carg_t.truncate(self) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__eq__(self, r: "qvector_catchexprs_t") -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__getitem__(self, i: "size_t") -> "catchexpr_t const &"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__ne__(self, r: "qvector_catchexprs_t") -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.__setitem__(self, i: "size_t", v: "catchexpr_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t._del(self, x: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.add_unique(self, x: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.append(self, x: "catchexpr_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.at(self, _idx: "size_t") -> "catchexpr_t const &"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.begin(self, *args) -> "qvector< catchexpr_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.end(self, *args) -> "qvector< catchexpr_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.erase(self, *args) -> "qvector< catchexpr_t >::iterator"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.extend(self, x: "qvector_catchexprs_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.extract(self) -> "catchexpr_t *"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.find(self, *args) -> "qvector< catchexpr_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.has(self, x: "catchexpr_t") -> bool
|
|
|
|
ida_hexrays.qvector_catchexprs_t.inject(self, s: "catchexpr_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.insert(self, it: "catchexpr_t", x: "catchexpr_t") -> "qvector< catchexpr_t >::iterator"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.push_back(self, *args) -> "catchexpr_t &"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_catchexprs_t.swap(self, r: "qvector_catchexprs_t") -> None
|
|
|
|
ida_hexrays.qvector_catchexprs_t.truncate(self) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t
|
|
|
|
ida_hexrays.qvector_ccase_t.__eq__(self, r: "qvector_ccase_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.__getitem__(self, i: "size_t") -> "ccase_t const &"
|
|
|
|
ida_hexrays.qvector_ccase_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_ccase_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccase_t.__ne__(self, r: "qvector_ccase_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.__setitem__(self, i: "size_t", v: "ccase_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t._del(self, x: "ccase_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.add_unique(self, x: "ccase_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.append(self, x: "ccase_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.at(self, _idx: "size_t") -> "ccase_t const &"
|
|
|
|
ida_hexrays.qvector_ccase_t.begin(self, *args) -> "qvector< ccase_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccase_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccase_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.end(self, *args) -> "qvector< ccase_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccase_t.erase(self, *args) -> "qvector< ccase_t >::iterator"
|
|
|
|
ida_hexrays.qvector_ccase_t.extend(self, x: "qvector_ccase_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.extract(self) -> "ccase_t *"
|
|
|
|
ida_hexrays.qvector_ccase_t.find(self, *args) -> "qvector< ccase_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccase_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.has(self, x: "ccase_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccase_t.inject(self, s: "ccase_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.insert(self, it: "ccase_t", x: "ccase_t") -> "qvector< ccase_t >::iterator"
|
|
|
|
ida_hexrays.qvector_ccase_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.push_back(self, *args) -> "ccase_t &"
|
|
|
|
ida_hexrays.qvector_ccase_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccase_t.swap(self, r: "qvector_ccase_t") -> None
|
|
|
|
ida_hexrays.qvector_ccase_t.truncate(self) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__eq__(self, r: "qvector_ccatchvec_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__getitem__(self, i: "size_t") -> "ccatch_t const &"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__ne__(self, r: "qvector_ccatchvec_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.__setitem__(self, i: "size_t", v: "ccatch_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t._del(self, x: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.add_unique(self, x: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.append(self, x: "ccatch_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.at(self, _idx: "size_t") -> "ccatch_t const &"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.begin(self, *args) -> "qvector< ccatch_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.end(self, *args) -> "qvector< ccatch_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.erase(self, *args) -> "qvector< ccatch_t >::iterator"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.extend(self, x: "qvector_ccatchvec_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.extract(self) -> "ccatch_t *"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.find(self, *args) -> "qvector< ccatch_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.has(self, x: "ccatch_t") -> bool
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.inject(self, s: "ccatch_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.insert(self, it: "ccatch_t", x: "ccatch_t") -> "qvector< ccatch_t >::iterator"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.push_back(self, *args) -> "ccatch_t &"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.swap(self, r: "qvector_ccatchvec_t") -> None
|
|
|
|
ida_hexrays.qvector_ccatchvec_t.truncate(self) -> None
|
|
|
|
ida_hexrays.qvector_history_t
|
|
|
|
ida_hexrays.qvector_history_t.__eq__(self, r: "qvector_history_t") -> bool
|
|
|
|
ida_hexrays.qvector_history_t.__getitem__(self, i: "size_t") -> "history_item_t const &"
|
|
|
|
ida_hexrays.qvector_history_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_history_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_history_t.__ne__(self, r: "qvector_history_t") -> bool
|
|
|
|
ida_hexrays.qvector_history_t.__setitem__(self, i: "size_t", v: "history_item_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t._del(self, x: "history_item_t") -> bool
|
|
|
|
ida_hexrays.qvector_history_t.add_unique(self, x: "history_item_t") -> bool
|
|
|
|
ida_hexrays.qvector_history_t.append(self, x: "history_item_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t.at(self, _idx: "size_t") -> "history_item_t const &"
|
|
|
|
ida_hexrays.qvector_history_t.begin(self, *args) -> "qvector< history_item_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_history_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_history_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_history_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_history_t.end(self, *args) -> "qvector< history_item_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_history_t.erase(self, *args) -> "qvector< history_item_t >::iterator"
|
|
|
|
ida_hexrays.qvector_history_t.extend(self, x: "qvector_history_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t.extract(self) -> "history_item_t *"
|
|
|
|
ida_hexrays.qvector_history_t.find(self, *args) -> "qvector< history_item_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_history_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_history_t.has(self, x: "history_item_t") -> bool
|
|
|
|
ida_hexrays.qvector_history_t.inject(self, s: "history_item_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t.insert(self, it: "history_item_t", x: "history_item_t") -> "qvector< history_item_t >::iterator"
|
|
|
|
ida_hexrays.qvector_history_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_history_t.push_back(self, *args) -> "history_item_t &"
|
|
|
|
ida_hexrays.qvector_history_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_history_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_history_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_history_t.swap(self, r: "qvector_history_t") -> None
|
|
|
|
ida_hexrays.qvector_history_t.truncate(self) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t
|
|
|
|
ida_hexrays.qvector_lvar_t.__eq__(self, r: "qvector_lvar_t") -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.__getitem__(self, i: "size_t") -> "lvar_t const &"
|
|
|
|
ida_hexrays.qvector_lvar_t.__init__(self, *args)
|
|
|
|
ida_hexrays.qvector_lvar_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_lvar_t.__ne__(self, r: "qvector_lvar_t") -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.__setitem__(self, i: "size_t", v: "lvar_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t._del(self, x: "lvar_t") -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.add_unique(self, x: "lvar_t") -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.append(self, x: "lvar_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.at(self, _idx: "size_t") -> "lvar_t const &"
|
|
|
|
ida_hexrays.qvector_lvar_t.begin(self, *args) -> "qvector< lvar_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_lvar_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_lvar_t.clear(self) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.empty(self) -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.end(self, *args) -> "qvector< lvar_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_lvar_t.erase(self, *args) -> "qvector< lvar_t >::iterator"
|
|
|
|
ida_hexrays.qvector_lvar_t.extend(self, x: "qvector_lvar_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.extract(self) -> "lvar_t *"
|
|
|
|
ida_hexrays.qvector_lvar_t.find(self, *args) -> "qvector< lvar_t >::const_iterator"
|
|
|
|
ida_hexrays.qvector_lvar_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.has(self, x: "lvar_t") -> bool
|
|
|
|
ida_hexrays.qvector_lvar_t.inject(self, s: "lvar_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.insert(self, it: "lvar_t", x: "lvar_t") -> "qvector< lvar_t >::iterator"
|
|
|
|
ida_hexrays.qvector_lvar_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.push_back(self, *args) -> "lvar_t &"
|
|
|
|
ida_hexrays.qvector_lvar_t.qclear(self) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.qvector_lvar_t.swap(self, r: "qvector_lvar_t") -> None
|
|
|
|
ida_hexrays.qvector_lvar_t.truncate(self) -> None
|
|
|
|
ida_hexrays.reg2mreg(reg: int) -> "mreg_t"
|
|
Map a processor register to a microregister.
|
|
|
|
@param reg: processor register number
|
|
@returns microregister register id or mr_none
|
|
|
|
ida_hexrays.remitem(e: "citem_t") -> None
|
|
|
|
ida_hexrays.remove_hexrays_callback(callback)
|
|
Uninstall handler for decompiler events.
|
|
|
|
@param callback: handler to uninstall
|
|
@returns number of uninstalled handlers.
|
|
|
|
ida_hexrays.rename_lvar(func_ea: ida_idaapi.ea_t, oldname: str, newname: str) -> bool
|
|
Rename a local variable.
|
|
|
|
@param func_ea: function start address
|
|
@param oldname: old name of the variable
|
|
@param newname: new name of the variable
|
|
@returns success This is a convenience function. For bulk renaming consider using modify_user_lvars.
|
|
|
|
ida_hexrays.restore_user_cmts(func_ea: ida_idaapi.ea_t) -> "user_cmts_t *"
|
|
Restore user defined comments from the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@returns collection of user defined comments. The returned object must be deleted by the caller using delete_user_cmts()
|
|
|
|
ida_hexrays.restore_user_defined_calls(udcalls: "udcall_map_t *", func_ea: ida_idaapi.ea_t) -> bool
|
|
Restore user defined function calls from the database.
|
|
|
|
@param udcalls: ptr to output buffer
|
|
@param func_ea: entry address of the function
|
|
@returns success
|
|
|
|
ida_hexrays.restore_user_iflags(func_ea: ida_idaapi.ea_t) -> "user_iflags_t *"
|
|
Restore user defined citem iflags from the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@returns collection of user defined iflags. The returned object must be deleted by the caller using delete_user_iflags()
|
|
|
|
ida_hexrays.restore_user_labels(func_ea: ida_idaapi.ea_t, func: "cfunc_t" = None) -> "user_labels_t *"
|
|
Restore user defined labels from the database.
|
|
|
|
@param func_ea: the entry address of the function, ignored if FUNC != nullptr
|
|
@param func: pointer to current function
|
|
@returns collection of user defined labels. The returned object must be deleted by the caller using delete_user_labels()
|
|
|
|
ida_hexrays.restore_user_lvar_settings(lvinf: "lvar_uservec_t", func_ea: ida_idaapi.ea_t) -> bool
|
|
Restore user defined local variable settings in the database.
|
|
|
|
@param lvinf: ptr to output buffer
|
|
@param func_ea: entry address of the function
|
|
@returns success
|
|
|
|
ida_hexrays.restore_user_numforms(func_ea: ida_idaapi.ea_t) -> "user_numforms_t *"
|
|
Restore user defined number formats from the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@returns collection of user defined number formats. The returned object must be deleted by the caller using delete_user_numforms()
|
|
|
|
ida_hexrays.restore_user_unions(func_ea: ida_idaapi.ea_t) -> "user_unions_t *"
|
|
Restore user defined union field selections from the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@returns collection of union field selections The returned object must be deleted by the caller using delete_user_unions()
|
|
|
|
ida_hexrays.rlist_t
|
|
|
|
ida_hexrays.rlist_t.__init__(self, *args)
|
|
|
|
ida_hexrays.rlist_t.dstr(self) -> str
|
|
|
|
ida_hexrays.save_user_cmts(func_ea: ida_idaapi.ea_t, user_cmts: "user_cmts_t") -> None
|
|
Save user defined comments into the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@param user_cmts: collection of user defined comments
|
|
|
|
ida_hexrays.save_user_defined_calls(func_ea: ida_idaapi.ea_t, udcalls: "udcall_map_t const &") -> None
|
|
Save user defined local function calls into the database.
|
|
|
|
@param func_ea: entry address of the function
|
|
@param udcalls: user-specified info about user defined function calls
|
|
|
|
ida_hexrays.save_user_iflags(func_ea: ida_idaapi.ea_t, iflags: "user_iflags_t") -> None
|
|
Save user defined citem iflags into the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@param iflags: collection of user defined citem iflags
|
|
|
|
ida_hexrays.save_user_labels(func_ea: ida_idaapi.ea_t, user_labels: "user_labels_t", func: "cfunc_t" = None) -> None
|
|
Save user defined labels into the database.
|
|
|
|
@param func_ea: the entry address of the function, ignored if FUNC != nullptr
|
|
@param user_labels: collection of user defined labels
|
|
@param func: pointer to current function, if FUNC != nullptr, then save labels using a more stable method that preserves them even when the decompiler output drastically changes
|
|
|
|
ida_hexrays.save_user_lvar_settings(func_ea: ida_idaapi.ea_t, lvinf: "lvar_uservec_t") -> None
|
|
Save user defined local variable settings into the database.
|
|
|
|
@param func_ea: entry address of the function
|
|
@param lvinf: user-specified info about local variables
|
|
|
|
ida_hexrays.save_user_numforms(func_ea: ida_idaapi.ea_t, numforms: "user_numforms_t") -> None
|
|
Save user defined number formats into the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@param numforms: collection of user defined comments
|
|
|
|
ida_hexrays.save_user_unions(func_ea: ida_idaapi.ea_t, unions: "user_unions_t") -> None
|
|
Save user defined union field selections into the database.
|
|
|
|
@param func_ea: the entry address of the function
|
|
@param unions: collection of union field selections
|
|
|
|
ida_hexrays.scif_t
|
|
|
|
ida_hexrays.scif_t.__init__(self, _mba: "mba_t", tif: "tinfo_t", n: str = None)
|
|
|
|
ida_hexrays.scif_t.mba
|
|
Pointer to the parent mba_t object. Some operations may convert a scattered operand into something simpler, (a stack operand, for example). We will need to create stkvar_ref_t at that moment, this is why we need this pointer. See notes for lvar_ref_t::mba.
|
|
|
|
|
|
ida_hexrays.scif_t.name
|
|
Usually scattered operands are created from a function prototype, which has the name information. We preserve it and use it to name the corresponding local variable.
|
|
|
|
|
|
ida_hexrays.scif_t.type
|
|
Scattered operands always have type info assigned to them because without it we won't be able to manipulte them.
|
|
|
|
|
|
ida_hexrays.scif_visitor_t
|
|
|
|
ida_hexrays.scif_visitor_t.__disown__(self)
|
|
|
|
ida_hexrays.scif_visitor_t.__init__(self)
|
|
|
|
ida_hexrays.scif_visitor_t.visit_scif_mop(self, r: "mop_t", off: int) -> int
|
|
|
|
ida_hexrays.select_udt_by_offset(udts: "qvector< tinfo_t > const *", ops: "ui_stroff_ops_t", applicator: "ui_stroff_applicator_t") -> int
|
|
Select UDT
|
|
|
|
@param udts: list of UDT tinfo_t for the selection, if nullptr or empty then UDTs from the "Local types" will be used
|
|
@param ops: operands
|
|
@param applicator: callback will be called to apply the selection for every operand
|
|
|
|
ida_hexrays.send_database(err: "hexrays_failure_t", silent: bool) -> None
|
|
Send the database to Hex-Rays. This function sends the current database to the Hex-Rays server. The database is sent in the compressed form over an encrypted (SSL) connection.
|
|
|
|
@param err: failure description object. Empty hexrays_failure_t object can be used if error information is not available.
|
|
@param silent: if false, a dialog box will be displayed before sending the database.
|
|
|
|
ida_hexrays.set2jcnd(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.set_type(id: int, tif: "tinfo_t", source: "type_source_t", force: bool = False) -> bool
|
|
Set a global type.
|
|
|
|
@param id: address or id of the object
|
|
@param tif: new type info
|
|
@param source: where the type comes from
|
|
@param force: true means to set the type as is, false means to merge the new type with the possibly existing old type info.
|
|
@returns success
|
|
|
|
ida_hexrays.simple_graph_t
|
|
|
|
ida_hexrays.simple_graph_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.simple_graph_t.begin(self) -> "simple_graph_t::iterator"
|
|
|
|
ida_hexrays.simple_graph_t.compute_dominators(self, domin: "array_of_node_bitset_t", post: bool = False) -> None
|
|
|
|
ida_hexrays.simple_graph_t.compute_immediate_dominators(self, domin: "array_of_node_bitset_t", idomin: "intvec_t", post: bool = False) -> None
|
|
|
|
ida_hexrays.simple_graph_t.depth_first_postorder(self, post: "node_ordering_t") -> int
|
|
|
|
ida_hexrays.simple_graph_t.depth_first_preorder(self, pre: "node_ordering_t") -> int
|
|
|
|
ida_hexrays.simple_graph_t.end(self) -> "simple_graph_t::iterator"
|
|
|
|
ida_hexrays.simple_graph_t.front(self) -> int
|
|
|
|
ida_hexrays.simple_graph_t.goup(self, node: int) -> int
|
|
|
|
ida_hexrays.simple_graph_t.inc(self, p: "simple_graph_t::iterator &", n: int = 1) -> None
|
|
|
|
ida_hexrays.stkvar_ref_t
|
|
|
|
ida_hexrays.stkvar_ref_t.__eq__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.__ge__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.__gt__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.__init__(self, m: "mba_t", o: int)
|
|
|
|
ida_hexrays.stkvar_ref_t.__le__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.__lt__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.__ne__(self, r: "stkvar_ref_t") -> bool
|
|
|
|
ida_hexrays.stkvar_ref_t.compare(self, r: "stkvar_ref_t") -> int
|
|
|
|
ida_hexrays.stkvar_ref_t.get_stkvar(self, udm: "udm_t" = None, p_idaoff: "uval_t *" = None) -> "ssize_t"
|
|
Retrieve the referenced stack variable.
|
|
|
|
@param udm: stkvar, may be nullptr
|
|
@param p_idaoff: if specified, will hold IDA stkoff after the call.
|
|
@returns index of stkvar in the frame or -1
|
|
|
|
ida_hexrays.stkvar_ref_t.mba
|
|
Pointer to the parent mba_t object. We need it in order to retrieve the referenced stack variable. See notes for lvar_ref_t::mba.
|
|
|
|
|
|
ida_hexrays.stkvar_ref_t.off
|
|
Offset to the stack variable from the bottom of the stack frame. It is called 'decompiler stkoff' and it is different from IDA stkoff. See a note and a picture about 'decompiler stkoff' below.
|
|
|
|
|
|
ida_hexrays.stkvar_ref_t.swap(self, r: "stkvar_ref_t") -> None
|
|
|
|
ida_hexrays.swap_mcode_relation(code: "mcode_t") -> "mcode_t"
|
|
|
|
ida_hexrays.swapped_relation(op: "ctype_t") -> "ctype_t"
|
|
Swap a comparison operator. For example, cot_sge becomes cot_sle.
|
|
|
|
ida_hexrays.term_hexrays_plugin() -> None
|
|
Stop working with hex-rays decompiler.
|
|
|
|
ida_hexrays.treeloc_t
|
|
|
|
ida_hexrays.treeloc_t.__eq__(self, r: "treeloc_t") -> bool
|
|
|
|
ida_hexrays.treeloc_t.__init__(self)
|
|
|
|
ida_hexrays.treeloc_t.__lt__(self, r: "treeloc_t") -> bool
|
|
|
|
ida_hexrays.udc_filter_t
|
|
|
|
ida_hexrays.udc_filter_t.__disown__(self)
|
|
|
|
ida_hexrays.udc_filter_t.__init__(self)
|
|
|
|
ida_hexrays.udc_filter_t.apply(self, cdg: "codegen_t") -> "merror_t"
|
|
generate microcode for an instruction
|
|
|
|
@returns MERR_... code: MERR_OK - user-defined microcode generated, go to the next instruction MERR_INSN - not generated - the caller should try the standard way else - error
|
|
|
|
ida_hexrays.udc_filter_t.cleanup(self) -> None
|
|
Cleanup the filter This function properly clears type information associated to this filter.
|
|
|
|
|
|
ida_hexrays.udc_filter_t.empty(self) -> bool
|
|
|
|
ida_hexrays.udc_filter_t.init(self, decl: str) -> bool
|
|
|
|
ida_hexrays.udc_filter_t.install(self) -> None
|
|
|
|
ida_hexrays.udc_filter_t.match(self, cdg: "codegen_t") -> bool
|
|
return true if the filter object should be applied to given instruction
|
|
|
|
ida_hexrays.udc_filter_t.remove(self) -> bool
|
|
|
|
ida_hexrays.udcall_map_begin(map: "udcall_map_t const *") -> "udcall_map_iterator_t"
|
|
Get iterator pointing to the beginning of udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_clear(map: "udcall_map_t *") -> None
|
|
Clear udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_end(map: "udcall_map_t const *") -> "udcall_map_iterator_t"
|
|
Get iterator pointing to the end of udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_erase(map: "udcall_map_t *", p: "udcall_map_iterator_t") -> None
|
|
Erase current element from udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_find(map: "udcall_map_t const *", key: "ea_t const &") -> "udcall_map_iterator_t"
|
|
Find the specified key in udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_first(p: "udcall_map_iterator_t") -> "ea_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.udcall_map_free(map: "udcall_map_t *") -> None
|
|
Delete udcall_map_t instance.
|
|
|
|
ida_hexrays.udcall_map_insert(map: "udcall_map_t *", key: "ea_t const &", val: "udcall_t") -> "udcall_map_iterator_t"
|
|
Insert new (ea_t, udcall_t) pair into udcall_map_t.
|
|
|
|
ida_hexrays.udcall_map_iterator_t
|
|
|
|
ida_hexrays.udcall_map_iterator_t.__eq__(self, p: "udcall_map_iterator_t") -> bool
|
|
|
|
ida_hexrays.udcall_map_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.udcall_map_iterator_t.__ne__(self, p: "udcall_map_iterator_t") -> bool
|
|
|
|
ida_hexrays.udcall_map_new() -> "udcall_map_t *"
|
|
Create a new udcall_map_t instance.
|
|
|
|
ida_hexrays.udcall_map_next(p: "udcall_map_iterator_t") -> "udcall_map_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.udcall_map_prev(p: "udcall_map_iterator_t") -> "udcall_map_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.udcall_map_second(p: "udcall_map_iterator_t") -> "udcall_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.udcall_map_size(map: "udcall_map_t *") -> "size_t"
|
|
Get size of udcall_map_t.
|
|
|
|
ida_hexrays.udcall_t
|
|
|
|
ida_hexrays.udcall_t.__eq__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.__ge__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.__gt__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.__init__(self)
|
|
|
|
ida_hexrays.udcall_t.__le__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.__lt__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.__ne__(self, r: "udcall_t") -> bool
|
|
|
|
ida_hexrays.udcall_t.compare(self, r: "udcall_t") -> int
|
|
|
|
ida_hexrays.udcall_t.empty(self) -> bool
|
|
|
|
ida_hexrays.ui_stroff_applicator_t
|
|
|
|
ida_hexrays.ui_stroff_applicator_t.__disown__(self)
|
|
|
|
ida_hexrays.ui_stroff_applicator_t.__init__(self)
|
|
|
|
ida_hexrays.ui_stroff_applicator_t.apply(self, opnum: "size_t", path: "intvec_t", top_tif: "tinfo_t", spath: str) -> bool
|
|
@param opnum: operand ordinal number, see below
|
|
@param path: path describing the union selection, maybe empty
|
|
@param top_tif: tinfo_t of the selected toplevel UDT
|
|
@param spath: selected path
|
|
|
|
ida_hexrays.ui_stroff_op_t
|
|
|
|
ida_hexrays.ui_stroff_op_t.__eq__(self, r: "ui_stroff_op_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_op_t.__init__(self)
|
|
|
|
ida_hexrays.ui_stroff_op_t.__ne__(self, r: "ui_stroff_op_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_op_t.offset
|
|
operand offset, will be used when calculating the UDT path
|
|
|
|
ida_hexrays.ui_stroff_op_t.text
|
|
any text for the column "Operand" of widget
|
|
|
|
ida_hexrays.ui_stroff_ops_t
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__eq__(self, r: "ui_stroff_ops_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__getitem__(self, i: "size_t") -> "ui_stroff_op_t const &"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__init__(self, *args)
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__len__(self) -> "size_t"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__ne__(self, r: "ui_stroff_ops_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.__setitem__(self, i: "size_t", v: "ui_stroff_op_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t._del(self, x: "ui_stroff_op_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.add_unique(self, x: "ui_stroff_op_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.append(self, x: "ui_stroff_op_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.at(self, _idx: "size_t") -> "ui_stroff_op_t const &"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.begin(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.capacity(self) -> "size_t"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.clear(self) -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.empty(self) -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.end(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.erase(self, *args) -> "qvector< ui_stroff_op_t >::iterator"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.extend(self, x: "ui_stroff_ops_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.extract(self) -> "ui_stroff_op_t *"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.find(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.grow(self, *args) -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.has(self, x: "ui_stroff_op_t") -> bool
|
|
|
|
ida_hexrays.ui_stroff_ops_t.inject(self, s: "ui_stroff_op_t", len: "size_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.insert(self, it: "ui_stroff_op_t", x: "ui_stroff_op_t") -> "qvector< ui_stroff_op_t >::iterator"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.pop_back(self) -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.push_back(self, *args) -> "ui_stroff_op_t &"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.qclear(self) -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.resize(self, *args) -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.ui_stroff_ops_t.swap(self, r: "ui_stroff_ops_t") -> None
|
|
|
|
ida_hexrays.ui_stroff_ops_t.truncate(self) -> None
|
|
|
|
ida_hexrays.user_cmts_begin(map: "user_cmts_t") -> "user_cmts_iterator_t"
|
|
Get iterator pointing to the beginning of user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_clear(map: "user_cmts_t") -> None
|
|
Clear user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_end(map: "user_cmts_t") -> "user_cmts_iterator_t"
|
|
Get iterator pointing to the end of user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_erase(map: "user_cmts_t", p: "user_cmts_iterator_t") -> None
|
|
Erase current element from user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_find(map: "user_cmts_t", key: "treeloc_t") -> "user_cmts_iterator_t"
|
|
Find the specified key in user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_first(p: "user_cmts_iterator_t") -> "treeloc_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.user_cmts_free(map: "user_cmts_t") -> None
|
|
Delete user_cmts_t instance.
|
|
|
|
ida_hexrays.user_cmts_insert(map: "user_cmts_t", key: "treeloc_t", val: "citem_cmt_t") -> "user_cmts_iterator_t"
|
|
Insert new (treeloc_t, citem_cmt_t) pair into user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_iterator_t
|
|
|
|
ida_hexrays.user_cmts_iterator_t.__eq__(self, p: "user_cmts_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_cmts_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.user_cmts_iterator_t.__ne__(self, p: "user_cmts_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_cmts_new() -> "user_cmts_t *"
|
|
Create a new user_cmts_t instance.
|
|
|
|
ida_hexrays.user_cmts_next(p: "user_cmts_iterator_t") -> "user_cmts_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.user_cmts_prev(p: "user_cmts_iterator_t") -> "user_cmts_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.user_cmts_second(p: "user_cmts_iterator_t") -> "citem_cmt_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.user_cmts_size(map: "user_cmts_t") -> "size_t"
|
|
Get size of user_cmts_t.
|
|
|
|
ida_hexrays.user_cmts_t
|
|
|
|
ida_hexrays.user_cmts_t.__init__(self)
|
|
|
|
ida_hexrays.user_cmts_t.at(self, _Keyval: "treeloc_t") -> "citem_cmt_t &"
|
|
|
|
ida_hexrays.user_cmts_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.user_iflags_begin(map: "user_iflags_t") -> "user_iflags_iterator_t"
|
|
Get iterator pointing to the beginning of user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_clear(map: "user_iflags_t") -> None
|
|
Clear user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_end(map: "user_iflags_t") -> "user_iflags_iterator_t"
|
|
Get iterator pointing to the end of user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_erase(map: "user_iflags_t", p: "user_iflags_iterator_t") -> None
|
|
Erase current element from user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_find(map: "user_iflags_t", key: "citem_locator_t") -> "user_iflags_iterator_t"
|
|
Find the specified key in user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_first(p: "user_iflags_iterator_t") -> "citem_locator_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.user_iflags_free(map: "user_iflags_t") -> None
|
|
Delete user_iflags_t instance.
|
|
|
|
ida_hexrays.user_iflags_insert(map: "user_iflags_t", key: "citem_locator_t", val: "int32 const &") -> "user_iflags_iterator_t"
|
|
Insert new (citem_locator_t, int32) pair into user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_iterator_t
|
|
|
|
ida_hexrays.user_iflags_iterator_t.__eq__(self, p: "user_iflags_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_iflags_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.user_iflags_iterator_t.__ne__(self, p: "user_iflags_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_iflags_new() -> "user_iflags_t *"
|
|
Create a new user_iflags_t instance.
|
|
|
|
ida_hexrays.user_iflags_next(p: "user_iflags_iterator_t") -> "user_iflags_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.user_iflags_prev(p: "user_iflags_iterator_t") -> "user_iflags_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.user_iflags_second(p: "user_iflags_iterator_t") -> "int32 const &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.user_iflags_size(map: "user_iflags_t") -> "size_t"
|
|
Get size of user_iflags_t.
|
|
|
|
ida_hexrays.user_iflags_t
|
|
|
|
ida_hexrays.user_iflags_t.__init__(self)
|
|
|
|
ida_hexrays.user_iflags_t.at(self, _Keyval: "citem_locator_t") -> "int &"
|
|
|
|
ida_hexrays.user_iflags_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.user_labels_begin(map: "user_labels_t") -> "user_labels_iterator_t"
|
|
Get iterator pointing to the beginning of user_labels_t.
|
|
|
|
ida_hexrays.user_labels_clear(map: "user_labels_t") -> None
|
|
Clear user_labels_t.
|
|
|
|
ida_hexrays.user_labels_end(map: "user_labels_t") -> "user_labels_iterator_t"
|
|
Get iterator pointing to the end of user_labels_t.
|
|
|
|
ida_hexrays.user_labels_erase(map: "user_labels_t", p: "user_labels_iterator_t") -> None
|
|
Erase current element from user_labels_t.
|
|
|
|
ida_hexrays.user_labels_find(map: "user_labels_t", key: "int const &") -> "user_labels_iterator_t"
|
|
Find the specified key in user_labels_t.
|
|
|
|
ida_hexrays.user_labels_first(p: "user_labels_iterator_t") -> "int const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.user_labels_free(map: "user_labels_t") -> None
|
|
Delete user_labels_t instance.
|
|
|
|
ida_hexrays.user_labels_insert(map: "user_labels_t", key: "int const &", val: str) -> "user_labels_iterator_t"
|
|
Insert new (int, qstring) pair into user_labels_t.
|
|
|
|
ida_hexrays.user_labels_iterator_t
|
|
|
|
ida_hexrays.user_labels_iterator_t.__eq__(self, p: "user_labels_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_labels_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.user_labels_iterator_t.__ne__(self, p: "user_labels_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_labels_new() -> "user_labels_t *"
|
|
Create a new user_labels_t instance.
|
|
|
|
ida_hexrays.user_labels_next(p: "user_labels_iterator_t") -> "user_labels_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.user_labels_prev(p: "user_labels_iterator_t") -> "user_labels_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.user_labels_second(p: "user_labels_iterator_t") -> str
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.user_labels_size(map: "user_labels_t") -> "size_t"
|
|
Get size of user_labels_t.
|
|
|
|
ida_hexrays.user_labels_t
|
|
|
|
ida_hexrays.user_labels_t.__init__(self)
|
|
|
|
ida_hexrays.user_labels_t.at(self, _Keyval: "int const &") -> "_qstring< char > &"
|
|
|
|
ida_hexrays.user_labels_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.user_lvar_modifier_t
|
|
|
|
ida_hexrays.user_lvar_modifier_t.__disown__(self)
|
|
|
|
ida_hexrays.user_lvar_modifier_t.__init__(self)
|
|
|
|
ida_hexrays.user_lvar_modifier_t.modify_lvars(self, lvinf: "lvar_uservec_t") -> bool
|
|
Modify lvar settings. Returns: true-modified
|
|
|
|
|
|
ida_hexrays.user_numforms_begin(map: "user_numforms_t") -> "user_numforms_iterator_t"
|
|
Get iterator pointing to the beginning of user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_clear(map: "user_numforms_t") -> None
|
|
Clear user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_end(map: "user_numforms_t") -> "user_numforms_iterator_t"
|
|
Get iterator pointing to the end of user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_erase(map: "user_numforms_t", p: "user_numforms_iterator_t") -> None
|
|
Erase current element from user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_find(map: "user_numforms_t", key: "operand_locator_t") -> "user_numforms_iterator_t"
|
|
Find the specified key in user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_first(p: "user_numforms_iterator_t") -> "operand_locator_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.user_numforms_free(map: "user_numforms_t") -> None
|
|
Delete user_numforms_t instance.
|
|
|
|
ida_hexrays.user_numforms_insert(map: "user_numforms_t", key: "operand_locator_t", val: "number_format_t") -> "user_numforms_iterator_t"
|
|
Insert new (operand_locator_t, number_format_t) pair into user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_iterator_t
|
|
|
|
ida_hexrays.user_numforms_iterator_t.__eq__(self, p: "user_numforms_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_numforms_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.user_numforms_iterator_t.__ne__(self, p: "user_numforms_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_numforms_new() -> "user_numforms_t *"
|
|
Create a new user_numforms_t instance.
|
|
|
|
ida_hexrays.user_numforms_next(p: "user_numforms_iterator_t") -> "user_numforms_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.user_numforms_prev(p: "user_numforms_iterator_t") -> "user_numforms_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.user_numforms_second(p: "user_numforms_iterator_t") -> "number_format_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.user_numforms_size(map: "user_numforms_t") -> "size_t"
|
|
Get size of user_numforms_t.
|
|
|
|
ida_hexrays.user_numforms_t
|
|
|
|
ida_hexrays.user_numforms_t.__init__(self)
|
|
|
|
ida_hexrays.user_numforms_t.at(self, _Keyval: "operand_locator_t") -> "number_format_t &"
|
|
|
|
ida_hexrays.user_numforms_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.user_unions_begin(map: "user_unions_t") -> "user_unions_iterator_t"
|
|
Get iterator pointing to the beginning of user_unions_t.
|
|
|
|
ida_hexrays.user_unions_clear(map: "user_unions_t") -> None
|
|
Clear user_unions_t.
|
|
|
|
ida_hexrays.user_unions_end(map: "user_unions_t") -> "user_unions_iterator_t"
|
|
Get iterator pointing to the end of user_unions_t.
|
|
|
|
ida_hexrays.user_unions_erase(map: "user_unions_t", p: "user_unions_iterator_t") -> None
|
|
Erase current element from user_unions_t.
|
|
|
|
ida_hexrays.user_unions_find(map: "user_unions_t", key: "ea_t const &") -> "user_unions_iterator_t"
|
|
Find the specified key in user_unions_t.
|
|
|
|
ida_hexrays.user_unions_first(p: "user_unions_iterator_t") -> "ea_t const &"
|
|
Get reference to the current map key.
|
|
|
|
ida_hexrays.user_unions_free(map: "user_unions_t") -> None
|
|
Delete user_unions_t instance.
|
|
|
|
ida_hexrays.user_unions_insert(map: "user_unions_t", key: "ea_t const &", val: "intvec_t") -> "user_unions_iterator_t"
|
|
Insert new (ea_t, intvec_t) pair into user_unions_t.
|
|
|
|
ida_hexrays.user_unions_iterator_t
|
|
|
|
ida_hexrays.user_unions_iterator_t.__eq__(self, p: "user_unions_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_unions_iterator_t.__init__(self)
|
|
|
|
ida_hexrays.user_unions_iterator_t.__ne__(self, p: "user_unions_iterator_t") -> bool
|
|
|
|
ida_hexrays.user_unions_new() -> "user_unions_t *"
|
|
Create a new user_unions_t instance.
|
|
|
|
ida_hexrays.user_unions_next(p: "user_unions_iterator_t") -> "user_unions_iterator_t"
|
|
Move to the next element.
|
|
|
|
ida_hexrays.user_unions_prev(p: "user_unions_iterator_t") -> "user_unions_iterator_t"
|
|
Move to the previous element.
|
|
|
|
ida_hexrays.user_unions_second(p: "user_unions_iterator_t") -> "intvec_t &"
|
|
Get reference to the current map value.
|
|
|
|
ida_hexrays.user_unions_size(map: "user_unions_t") -> "size_t"
|
|
Get size of user_unions_t.
|
|
|
|
ida_hexrays.user_unions_t
|
|
|
|
ida_hexrays.user_unions_t.__init__(self)
|
|
|
|
ida_hexrays.user_unions_t.at(self, _Keyval: "unsigned long long const &") -> "qvector< int > &"
|
|
|
|
ida_hexrays.user_unions_t.size(self) -> "size_t"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.__eq__(self, v: "ivl_t") -> bool
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.__init__(self, *args)
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.__ne__(self, v: "ivl_t") -> bool
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.all_values(self) -> bool
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.begin(self, *args) -> "ivlset_tpl< ivl_t,unsigned long long >::iterator"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.clear(self) -> None
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.empty(self) -> bool
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.end(self, *args) -> "ivlset_tpl< ivl_t,unsigned long long >::iterator"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.getivl(self, idx: int) -> "ivl_t const &"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.lastivl(self) -> "ivl_t const &"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.nivls(self) -> "size_t"
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.qclear(self) -> None
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.set_all_values(self) -> None
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.single_value(self, *args) -> bool
|
|
|
|
ida_hexrays.uval_ivl_ivlset_t.swap(self, r: "uval_ivl_ivlset_t") -> None
|
|
|
|
ida_hexrays.uval_ivl_t
|
|
|
|
ida_hexrays.uval_ivl_t.__init__(self, _off: "unsigned long long", _size: "unsigned long long")
|
|
|
|
ida_hexrays.uval_ivl_t.end(self) -> "unsigned long long"
|
|
|
|
ida_hexrays.uval_ivl_t.last(self) -> "unsigned long long"
|
|
|
|
ida_hexrays.uval_ivl_t.valid(self) -> bool
|
|
|
|
ida_hexrays.valrng_t
|
|
|
|
ida_hexrays.valrng_t.__eq__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.__ge__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.__gt__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.__init__(self, *args)
|
|
|
|
ida_hexrays.valrng_t.__le__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.__lt__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.__ne__(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t._deregister(self) -> None
|
|
|
|
ida_hexrays.valrng_t._print(self) -> None
|
|
|
|
ida_hexrays.valrng_t._register(self) -> None
|
|
|
|
ida_hexrays.valrng_t.all_values(self) -> bool
|
|
|
|
ida_hexrays.valrng_t.compare(self, r: "valrng_t") -> int
|
|
|
|
ida_hexrays.valrng_t.cvt_to_cmp(self) -> bool
|
|
|
|
ida_hexrays.valrng_t.cvt_to_single_value(self) -> bool
|
|
|
|
ida_hexrays.valrng_t.dstr(self) -> str
|
|
|
|
ida_hexrays.valrng_t.empty(self) -> bool
|
|
|
|
ida_hexrays.valrng_t.get_size(self) -> int
|
|
|
|
ida_hexrays.valrng_t.has(self, v: "uvlr_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.intersect_with(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.valrng_t.inverse(self) -> None
|
|
|
|
ida_hexrays.valrng_t.is_unknown(self) -> bool
|
|
|
|
ida_hexrays.valrng_t.max_svalue(self) -> "uvlr_t"
|
|
|
|
ida_hexrays.valrng_t.max_value(self) -> "uvlr_t"
|
|
|
|
ida_hexrays.valrng_t.min_svalue(self) -> "uvlr_t"
|
|
|
|
ida_hexrays.valrng_t.reduce_size(self, new_size: int) -> bool
|
|
|
|
ida_hexrays.valrng_t.set_all(self) -> None
|
|
|
|
ida_hexrays.valrng_t.set_cmp(self, cmp: "cmpop_t", _value: "uvlr_t") -> None
|
|
|
|
ida_hexrays.valrng_t.set_eq(self, v: "uvlr_t") -> None
|
|
|
|
ida_hexrays.valrng_t.set_none(self) -> None
|
|
|
|
ida_hexrays.valrng_t.set_unk(self) -> None
|
|
|
|
ida_hexrays.valrng_t.swap(self, r: "valrng_t") -> None
|
|
|
|
ida_hexrays.valrng_t.unite_with(self, r: "valrng_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t
|
|
|
|
ida_hexrays.var_ref_t.__eq__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.__ge__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.__gt__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.__init__(self)
|
|
|
|
ida_hexrays.var_ref_t.__le__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.__lt__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.__ne__(self, r: "var_ref_t") -> bool
|
|
|
|
ida_hexrays.var_ref_t.compare(self, r: "var_ref_t") -> int
|
|
|
|
ida_hexrays.var_ref_t.getv(self) -> "lvar_t &"
|
|
|
|
ida_hexrays.var_ref_t.idx
|
|
index into lvars_t
|
|
|
|
ida_hexrays.var_ref_t.mba
|
|
pointer to the underlying micro array
|
|
|
|
ida_hexrays.vc_printer_t
|
|
|
|
ida_hexrays.vc_printer_t.__disown__(self)
|
|
|
|
ida_hexrays.vc_printer_t.__init__(self, f: "cfunc_t")
|
|
|
|
ida_hexrays.vc_printer_t.func
|
|
cfunc_t to generate text for
|
|
|
|
ida_hexrays.vc_printer_t.lastchar
|
|
internal: last printed character
|
|
|
|
|
|
ida_hexrays.vc_printer_t.oneliner(self) -> bool
|
|
Are we generating one-line text representation?
|
|
|
|
@returns `true` if the output will occupy one line without line breaks
|
|
|
|
ida_hexrays.vd_failure_t
|
|
|
|
ida_hexrays.vd_failure_t.__init__(self, *args)
|
|
|
|
ida_hexrays.vd_failure_t.desc(self) -> str
|
|
|
|
ida_hexrays.vd_interr_t
|
|
|
|
ida_hexrays.vd_interr_t.__init__(self, ea: ida_idaapi.ea_t, buf: str)
|
|
|
|
ida_hexrays.vd_printer_t
|
|
|
|
ida_hexrays.vd_printer_t.__disown__(self)
|
|
|
|
ida_hexrays.vd_printer_t.__init__(self)
|
|
|
|
ida_hexrays.vd_printer_t._print(self, indent: int, format: str) -> int
|
|
|
|
ida_hexrays.vd_printer_t.hdrlines
|
|
number of header lines (prototype+typedef+lvars) valid at the end of print process
|
|
|
|
|
|
ida_hexrays.vdloc_t
|
|
|
|
ida_hexrays.vdloc_t.__eq__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t.__ge__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t.__gt__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t.__init__(self)
|
|
|
|
ida_hexrays.vdloc_t.__le__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t.__lt__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t.__ne__(self, r: "vdloc_t") -> bool
|
|
|
|
ida_hexrays.vdloc_t._set_reg1(self, r1: int) -> None
|
|
|
|
ida_hexrays.vdloc_t.compare(self, r: "vdloc_t") -> int
|
|
|
|
ida_hexrays.vdloc_t.is_aliasable(self, mb: "mba_t", size: int) -> bool
|
|
|
|
ida_hexrays.vdloc_t.reg1(self) -> int
|
|
|
|
ida_hexrays.vdloc_t.set_reg1(self, r1: int) -> None
|
|
|
|
ida_hexrays.vdui_t
|
|
|
|
ida_hexrays.vdui_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_hexrays.vdui_t.calc_cmt_type(self, lnnum: "size_t", cmttype: "cmt_type_t") -> "cmt_type_t"
|
|
Check if the specified line can have a comment. Due to the coordinate system for comments: ([https://www.hex-rays.com/blog/coordinate-system-for-hex-rays](https://www.hex-rays.com/blog/coordinate-system-for-hex-rays)) some function lines cannot have comments. This function checks if a comment can be attached to the specified line.
|
|
|
|
@param lnnum: line number (0 based)
|
|
@param cmttype: comment types to check
|
|
@returns possible comment types
|
|
|
|
ida_hexrays.vdui_t.cfunc
|
|
pointer to function object
|
|
|
|
ida_hexrays.vdui_t.clear(self) -> None
|
|
Clear the pseudocode window. It deletes the current function and microcode.
|
|
|
|
|
|
ida_hexrays.vdui_t.collapse_item(self, hide: bool) -> bool
|
|
Collapse/uncollapse item. This function collapses the current item.
|
|
|
|
@returns false if failed.
|
|
|
|
ida_hexrays.vdui_t.collapse_lvars(self, hide: bool) -> bool
|
|
Collapse/uncollapse local variable declarations.
|
|
|
|
@returns false if failed.
|
|
|
|
ida_hexrays.vdui_t.cpos
|
|
Current ctext position.
|
|
|
|
ida_hexrays.vdui_t.ct
|
|
pseudocode view
|
|
|
|
ida_hexrays.vdui_t.ctree_to_disasm(self) -> bool
|
|
Jump to disassembly. This function jumps to the address in the disassembly window which corresponds to the current item. The current item is determined based on the current keyboard cursor position.
|
|
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.del_orphan_cmts(self) -> bool
|
|
Delete all orphan comments. Delete all orphan comments and refresh the screen.
|
|
|
|
@returns true
|
|
|
|
ida_hexrays.vdui_t.edit_cmt(self, loc: "treeloc_t") -> bool
|
|
Edit an indented comment. This function displays a dialog box and allows the user to edit the comment for the specified ctree location.
|
|
|
|
@param loc: comment location
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.edit_func_cmt(self) -> bool
|
|
Edit a function comment. This function displays a dialog box and allows the user to edit the function comment.
|
|
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.flags
|
|
Properties of pseudocode window
|
|
|
|
|
|
ida_hexrays.vdui_t.get_current_item(self, idv: "input_device_t") -> bool
|
|
Get current item. This function refreshes the cpos, item, tail fields.
|
|
|
|
@param idv: keyboard or mouse
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.get_current_label(self) -> int
|
|
Get current label. If there is a label under the cursor, return its number.
|
|
|
|
@returns -1 if there is no label under the cursor. prereq: get_current_item() has been called
|
|
|
|
ida_hexrays.vdui_t.get_number(self) -> "cnumber_t *"
|
|
Get current number. If the current item is a number, return pointer to it.
|
|
|
|
@returns nullptr if the current item is not a number This function returns non-null for the cases of a 'switch' statement Also, if the current item is a casted number, then this function will succeed.
|
|
|
|
ida_hexrays.vdui_t.head
|
|
First ctree item on the current line (for block comments)
|
|
|
|
ida_hexrays.vdui_t.in_ctree(self) -> bool
|
|
Is the current item a statement?
|
|
|
|
@returns false if the cursor is in the local variable/type declaration area
|
|
true if the cursor is in the statement area
|
|
|
|
ida_hexrays.vdui_t.invert_bits(self) -> bool
|
|
Bitwise negate a number. This function inverts all bits of the current number.
|
|
|
|
@returns false if failed.
|
|
|
|
ida_hexrays.vdui_t.invert_sign(self) -> bool
|
|
Negate a number. This function negates the current number.
|
|
|
|
@returns false if failed.
|
|
|
|
ida_hexrays.vdui_t.item
|
|
Current ctree item.
|
|
|
|
ida_hexrays.vdui_t.jump_enter(self, idv: "input_device_t", omflags: int) -> bool
|
|
Process the Enter key. This function jumps to the definition of the item under the cursor. If the current item is a function, it will be decompiled. If the current item is a global data, its disassemly text will be displayed.
|
|
|
|
@param idv: what cursor must be used, the keyboard or the mouse
|
|
@param omflags: OM_NEWWIN: new pseudocode window will open, 0: reuse the existing window
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.last_code
|
|
result of the last user action. See Microcode error codes
|
|
|
|
ida_hexrays.vdui_t.locked(self) -> bool
|
|
Does the pseudocode window contain valid code? We lock windows before modifying them, to avoid recursion due to the events generated by the IDA kernel.
|
|
|
|
@retval true: The window is locked and may have stale info
|
|
|
|
ida_hexrays.vdui_t.map_lvar(self, frm: "lvar_t", to: "lvar_t") -> bool
|
|
Map a local variable to another. This function permanently maps one lvar to another. All occurrences of the mapped variable are replaced by the new variable
|
|
|
|
@param to: the variable to map to. if nullptr, unmaps the variable
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.mba
|
|
pointer to underlying microcode
|
|
|
|
ida_hexrays.vdui_t.refresh_cpos(self, idv: "input_device_t") -> bool
|
|
Refresh the current position. This function refreshes the cpos field.
|
|
|
|
@param idv: keyboard or mouse
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.refresh_ctext(self, activate: bool = True) -> None
|
|
Refresh pseudocode window. This function refreshes the pseudocode window by regenerating its text from cfunc_t. Instead of this function use refresh_func_ctext(), which refreshes all pseudocode windows for the function.
|
|
|
|
|
|
ida_hexrays.vdui_t.refresh_view(self, redo_mba: bool) -> None
|
|
Refresh pseudocode window. This is the highest level refresh function. It causes the most profound refresh possible and can lead to redecompilation of the current function. Please consider using refresh_ctext() if you need a more superficial refresh.
|
|
|
|
@param redo_mba: true means to redecompile the current function
|
|
false means to rebuild ctree without regenerating microcode
|
|
|
|
ida_hexrays.vdui_t.rename_global(self, ea: ida_idaapi.ea_t) -> bool
|
|
Rename global item. This function displays a dialog box and allows the user to rename a global item (data or function).
|
|
|
|
@param ea: address of the global item
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.rename_label(self, label: int) -> bool
|
|
Rename a label. This function displays a dialog box and allows the user to rename a statement label.
|
|
|
|
@param label: label number
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.rename_lvar(self, v: "lvar_t", name: str, is_user_name: bool) -> bool
|
|
Rename local variable. This function permanently renames a local variable.
|
|
|
|
@param v: pointer to local variable
|
|
@param name: new variable name
|
|
@param is_user_name: use true to save the new name into the database. use false to delete the saved name.
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.rename_udm(self, udt_type: "tinfo_t", udm_idx: int) -> bool
|
|
Rename structure field. This function displays a dialog box and allows the user to rename a structure field.
|
|
|
|
@param udt_type: structure/union type
|
|
@param udm_idx: index of the structure/union member
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.set_global_type(self, ea: ida_idaapi.ea_t) -> bool
|
|
Set global item type. This function displays a dialog box and allows the user to change the type of a global item (data or function).
|
|
|
|
@param ea: address of the global item
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.set_locked(self, v: bool) -> bool
|
|
|
|
ida_hexrays.vdui_t.set_lvar_cmt(self, v: "lvar_t", cmt: str) -> bool
|
|
Set local variable comment. This function permanently sets a variable comment.
|
|
|
|
@param v: pointer to local variable
|
|
@param cmt: new comment
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.set_lvar_type(self, v: "lvar_t", type: "tinfo_t") -> bool
|
|
Set local variable type. This function permanently sets a local variable type and clears NOPTR flag if it was set before by function 'set_noptr_lvar'
|
|
|
|
@param v: pointer to local variable
|
|
@param type: new variable type
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.set_noptr_lvar(self, v: "lvar_t") -> bool
|
|
Inform that local variable should have a non-pointer type This function permanently sets a corresponding variable flag (NOPTR) and removes type if it was set before by function 'set_lvar_type'
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.set_num_enum(self) -> bool
|
|
Convert number to symbolic constant. This function displays a dialog box and allows the user to select a symbolic constant to represent the number.
|
|
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.set_num_radix(self, base: int) -> bool
|
|
Change number base. This function changes the current number representation.
|
|
|
|
@param base: number radix (10 or 16)
|
|
0 means a character constant
|
|
@returns false if failed
|
|
|
|
ida_hexrays.vdui_t.set_num_stroff(self) -> bool
|
|
Convert number to structure field offset. Currently not implemented.
|
|
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.set_udm_type(self, udt_type: "tinfo_t", udm_idx: int) -> bool
|
|
Set structure field type. This function displays a dialog box and allows the user to change the type of a structure field.
|
|
|
|
@param udt_type: structure/union type
|
|
@param udm_idx: index of the structure/union member
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.set_valid(self, v: bool) -> None
|
|
|
|
ida_hexrays.vdui_t.set_visible(self, v: bool) -> None
|
|
|
|
ida_hexrays.vdui_t.split_item(self, split: bool) -> bool
|
|
Split/unsplit item. This function splits the current assignment expression.
|
|
|
|
@returns false if failed.
|
|
|
|
ida_hexrays.vdui_t.switch_to(self, f: "cfuncptr_t", activate: bool) -> None
|
|
Display the specified pseudocode. This function replaces the pseudocode window contents with the specified cfunc_t.
|
|
|
|
@param f: pointer to the function to display.
|
|
@param activate: should the pseudocode window get focus?
|
|
|
|
ida_hexrays.vdui_t.tail
|
|
Tail ctree item on the current line (for indented comments)
|
|
|
|
ida_hexrays.vdui_t.ui_edit_lvar_cmt(self, v: "lvar_t") -> bool
|
|
Set local variable comment. This function displays a dialog box and allows the user to edit the comment of a local variable.
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.ui_map_lvar(self, v: "lvar_t") -> bool
|
|
Map a local variable to another. This function displays a variable list and allows the user to select mapping.
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.ui_rename_lvar(self, v: "lvar_t") -> bool
|
|
Rename local variable. This function displays a dialog box and allows the user to rename a local variable.
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.ui_set_call_type(self, e: "cexpr_t") -> bool
|
|
Set type of a function call This function displays a dialog box and allows the user to change the type of a function call
|
|
|
|
@param e: pointer to call expression
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.ui_set_lvar_type(self, v: "lvar_t") -> bool
|
|
Set local variable type. This function displays a dialog box and allows the user to change the type of a local variable.
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.ui_unmap_lvar(self, v: "lvar_t") -> bool
|
|
Unmap a local variable. This function displays list of variables mapped to the specified variable and allows the user to select a variable to unmap.
|
|
|
|
@param v: pointer to local variable
|
|
@returns false if failed or cancelled
|
|
|
|
ida_hexrays.vdui_t.valid(self) -> bool
|
|
Does the pseudocode window contain valid code? It can become invalid if the function type gets changed in IDA.
|
|
|
|
|
|
ida_hexrays.vdui_t.view_idx
|
|
pseudocode window index (0..)
|
|
|
|
ida_hexrays.vdui_t.visible(self) -> bool
|
|
Is the pseudocode window visible? if not, it might be invisible or destroyed
|
|
|
|
|
|
ida_hexrays.vivl_t
|
|
|
|
ida_hexrays.vivl_t.__eq__(self, *args) -> bool
|
|
|
|
ida_hexrays.vivl_t.__ge__(self, r: "vivl_t") -> bool
|
|
|
|
ida_hexrays.vivl_t.__gt__(self, r: "vivl_t") -> bool
|
|
|
|
ida_hexrays.vivl_t.__init__(self, *args)
|
|
|
|
ida_hexrays.vivl_t.__le__(self, r: "vivl_t") -> bool
|
|
|
|
ida_hexrays.vivl_t.__lt__(self, r: "vivl_t") -> bool
|
|
|
|
ida_hexrays.vivl_t.__ne__(self, r: "vivl_t") -> bool
|
|
|
|
ida_hexrays.vivl_t._print(self) -> None
|
|
|
|
ida_hexrays.vivl_t.compare(self, r: "vivl_t") -> int
|
|
|
|
ida_hexrays.vivl_t.contains(self, voff2: "voff_t") -> bool
|
|
Does our value interval contain the specified value offset?
|
|
|
|
ida_hexrays.vivl_t.dstr(self) -> str
|
|
|
|
ida_hexrays.vivl_t.extend_to_cover(self, r: "vivl_t") -> bool
|
|
Extend a value interval using another value interval of the same type
|
|
|
|
@returns success
|
|
|
|
ida_hexrays.vivl_t.includes(self, r: "vivl_t") -> bool
|
|
Does our value interval include another?
|
|
|
|
ida_hexrays.vivl_t.intersect(self, r: "vivl_t") -> int
|
|
Intersect value intervals the same type
|
|
|
|
@returns size of the resulting intersection
|
|
|
|
ida_hexrays.vivl_t.overlap(self, r: "vivl_t") -> bool
|
|
Do two value intervals overlap?
|
|
|
|
ida_hexrays.vivl_t.set(self, *args) -> None
|
|
This function has the following signatures:
|
|
|
|
0. set(_type: mopt_t, _off: int, _size: int=0) -> None
|
|
1. set(voff: const voff_t &, _size: int) -> None
|
|
|
|
# 0: set(_type: mopt_t, _off: int, _size: int=0) -> None
|
|
|
|
|
|
# 1: set(voff: const voff_t &, _size: int) -> None
|
|
|
|
ida_hexrays.vivl_t.set_reg(self, mreg: "mreg_t", sz: int = 0) -> None
|
|
|
|
ida_hexrays.vivl_t.set_stkoff(self, stkoff: int, sz: int = 0) -> None
|
|
|
|
ida_hexrays.vivl_t.size
|
|
Interval size in bytes.
|
|
|
|
ida_hexrays.voff_t
|
|
|
|
ida_hexrays.voff_t.__eq__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.__ge__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.__gt__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.__init__(self, *args)
|
|
|
|
ida_hexrays.voff_t.__le__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.__lt__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.__ne__(self, r: "voff_t") -> bool
|
|
|
|
ida_hexrays.voff_t.add(self, width: int) -> "voff_t"
|
|
|
|
ida_hexrays.voff_t.compare(self, r: "voff_t") -> int
|
|
|
|
ida_hexrays.voff_t.defined(self) -> bool
|
|
|
|
ida_hexrays.voff_t.diff(self, r: "voff_t") -> int
|
|
|
|
ida_hexrays.voff_t.get_reg(self) -> "mreg_t"
|
|
|
|
ida_hexrays.voff_t.get_stkoff(self) -> int
|
|
|
|
ida_hexrays.voff_t.inc(self, delta: int) -> None
|
|
|
|
ida_hexrays.voff_t.is_reg(self) -> bool
|
|
|
|
ida_hexrays.voff_t.is_stkoff(self) -> bool
|
|
|
|
ida_hexrays.voff_t.off
|
|
register number or stack offset
|
|
|
|
ida_hexrays.voff_t.set(self, _type: "mopt_t", _off: int) -> None
|
|
|
|
ida_hexrays.voff_t.set_reg(self, mreg: "mreg_t") -> None
|
|
|
|
ida_hexrays.voff_t.set_stkoff(self, stkoff: int) -> None
|
|
|
|
ida_hexrays.voff_t.type
|
|
mop_r - register, mop_S - stack, mop_z - undefined
|
|
|
|
ida_hexrays.voff_t.undef(self) -> None
|
|
|
|
ida_allins
|
|
|
|
ida_auto
|
|
Functions that work with the autoanalyzer queue.
|
|
|
|
The autoanalyzer works when IDA is not busy processing the user keystrokes. It has several queues, each queue having its own priority. The analyzer stops when all queues are empty.
|
|
A queue contains addresses or address ranges. The addresses are kept sorted by their values. The analyzer will process all addresses from the first queue, then switch to the second queue and so on. There are no limitations on the size of the queues.
|
|
This file also contains functions that deal with the IDA status indicator and the autoanalysis indicator. You may use these functions to change the indicator value.
|
|
|
|
|
|
ida_auto.AU_CHLB
|
|
12: load signature file (file name is kept separately)
|
|
|
|
ida_auto.AU_CODE
|
|
1: convert to instruction
|
|
|
|
ida_auto.AU_FCHUNK
|
|
5: find func chunks
|
|
|
|
ida_auto.AU_FINAL
|
|
13: final pass
|
|
|
|
ida_auto.AU_LBF2
|
|
10: the same, second pass
|
|
|
|
ida_auto.AU_LBF3
|
|
11: the same, third pass
|
|
|
|
ida_auto.AU_LIBF
|
|
9: apply signature to address
|
|
|
|
ida_auto.AU_NONE
|
|
placeholder, not used
|
|
|
|
ida_auto.AU_PROC
|
|
3: convert to procedure start
|
|
|
|
ida_auto.AU_TAIL
|
|
4: add a procedure tail
|
|
|
|
ida_auto.AU_TYPE
|
|
8: apply type information
|
|
|
|
ida_auto.AU_UNK
|
|
0: convert to unexplored
|
|
|
|
ida_auto.AU_USD2
|
|
7: reanalyze, second pass
|
|
|
|
ida_auto.AU_USED
|
|
6: reanalyze
|
|
|
|
ida_auto.AU_WEAK
|
|
2: convert to instruction (ida decision)
|
|
|
|
ida_auto.auto_apply_tail(tail_ea: ida_idaapi.ea_t, parent_ea: ida_idaapi.ea_t) -> None
|
|
Plan to apply the tail_ea chunk to the parent
|
|
|
|
@param tail_ea: linear address of start of tail
|
|
@param parent_ea: linear address within parent. If BADADDR, automatically try to find parent via xrefs.
|
|
|
|
ida_auto.auto_apply_type(caller: ida_idaapi.ea_t, callee: ida_idaapi.ea_t) -> None
|
|
Plan to apply the callee's type to the calling point.
|
|
|
|
ida_auto.auto_cancel(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None
|
|
Remove an address range (ea1..ea2) from queues AU_CODE, AU_PROC, AU_USED. To remove an address range from other queues use auto_unmark() function. 'ea1' may be higher than 'ea2', the kernel will swap them in this case. 'ea2' doesn't belong to the range.
|
|
|
|
|
|
ida_auto.auto_display_t
|
|
|
|
ida_auto.auto_display_t.__init__(self)
|
|
|
|
ida_auto.auto_get(type: "atype_t *", lowEA: ida_idaapi.ea_t, highEA: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Retrieve an address from queues regarding their priority. Returns BADADDR if no addresses not lower than 'lowEA' and less than 'highEA' are found in the queues. Otherwise *type will have queue type.
|
|
|
|
|
|
ida_auto.auto_is_ok() -> bool
|
|
Are all queues empty? (i.e. has autoanalysis finished?).
|
|
|
|
|
|
ida_auto.auto_make_code(ea: ida_idaapi.ea_t) -> None
|
|
Plan to make code.
|
|
|
|
ida_auto.auto_make_proc(ea: ida_idaapi.ea_t) -> None
|
|
Plan to make code&function.
|
|
|
|
ida_auto.auto_make_step(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool
|
|
Analyze one address in the specified range and return true.
|
|
|
|
@returns if processed anything. false means that there is nothing to process in the specified range.
|
|
|
|
ida_auto.auto_mark(ea: ida_idaapi.ea_t, type: "atype_t") -> None
|
|
Put single address into a queue. Queues keep addresses sorted.
|
|
|
|
ida_auto.auto_mark_range(start: ida_idaapi.ea_t, end: ida_idaapi.ea_t, type: "atype_t") -> None
|
|
Put range of addresses into a queue. 'start' may be higher than 'end', the kernel will swap them in this case. 'end' doesn't belong to the range.
|
|
|
|
|
|
ida_auto.auto_postpone_analysis(ea: ida_idaapi.ea_t) -> bool
|
|
Plan to reanalyze on the second pass The typical usage of this function in emu.cpp is: if ( !auto_postpone_analysis(ea) ) op_offset(ea, 0, ...); (we make an offset only on the second pass)
|
|
|
|
|
|
ida_auto.auto_recreate_insn(ea: ida_idaapi.ea_t) -> int
|
|
Try to create instruction
|
|
|
|
@param ea: linear address of callee
|
|
@returns the length of the instruction or 0
|
|
|
|
ida_auto.auto_unmark(start: ida_idaapi.ea_t, end: ida_idaapi.ea_t, type: "atype_t") -> None
|
|
Remove range of addresses from a queue. 'start' may be higher than 'end', the kernel will swap them in this case. 'end' doesn't belong to the range.
|
|
|
|
|
|
ida_auto.auto_wait() -> bool
|
|
Process everything in the queues and return true.
|
|
|
|
@returns false if the user clicked cancel. (the wait box must be displayed by the caller if desired)
|
|
|
|
ida_auto.auto_wait_range(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> "ssize_t"
|
|
Process everything in the specified range and return true.
|
|
|
|
@returns number of autoanalysis steps made. -1 if the user clicked cancel. (the wait box must be displayed by the caller if desired)
|
|
|
|
ida_auto.enable_auto(enable: bool) -> bool
|
|
Temporarily enable/disable autoanalyzer. Not user-facing, but rather because IDA sometimes need to turn AA on/off regardless of inf.s_genflags:INFFL_AUTO
|
|
|
|
@returns old state
|
|
|
|
ida_auto.get_auto_display(auto_display: "auto_display_t") -> bool
|
|
Get structure which holds the autoanalysis indicator contents.
|
|
|
|
ida_auto.get_auto_state() -> "atype_t"
|
|
Get current state of autoanalyzer. If auto_state == AU_NONE, IDA is currently not running the analysis (it could be temporarily interrupted to perform the user's requests, for example).
|
|
|
|
|
|
ida_auto.is_auto_enabled() -> bool
|
|
Get autoanalyzer state.
|
|
|
|
ida_auto.may_create_stkvars() -> bool
|
|
Is it allowed to create stack variables automatically?. This function should be used by IDP modules before creating stack vars.
|
|
|
|
|
|
ida_auto.may_trace_sp() -> bool
|
|
Is it allowed to trace stack pointer automatically?. This function should be used by IDP modules before tracing sp.
|
|
|
|
|
|
ida_auto.peek_auto_queue(low_ea: ida_idaapi.ea_t, type: "atype_t") -> ida_idaapi.ea_t
|
|
Peek into a queue 'type' for an address not lower than 'low_ea'. Do not remove address from the queue.
|
|
|
|
@returns the address or BADADDR
|
|
|
|
ida_auto.plan_and_wait(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, final_pass: bool = True) -> int
|
|
Analyze the specified range. Try to create instructions where possible. Make the final pass over the specified range if specified. This function doesn't return until the range is analyzed.
|
|
|
|
@retval 1: ok
|
|
@retval 0: Ctrl-Break was pressed
|
|
|
|
ida_auto.plan_ea(ea: ida_idaapi.ea_t) -> None
|
|
Plan to perform reanalysis.
|
|
|
|
ida_auto.plan_range(sEA: ida_idaapi.ea_t, eEA: ida_idaapi.ea_t) -> None
|
|
Plan to perform reanalysis.
|
|
|
|
ida_auto.reanalyze_callers(ea: ida_idaapi.ea_t, noret: bool) -> None
|
|
Plan to reanalyze callers of the specified address. This function will add to AU_USED queue all instructions that call (not jump to) the specified address.
|
|
|
|
@param ea: linear address of callee
|
|
@param noret: !=0: the callee doesn't return, mark to undefine subsequent instructions in the caller. 0: do nothing.
|
|
|
|
ida_auto.revert_ida_decisions(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None
|
|
Delete all analysis info that IDA generated for for the given range.
|
|
|
|
ida_auto.set_auto_state(new_state: "atype_t") -> "atype_t"
|
|
Set current state of autoanalyzer.
|
|
|
|
@param new_state: new state of autoanalyzer
|
|
@returns previous state
|
|
|
|
ida_auto.set_ida_state(st: "idastate_t") -> "idastate_t"
|
|
Change IDA status indicator value
|
|
|
|
@param st: - new indicator status
|
|
@returns old indicator status
|
|
|
|
ida_auto.show_addr(ea: ida_idaapi.ea_t) -> None
|
|
Show an address on the autoanalysis indicator. The address is displayed in the form " @:12345678".
|
|
|
|
@param ea: - linear address to display
|
|
|
|
ida_auto.show_auto(*args) -> None
|
|
Change autoanalysis indicator value.
|
|
|
|
@param ea: linear address being analyzed
|
|
@param type: autoanalysis type (see Autoanalysis queues)
|
|
|
|
ida_auto.st_Ready
|
|
READY: IDA is doing nothing.
|
|
|
|
ida_auto.st_Think
|
|
THINKING: Autoanalysis on, the user may press keys.
|
|
|
|
ida_auto.st_Waiting
|
|
WAITING: Waiting for the user input.
|
|
|
|
ida_auto.st_Work
|
|
BUSY: IDA is busy.
|
|
|
|
ida_bitrange
|
|
Definition of the bitrange_t class.
|
|
|
|
ida_bitrange.bitrange_t
|
|
|
|
ida_bitrange.bitrange_t.__eq__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__ge__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__gt__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__init__(self, bit_ofs: "uint16" = 0, size_in_bits: "uint16" = 0)
|
|
|
|
ida_bitrange.bitrange_t.__le__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__lt__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__ne__(self, r: "bitrange_t") -> bool
|
|
|
|
ida_bitrange.bitrange_t.__repr__(self)
|
|
|
|
ida_bitrange.bitrange_t.__str__(self) -> str
|
|
|
|
ida_bitrange.bitrange_t.apply_mask(self, subrange: "bitrange_t") -> bool
|
|
Apply mask to a bitrange
|
|
|
|
@param subrange: range *inside* the main bitrange to keep After this operation the main bitrange will be truncated to have only the bits that are specified by subrange. Example: [off=8,nbits=4], subrange[off=1,nbits=2] => [off=9,nbits=2]
|
|
@returns success
|
|
|
|
ida_bitrange.bitrange_t.bitoff(self) -> "uint"
|
|
Get offset of 1st bit.
|
|
|
|
ida_bitrange.bitrange_t.bitsize(self) -> "uint"
|
|
Get size of the value in bits.
|
|
|
|
ida_bitrange.bitrange_t.bytesize(self) -> "uint"
|
|
Size of the value in bytes.
|
|
|
|
ida_bitrange.bitrange_t.compare(self, r: "bitrange_t") -> int
|
|
|
|
ida_bitrange.bitrange_t.create_union(self, r: "bitrange_t") -> None
|
|
Create union of 2 ranges including the hole between them.
|
|
|
|
ida_bitrange.bitrange_t.empty(self) -> bool
|
|
Is the bitrange empty?
|
|
|
|
ida_bitrange.bitrange_t.extract(self, src: "void const *", is_mf: bool) -> bool
|
|
|
|
ida_bitrange.bitrange_t.has_common(self, r: "bitrange_t") -> bool
|
|
Does have common bits with another bitrange?
|
|
|
|
ida_bitrange.bitrange_t.init(self, bit_ofs: "uint16", size_in_bits: "uint16") -> None
|
|
Initialize offset and size to given values.
|
|
|
|
ida_bitrange.bitrange_t.inject(self, dst: "void *", src: "bytevec_t const &", is_mf: bool) -> bool
|
|
|
|
ida_bitrange.bitrange_t.intersect(self, r: "bitrange_t") -> None
|
|
Intersect two ranges.
|
|
|
|
ida_bitrange.bitrange_t.mask64(self) -> "uint64"
|
|
Convert to mask of 64 bits.
|
|
|
|
ida_bitrange.bitrange_t.reset(self) -> None
|
|
Make the bitrange empty.
|
|
|
|
ida_bitrange.bitrange_t.shift_down(self, cnt: "uint") -> None
|
|
Shift range down (left)
|
|
|
|
ida_bitrange.bitrange_t.shift_up(self, cnt: "uint") -> None
|
|
Shift range up (right)
|
|
|
|
ida_bitrange.bitrange_t.sub(self, r: "bitrange_t") -> bool
|
|
Subtract a bitrange.
|
|
|
|
ida_bytes
|
|
Contains functions that deal with individual byte characteristics.
|
|
|
|
Each byte of the disassembled program is represented by a 32-bit value. We will call this value 'flags'. The structure of the flags is here.
|
|
You are not allowed to inspect individual bits of flags and modify them directly. Use special functions to inspect and/or modify flags.
|
|
Flags are kept in a virtual array file (*.id1). Addresses (ea) are all 32-bit (or 64-bit) quantities.
|
|
|
|
|
|
ida_bytes.ALOPT_APPEND
|
|
if an existing strlit is encountered, then append it to the string.
|
|
|
|
|
|
ida_bytes.ALOPT_IGNCLT
|
|
if set, don't stop at codepoints that are not part of the current 'culture'; accept all those that are graphical (this is typically used used by user-initiated actions creating string literals.)
|
|
|
|
|
|
ida_bytes.ALOPT_IGNHEADS
|
|
don't stop if another data item is encountered. only the byte values will be used to determine the string length. if not set, a defined data item or instruction will truncate the string
|
|
|
|
|
|
ida_bytes.ALOPT_IGNPRINT
|
|
if set, don't stop at non-printable codepoints, but only at the terminating character (or not unicode-mapped character (e.g., 0x8f in CP1252))
|
|
|
|
|
|
ida_bytes.ALOPT_MAX4K
|
|
if string length is more than 4K, return the accumulated length
|
|
|
|
|
|
ida_bytes.ALOPT_ONLYTERM
|
|
only the termination characters can be at the string end. Without this option illegal characters also terminate the string.
|
|
|
|
|
|
ida_bytes.BIN_SEARCH_BACKWARD
|
|
search backward for bytes
|
|
|
|
ida_bytes.BIN_SEARCH_BITMASK
|
|
searching using strict bit mask
|
|
|
|
ida_bytes.BIN_SEARCH_CASE
|
|
case sensitive
|
|
|
|
ida_bytes.BIN_SEARCH_FORWARD
|
|
search forward for bytes
|
|
|
|
ida_bytes.BIN_SEARCH_INITED
|
|
find_byte, find_byter: any initilized value
|
|
|
|
ida_bytes.BIN_SEARCH_NOBREAK
|
|
don't check for Ctrl-Break
|
|
|
|
ida_bytes.BIN_SEARCH_NOCASE
|
|
case insensitive
|
|
|
|
ida_bytes.BIN_SEARCH_NOSHOW
|
|
don't show search progress or update screen
|
|
|
|
ida_bytes.DELIT_DELNAMES
|
|
delete any names at the specified address range (except for the starting address). this bit is valid if nbytes > 1
|
|
|
|
|
|
ida_bytes.DELIT_EXPAND
|
|
propagate undefined items; for example if removing an instruction removes all references to the next instruction, then plan to convert to unexplored the next instruction too.
|
|
|
|
|
|
ida_bytes.DELIT_KEEPFUNC
|
|
do not undefine the function start. Just delete xrefs, ops e.t.c.
|
|
|
|
|
|
ida_bytes.DELIT_NOCMT
|
|
reject to delete if a comment is in address range (except for the starting address). this bit is valid if nbytes > 1
|
|
|
|
|
|
ida_bytes.DELIT_NOTRUNC
|
|
don't truncate the current function even if AF_TRFUNC is set
|
|
|
|
|
|
ida_bytes.DELIT_NOUNAME
|
|
reject to delete if a user name is in address range (except for the starting address). this bit is valid if nbytes > 1
|
|
|
|
|
|
ida_bytes.DELIT_SIMPLE
|
|
simply undefine the specified item(s)
|
|
|
|
ida_bytes.DTP_NODUP
|
|
do not use dup construct
|
|
|
|
ida_bytes.DTP_NODUP
|
|
do not use dup construct
|
|
|
|
ida_bytes.DT_TYPE
|
|
Mask for DATA typing.
|
|
|
|
ida_bytes.FF_ALIGN
|
|
alignment directive
|
|
|
|
ida_bytes.FF_ANYNAME
|
|
Has name or dummy name?
|
|
|
|
ida_bytes.FF_BNOT
|
|
Bitwise negation of operands.
|
|
|
|
ida_bytes.FF_BYTE
|
|
byte
|
|
|
|
ida_bytes.FF_CODE
|
|
Code ?
|
|
|
|
ida_bytes.FF_COMM
|
|
Has comment ?
|
|
|
|
ida_bytes.FF_CUSTOM
|
|
custom data type
|
|
|
|
ida_bytes.FF_DATA
|
|
Data ?
|
|
|
|
ida_bytes.FF_DOUBLE
|
|
double
|
|
|
|
ida_bytes.FF_DWORD
|
|
double word
|
|
|
|
ida_bytes.FF_FLOAT
|
|
float
|
|
|
|
ida_bytes.FF_FLOW
|
|
Exec flow from prev instruction.
|
|
|
|
ida_bytes.FF_FUNC
|
|
function start?
|
|
|
|
ida_bytes.FF_IMMD
|
|
Has Immediate value ?
|
|
|
|
ida_bytes.FF_IVL
|
|
Byte has value ?
|
|
|
|
ida_bytes.FF_JUMP
|
|
Has jump table or switch_info?
|
|
|
|
ida_bytes.FF_LABL
|
|
Has dummy name?
|
|
|
|
ida_bytes.FF_LINE
|
|
Has next or prev lines ?
|
|
|
|
ida_bytes.FF_NAME
|
|
Has name ?
|
|
|
|
ida_bytes.FF_N_CHAR
|
|
Char ('x')?
|
|
|
|
ida_bytes.FF_N_CUST
|
|
Custom representation?
|
|
|
|
ida_bytes.FF_N_ENUM
|
|
Enumeration?
|
|
|
|
ida_bytes.FF_N_FLT
|
|
Floating point number?
|
|
|
|
ida_bytes.FF_N_FOP
|
|
Forced operand?
|
|
|
|
ida_bytes.FF_N_NUMB
|
|
Binary number?
|
|
|
|
ida_bytes.FF_N_NUMD
|
|
Decimal number?
|
|
|
|
ida_bytes.FF_N_NUMH
|
|
Hexadecimal number?
|
|
|
|
ida_bytes.FF_N_NUMO
|
|
Octal number?
|
|
|
|
ida_bytes.FF_N_OFF
|
|
Offset?
|
|
|
|
ida_bytes.FF_N_SEG
|
|
Segment?
|
|
|
|
ida_bytes.FF_N_STK
|
|
Stack variable?
|
|
|
|
ida_bytes.FF_N_STRO
|
|
Struct offset?
|
|
|
|
ida_bytes.FF_N_VOID
|
|
Void (unknown)?
|
|
|
|
ida_bytes.FF_OWORD
|
|
octaword/xmm word (16 bytes/128 bits)
|
|
|
|
ida_bytes.FF_PACKREAL
|
|
packed decimal real
|
|
|
|
ida_bytes.FF_QWORD
|
|
quadro word
|
|
|
|
ida_bytes.FF_REF
|
|
has references
|
|
|
|
ida_bytes.FF_SIGN
|
|
Inverted sign of operands.
|
|
|
|
ida_bytes.FF_STRLIT
|
|
string literal
|
|
|
|
ida_bytes.FF_STRUCT
|
|
struct variable
|
|
|
|
ida_bytes.FF_TAIL
|
|
Tail ?
|
|
|
|
ida_bytes.FF_TBYTE
|
|
tbyte
|
|
|
|
ida_bytes.FF_UNK
|
|
Unknown ?
|
|
|
|
ida_bytes.FF_UNUSED
|
|
unused bit (was used for variable bytes)
|
|
|
|
ida_bytes.FF_WORD
|
|
word
|
|
|
|
ida_bytes.FF_YWORD
|
|
ymm word (32 bytes/256 bits)
|
|
|
|
ida_bytes.FF_ZWORD
|
|
zmm word (64 bytes/512 bits)
|
|
|
|
ida_bytes.GFE_IDB_VALUE
|
|
get flags with FF_IVL & MS_VAL. but never use the debugger memory.
|
|
|
|
|
|
ida_bytes.GFE_VALUE
|
|
get flags with FF_IVL & MS_VAL. It is much slower under remote debugging because the kernel needs to read the process memory.
|
|
|
|
|
|
ida_bytes.GMB_READALL
|
|
try to read all bytes; if this bit is not set, fail at first uninited byte
|
|
|
|
|
|
ida_bytes.GMB_WAITBOX
|
|
show wait box (may return -1 in this case)
|
|
|
|
ida_bytes.ITEM_END_CANCEL
|
|
stop when operation cancelled, it is the responsibility of the caller to show the wait dialog
|
|
|
|
|
|
ida_bytes.ITEM_END_FIXUP
|
|
stop at the first fixup
|
|
|
|
ida_bytes.ITEM_END_INITED
|
|
stop when initialization changes i.e.
|
|
* if is_loaded(ea): stop if uninitialized byte is encountered
|
|
* if !is_loaded(ea): stop if initialized byte is encountered
|
|
|
|
|
|
|
|
|
|
ida_bytes.ITEM_END_NAME
|
|
stop at the first named location
|
|
|
|
ida_bytes.ITEM_END_XREF
|
|
stop at the first referenced location
|
|
|
|
ida_bytes.MS_CLS
|
|
Mask for typing.
|
|
|
|
ida_bytes.MS_CODE
|
|
Mask for code bits.
|
|
|
|
ida_bytes.MS_COMM
|
|
Mask of common bits.
|
|
|
|
ida_bytes.MS_N_TYPE
|
|
Mask for nth arg (a 64-bit constant)
|
|
|
|
ida_bytes.MS_VAL
|
|
Mask for byte value.
|
|
|
|
ida_bytes.OPND_ALL
|
|
all operands
|
|
|
|
ida_bytes.OPND_MASK
|
|
mask for operand number
|
|
|
|
ida_bytes.OPND_OUTER
|
|
outer offset base (combined with operand number). used only in set, get, del_offset() functions
|
|
|
|
|
|
ida_bytes.PBSENC_ALL
|
|
Use all IDB encodings.
|
|
|
|
ida_bytes.PBSENC_DEF1BPU
|
|
Use the default 1 byte-per-unit IDB encoding.
|
|
|
|
ida_bytes.PSTF_ATTRIB
|
|
generate for type attribute usage
|
|
|
|
ida_bytes.PSTF_ENC
|
|
if encoding is specified, append it
|
|
|
|
ida_bytes.PSTF_HOTKEY
|
|
have hotkey markers part of the name
|
|
|
|
ida_bytes.PSTF_ONLY_ENC
|
|
generate only the encoding name
|
|
|
|
ida_bytes.PSTF_TBRIEF
|
|
use brief name (e.g., in the 'Strings' window)
|
|
|
|
ida_bytes.PSTF_TINLIN
|
|
use 'inline' name (e.g., in the structures comments)
|
|
|
|
ida_bytes.PSTF_TMASK
|
|
type mask
|
|
|
|
ida_bytes.PSTF_TNORM
|
|
use normal name
|
|
|
|
ida_bytes.STRCONV_ESCAPE
|
|
convert non-printable characters to C escapes (
|
|
, \xNN, \uNNNN)
|
|
|
|
ida_bytes.STRCONV_INCLLEN
|
|
for Pascal-style strings, include the prefixing length byte(s) as C-escaped sequence
|
|
|
|
ida_bytes.STRCONV_REPLCHAR
|
|
convert non-printable characters to the Unicode replacement character (U+FFFD)
|
|
|
|
ida_bytes.__to_bytevec(_in: "bytevec_t const &") -> "bytevec_t"
|
|
|
|
ida_bytes.__walk_types_and_formats(formats, type_action, format_action, installing)
|
|
|
|
ida_bytes.add_byte(ea: ida_idaapi.ea_t, value: int) -> None
|
|
Add a value to one byte of the program. This function works for wide byte processors too.
|
|
|
|
@param ea: linear address
|
|
@param value: byte value
|
|
|
|
ida_bytes.add_dword(ea: ida_idaapi.ea_t, value: "uint64") -> None
|
|
Add a value to one dword of the program. This function works for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@param ea: linear address
|
|
@param value: byte value
|
|
|
|
ida_bytes.add_hidden_range(*args) -> bool
|
|
Mark a range of addresses as hidden. The range will be created in the invisible state with the default color
|
|
|
|
@param ea1: linear address of start of the address range
|
|
@param ea2: linear address of end of the address range
|
|
@param description: range parameters
|
|
@param header: range parameters
|
|
@param footer: range parameters
|
|
@param color: the range color
|
|
@returns success
|
|
|
|
ida_bytes.add_mapping(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, size: "asize_t") -> bool
|
|
IDA supports memory mapping. References to the addresses from the mapped range use data and meta-data from the mapping range.
|
|
|
|
@param to: start of the mapping range (existent address)
|
|
@param size: size of the range
|
|
@returns success
|
|
|
|
ida_bytes.add_qword(ea: ida_idaapi.ea_t, value: "uint64") -> None
|
|
Add a value to one qword of the program. This function does not work for wide byte processors. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@param ea: linear address
|
|
@param value: byte value
|
|
|
|
ida_bytes.add_word(ea: ida_idaapi.ea_t, value: "uint64") -> None
|
|
Add a value to one word of the program. This function works for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@param ea: linear address
|
|
@param value: byte value
|
|
|
|
ida_bytes.align_flag() -> "flags64_t"
|
|
Get a flags64_t representing an alignment directive.
|
|
|
|
ida_bytes.append_cmt(ea: ida_idaapi.ea_t, str: str, rptble: bool) -> bool
|
|
Append to an indented comment. Creates a new comment if none exists. Appends a newline character and the specified string otherwise.
|
|
|
|
@param ea: linear address
|
|
@param str: comment string to append
|
|
@param rptble: append to repeatable comment?
|
|
@returns success
|
|
|
|
ida_bytes.attach_custom_data_format(dtid: int, dfid: int) -> bool
|
|
Attach the data format to the data type.
|
|
|
|
@param dtid: data type id that can use the data format. 0 means all standard data types. Such data formats can be applied to any data item or instruction operands. For instruction operands, the data_format_t::value_size check is not performed by the kernel.
|
|
@param dfid: data format id
|
|
@retval true: ok
|
|
@retval false: no such `dtid`, or no such `dfid', or the data format has already been attached to the data type
|
|
|
|
ida_bytes.bin_flag() -> "flags64_t"
|
|
Get number flag of the base, regardless of current processor - better to use num_flag()
|
|
|
|
ida_bytes.bin_search(*args)
|
|
Search for a set of bytes in the program
|
|
|
|
This function has the following signatures:
|
|
|
|
1. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: compiled_binpat_vec_t, flags: int) -> Tuple[ida_idaapi.ea_t, int]
|
|
2. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, image: bytes, mask: bytes, len: int, flags: int) -> ida_idaapi.ea_t
|
|
|
|
The return value type will differ depending on the form:
|
|
|
|
1. a tuple `(matched-address, index-in-compiled_binpat_vec_t)` (1st form)
|
|
2. the address of a match, or ida_idaapi.BADADDR if not found (2nd form)
|
|
|
|
This is a low-level function; more user-friendly alternatives
|
|
are available. Please see 'find_bytes' and 'find_string'.
|
|
|
|
@param start_ea: linear address, start of range to search
|
|
@param end_ea: linear address, end of range to search (exclusive)
|
|
@param data: (1st form) the prepared data to search for (see parse_binpat_str())
|
|
@param bytes: (2nd form) a set of bytes to match
|
|
@param mask: (2nd form) a mask to apply to the set of bytes
|
|
@param flags: combination of BIN_SEARCH_* flags
|
|
@return: either a tuple holding both the address of the match and the index of the compiled pattern that matched, or the address of a match (ida_idaapi.BADADDR if not found)
|
|
|
|
ida_bytes.byte_flag() -> "flags64_t"
|
|
Get a flags64_t representing a byte.
|
|
|
|
ida_bytes.bytesize(ea: ida_idaapi.ea_t) -> int
|
|
Get number of bytes required to store a byte at the given address.
|
|
|
|
ida_bytes.calc_def_align(ea: ida_idaapi.ea_t, mina: int, maxa: int) -> int
|
|
Calculate the default alignment exponent.
|
|
|
|
@param ea: linear address
|
|
@param mina: minimal possible alignment exponent.
|
|
@param maxa: minimal possible alignment exponent.
|
|
|
|
ida_bytes.calc_dflags(f: "flags64_t", force: bool) -> "flags64_t"
|
|
|
|
ida_bytes.calc_max_align(endea: ida_idaapi.ea_t) -> int
|
|
Calculate the maximal possible alignment exponent.
|
|
|
|
@param endea: end address of the alignment item.
|
|
@returns a value in the 0..32 range
|
|
|
|
ida_bytes.calc_max_item_end(ea: ida_idaapi.ea_t, how: int = 15) -> ida_idaapi.ea_t
|
|
Calculate maximal reasonable end address of a new item. This function will limit the item with the current segment bounds.
|
|
|
|
@param ea: linear address
|
|
@param how: when to stop the search. A combination of Item end search flags
|
|
@returns end of new item. If it is not possible to create an item, it will return 'ea'. If operation was cancelled by user, it will return 'ea'
|
|
|
|
ida_bytes.calc_min_align(length: "asize_t") -> int
|
|
Calculate the minimal possible alignment exponent.
|
|
|
|
@param length: size of the item in bytes.
|
|
@returns a value in the 1..32 range
|
|
|
|
ida_bytes.can_define_item(ea: ida_idaapi.ea_t, length: "asize_t", flags: "flags64_t") -> bool
|
|
Can define item (instruction/data) of the specified 'length', starting at 'ea'?
|
|
* a new item would cross segment boundaries
|
|
* a new item would overlap with existing items (except items specified by 'flags')
|
|
|
|
|
|
|
|
@param ea: start of the range for the new item
|
|
@param length: length of the new item in bytes
|
|
@param flags: if not 0, then the kernel will ignore the data types specified by the flags and destroy them. For example:
|
|
1000 dw 5
|
|
1002 db 5 ; undef
|
|
1003 db 5 ; undef
|
|
1004 dw 5
|
|
1006 dd 5
|
|
can_define_item(1000, 6, 0) - false because of dw at 1004
|
|
can_define_item(1000, 6, word_flag()) - true, word at 1004 is destroyed
|
|
@returns 1-yes, 0-no
|
|
|
|
ida_bytes.change_storage_type(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, stt: "storage_type_t") -> "error_t"
|
|
Change flag storage type for address range.
|
|
|
|
@param start_ea: should be lower than end_ea.
|
|
@param end_ea: does not belong to the range.
|
|
@param stt: storage_type_t
|
|
@returns error code
|
|
|
|
ida_bytes.char_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.chunk_size(ea: ida_idaapi.ea_t) -> "asize_t"
|
|
Get size of the contiguous address block containing 'ea'.
|
|
|
|
@returns 0 if 'ea' doesn't belong to the program.
|
|
|
|
ida_bytes.chunk_start(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get start of the contiguous address block containing 'ea'.
|
|
|
|
@returns BADADDR if 'ea' doesn't belong to the program.
|
|
|
|
ida_bytes.clr_lzero(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Clear toggle lzero bit. This function reset the display of leading zeroes for the specified operand to the default. If the default is not to display leading zeroes, leading zeroes will not be displayed, as vice versa.
|
|
|
|
@param ea: the item (insn/data) address
|
|
@param n: the operand number (0-first operand, 1-other operands)
|
|
@returns success
|
|
|
|
ida_bytes.clr_op_type(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Remove operand representation information. (set operand representation to be 'undefined')
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@returns success
|
|
|
|
ida_bytes.code_flag() -> "flags64_t"
|
|
FF_CODE
|
|
|
|
ida_bytes.combine_flags(F: "flags64_t") -> "flags64_t"
|
|
|
|
ida_bytes.compiled_binpat_t
|
|
|
|
ida_bytes.compiled_binpat_t.__eq__(self, r: "compiled_binpat_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_t.__init__(self)
|
|
|
|
ida_bytes.compiled_binpat_t.__ne__(self, r: "compiled_binpat_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_t.all_bytes_defined(self) -> bool
|
|
|
|
ida_bytes.compiled_binpat_t.qclear(self) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__eq__(self, r: "compiled_binpat_vec_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__getitem__(self, i: "size_t") -> "compiled_binpat_t const &"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__init__(self, *args)
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__ne__(self, r: "compiled_binpat_vec_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.__setitem__(self, i: "size_t", v: "compiled_binpat_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t._del(self, x: "compiled_binpat_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.add_unique(self, x: "compiled_binpat_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.append(self, x: "compiled_binpat_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.at(self, _idx: "size_t") -> "compiled_binpat_t const &"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.begin(self, *args) -> "qvector< compiled_binpat_t >::const_iterator"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.clear(self) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.empty(self) -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.end(self, *args) -> "qvector< compiled_binpat_t >::const_iterator"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.erase(self, *args) -> "qvector< compiled_binpat_t >::iterator"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.extend(self, x: "compiled_binpat_vec_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.extract(self) -> "compiled_binpat_t *"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.find(self, *args) -> "qvector< compiled_binpat_t >::const_iterator"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.grow(self, *args) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.has(self, x: "compiled_binpat_t") -> bool
|
|
|
|
ida_bytes.compiled_binpat_vec_t.inject(self, s: "compiled_binpat_t", len: "size_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.insert(self, it: "compiled_binpat_t", x: "compiled_binpat_t") -> "qvector< compiled_binpat_t >::iterator"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.pop_back(self) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.push_back(self, *args) -> "compiled_binpat_t &"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.qclear(self) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.resize(self, *args) -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.size(self) -> "size_t"
|
|
|
|
ida_bytes.compiled_binpat_vec_t.swap(self, r: "compiled_binpat_vec_t") -> None
|
|
|
|
ida_bytes.compiled_binpat_vec_t.truncate(self) -> None
|
|
|
|
ida_bytes.create_16bit_data(ea: ida_idaapi.ea_t, length: "asize_t") -> bool
|
|
Convert to 16-bit quantity (take the byte size into account)
|
|
|
|
ida_bytes.create_32bit_data(ea: ida_idaapi.ea_t, length: "asize_t") -> bool
|
|
Convert to 32-bit quantity (take the byte size into account)
|
|
|
|
ida_bytes.create_align(ea: ida_idaapi.ea_t, length: "asize_t", alignment: int) -> bool
|
|
Create an alignment item.
|
|
|
|
@param ea: linear address
|
|
@param length: size of the item in bytes. 0 means to infer from ALIGNMENT
|
|
@param alignment: alignment exponent. Example: 3 means align to 8 bytes. 0 means to infer from LENGTH It is forbidden to specify both LENGTH and ALIGNMENT as 0.
|
|
@returns success
|
|
|
|
ida_bytes.create_byte(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to byte.
|
|
|
|
ida_bytes.create_custdata(ea: ida_idaapi.ea_t, length: "asize_t", dtid: int, fid: int, force: bool = False) -> bool
|
|
Convert to custom data type.
|
|
|
|
ida_bytes.create_data(ea: ida_idaapi.ea_t, dataflag: "flags64_t", size: "asize_t", tid: "tid_t") -> bool
|
|
Convert to data (byte, word, dword, etc). This function may be used to create arrays.
|
|
|
|
@param ea: linear address
|
|
@param dataflag: type of data. Value of function byte_flag(), word_flag(), etc.
|
|
@param size: size of array in bytes. should be divisible by the size of one item of the specified type. for variable sized items it can be specified as 0, and the kernel will try to calculate the size.
|
|
@param tid: type id. If the specified type is a structure, then tid is structure id. Otherwise should be BADNODE.
|
|
@returns success
|
|
|
|
ida_bytes.create_double(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to double.
|
|
|
|
ida_bytes.create_dword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to dword.
|
|
|
|
ida_bytes.create_float(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to float.
|
|
|
|
ida_bytes.create_oword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to octaword/xmm word.
|
|
|
|
ida_bytes.create_packed_real(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to packed decimal real.
|
|
|
|
ida_bytes.create_qword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to quadword.
|
|
|
|
ida_bytes.create_strlit(start: ida_idaapi.ea_t, len: "size_t", strtype: int) -> bool
|
|
Convert to string literal and give a meaningful name. 'start' may be higher than 'end', the kernel will swap them in this case
|
|
|
|
@param start: starting address
|
|
@param len: length of the string in bytes. if 0, then get_max_strlit_length() will be used to determine the length
|
|
@param strtype: string type. one of String type codes
|
|
@returns success
|
|
|
|
ida_bytes.create_struct(ea: ida_idaapi.ea_t, length: "asize_t", tid: "tid_t", force: bool = False) -> bool
|
|
Convert to struct.
|
|
|
|
ida_bytes.create_tbyte(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to tbyte.
|
|
|
|
ida_bytes.create_word(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to word.
|
|
|
|
ida_bytes.create_yword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to ymm word.
|
|
|
|
ida_bytes.create_zword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool
|
|
Convert to zmm word.
|
|
|
|
ida_bytes.cust_flag() -> "flags64_t"
|
|
Get a flags64_t representing custom type data.
|
|
|
|
ida_bytes.custfmt_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.data_format_t
|
|
Information about a data format
|
|
|
|
ida_bytes.data_format_t.__get_id(self) -> int
|
|
|
|
ida_bytes.data_format_t.__init__(self, _self: "PyObject *", name: str, value_size: "asize_t" = 0, menu_name: str = None, props: int = 0, hotkey: str = None, text_width: int = 0)
|
|
|
|
ida_bytes.data_format_t.__init__(self, *args)
|
|
|
|
ida_bytes.data_format_t.hotkey
|
|
Hotkey for the corresponding menu item if nullptr, no hotkey will be associated with the menu item
|
|
|
|
|
|
ida_bytes.data_format_t.is_present_in_menus(self) -> bool
|
|
Should this format be shown in UI menus
|
|
|
|
@returns success
|
|
|
|
ida_bytes.data_format_t.menu_name
|
|
Visible format name to use in menus if nullptr, no menu item will be created
|
|
|
|
|
|
ida_bytes.data_format_t.name
|
|
Format name, must be unique.
|
|
|
|
ida_bytes.data_format_t.props
|
|
properties (currently 0)
|
|
|
|
ida_bytes.data_format_t.text_width
|
|
Usual width of the text representation This value is used to calculate the width of the control to display values of this type
|
|
|
|
|
|
ida_bytes.data_format_t.value_size
|
|
size of the value in bytes 0 means any size is ok data formats that are registered for standard types (dtid 0) may be called with any value_size (instruction operands only)
|
|
|
|
|
|
ida_bytes.data_type_t
|
|
Information about a data type
|
|
|
|
ida_bytes.data_type_t.__get_id(self) -> int
|
|
|
|
ida_bytes.data_type_t.__init__(self, _self: "PyObject *", name: str, value_size: "asize_t" = 0, menu_name: str = None, hotkey: str = None, asm_keyword: str = None, props: int = 0)
|
|
|
|
ida_bytes.data_type_t.__init__(self, *args)
|
|
|
|
ida_bytes.data_type_t.asm_keyword
|
|
keyword to use for this type in the assembly if nullptr, the data type cannot be used in the listing it can still be used in cpuregs window
|
|
|
|
|
|
ida_bytes.data_type_t.hotkey
|
|
Hotkey for the corresponding menu item if nullptr, no hotkey will be associated with the menu item
|
|
|
|
|
|
ida_bytes.data_type_t.is_present_in_menus(self) -> bool
|
|
Should this type be shown in UI menus
|
|
|
|
@returns success
|
|
|
|
ida_bytes.data_type_t.menu_name
|
|
Visible data type name to use in menus if nullptr, no menu item will be created
|
|
|
|
|
|
ida_bytes.data_type_t.name
|
|
name of the data type. must be unique
|
|
|
|
ida_bytes.data_type_t.props
|
|
properties
|
|
|
|
ida_bytes.data_type_t.value_size
|
|
size of the value in bytes
|
|
|
|
ida_bytes.dec_flag() -> "flags64_t"
|
|
Get number flag of the base, regardless of current processor - better to use num_flag()
|
|
|
|
ida_bytes.del_hidden_range(ea: ida_idaapi.ea_t) -> bool
|
|
Delete hidden range.
|
|
|
|
@param ea: any address in the hidden range
|
|
@returns success
|
|
|
|
ida_bytes.del_items(ea: ida_idaapi.ea_t, flags: int = 0, nbytes: "asize_t" = 1, may_destroy: "may_destroy_cb_t *" = None) -> bool
|
|
Convert item (instruction/data) to unexplored bytes. The whole item (including the head and tail bytes) will be destroyed. It is allowed to pass any address in the item to this function
|
|
|
|
@param ea: any address within the first item to delete
|
|
@param flags: combination of Unexplored byte conversion flags
|
|
@param nbytes: number of bytes in the range to be undefined
|
|
@param may_destroy: optional routine invoked before deleting a head item. If callback returns false then item is not to be deleted and operation fails
|
|
@returns true on sucessful operation, otherwise false
|
|
|
|
ida_bytes.del_mapping(ea: ida_idaapi.ea_t) -> None
|
|
Delete memory mapping range.
|
|
|
|
@param ea: any address in the mapped range
|
|
|
|
ida_bytes.del_value(ea: ida_idaapi.ea_t) -> None
|
|
Delete byte value from flags. The corresponding byte becomes uninitialized.
|
|
|
|
|
|
ida_bytes.detach_custom_data_format(dtid: int, dfid: int) -> bool
|
|
Detach the data format from the data type. Unregistering a custom data type detaches all attached data formats, no need to detach them explicitly. You still need unregister them. Unregistering a custom data format detaches it from all attached data types.
|
|
|
|
@param dtid: data type id to detach data format from
|
|
@param dfid: data format id to detach
|
|
@retval true: ok
|
|
@retval false: no such `dtid`, or no such `dfid', or the data format was not attached to the data type
|
|
|
|
ida_bytes.disable_flags(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t) -> "error_t"
|
|
Deallocate flags for address range. Exit with an error message if not enough disk space (this may occur too).
|
|
|
|
@param start_ea: should be lower than end_ea.
|
|
@param end_ea: does not belong to the range.
|
|
@returns 0 if ok, otherwise return error code
|
|
|
|
ida_bytes.double_flag() -> "flags64_t"
|
|
Get a flags64_t representing a double.
|
|
|
|
ida_bytes.dword_flag() -> "flags64_t"
|
|
Get a flags64_t representing a double word.
|
|
|
|
ida_bytes.enable_flags(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, stt: "storage_type_t") -> "error_t"
|
|
Allocate flags for address range. This function does not change the storage type of existing ranges. Exit with an error message if not enough disk space.
|
|
|
|
@param start_ea: should be lower than end_ea.
|
|
@param end_ea: does not belong to the range.
|
|
@param stt: storage_type_t
|
|
@returns 0 if ok, otherwise an error code
|
|
|
|
ida_bytes.enum_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.equal_bytes(ea: ida_idaapi.ea_t, image: "uchar const *", mask: "uchar const *", len: "size_t", bin_search_flags: int) -> bool
|
|
Compare 'len' bytes of the program starting from 'ea' with 'image'.
|
|
|
|
@param ea: linear address
|
|
@param image: bytes to compare with
|
|
@param mask: array of mask bytes, it's length is 'len'. if the flag BIN_SEARCH_BITMASK is passsed, 'bitwise AND' is used to compare. if not; 1 means to perform the comparison of the corresponding byte. 0 means not to perform. if mask == nullptr, then all bytes of 'image' will be compared. if mask == SKIP_FF_MASK then 0xFF bytes will be skipped
|
|
@param len: length of block to compare in bytes.
|
|
@param bin_search_flags: combination of Search flags
|
|
@retval 1: equal
|
|
@retval 0: not equal
|
|
|
|
ida_bytes.f_has_cmt(f: "flags64_t", arg2: "void *") -> bool
|
|
|
|
ida_bytes.f_has_dummy_name(f: "flags64_t", arg2: "void *") -> bool
|
|
Does the current byte have dummy (auto-generated, with special prefix) name?
|
|
|
|
ida_bytes.f_has_extra_cmts(f: "flags64_t", arg2: "void *") -> bool
|
|
|
|
ida_bytes.f_has_name(f: "flags64_t", arg2: "void *") -> bool
|
|
Does the current byte have non-trivial (non-dummy) name?
|
|
|
|
ida_bytes.f_has_user_name(F: "flags64_t", arg2: "void *") -> bool
|
|
Does the current byte have user-specified name?
|
|
|
|
ida_bytes.f_has_xref(f: "flags64_t", arg2: "void *") -> bool
|
|
Does the current byte have cross-references to it?
|
|
|
|
ida_bytes.f_is_align(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_align()
|
|
|
|
ida_bytes.f_is_byte(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_byte()
|
|
|
|
ida_bytes.f_is_code(F: "flags64_t", arg2: "void *") -> bool
|
|
Does flag denote start of an instruction?
|
|
|
|
ida_bytes.f_is_custom(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_custom()
|
|
|
|
ida_bytes.f_is_data(F: "flags64_t", arg2: "void *") -> bool
|
|
Does flag denote start of data?
|
|
|
|
ida_bytes.f_is_double(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_double()
|
|
|
|
ida_bytes.f_is_dword(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_dword()
|
|
|
|
ida_bytes.f_is_float(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_float()
|
|
|
|
ida_bytes.f_is_head(F: "flags64_t", arg2: "void *") -> bool
|
|
Does flag denote start of instruction OR data?
|
|
|
|
ida_bytes.f_is_not_tail(F: "flags64_t", arg2: "void *") -> bool
|
|
Does flag denote tail byte?
|
|
|
|
ida_bytes.f_is_oword(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_oword()
|
|
|
|
ida_bytes.f_is_pack_real(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_pack_real()
|
|
|
|
ida_bytes.f_is_qword(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_qword()
|
|
|
|
ida_bytes.f_is_strlit(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_strlit()
|
|
|
|
ida_bytes.f_is_struct(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_struct()
|
|
|
|
ida_bytes.f_is_tail(F: "flags64_t", arg2: "void *") -> bool
|
|
Does flag denote tail byte?
|
|
|
|
ida_bytes.f_is_tbyte(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_tbyte()
|
|
|
|
ida_bytes.f_is_word(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_word()
|
|
|
|
ida_bytes.f_is_yword(F: "flags64_t", arg2: "void *") -> bool
|
|
See is_yword()
|
|
|
|
ida_bytes.find_byte(sEA: ida_idaapi.ea_t, size: "asize_t", value: "uchar", bin_search_flags: int) -> ida_idaapi.ea_t
|
|
Find forward a byte with the specified value (only 8-bit value from the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6
|
|
|
|
@param sEA: linear address
|
|
@param size: number of bytes to inspect
|
|
@param value: value to find
|
|
@param bin_search_flags: combination of Search flags
|
|
@returns address of byte or BADADDR
|
|
|
|
ida_bytes.find_byter(sEA: ida_idaapi.ea_t, size: "asize_t", value: "uchar", bin_search_flags: int) -> ida_idaapi.ea_t
|
|
Find reverse a byte with the specified value (only 8-bit value from the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4
|
|
|
|
@param sEA: the lower address of the search range
|
|
@param size: number of bytes to inspect
|
|
@param value: value to find
|
|
@param bin_search_flags: combination of Search flags
|
|
@returns address of byte or BADADDR
|
|
|
|
ida_bytes.find_bytes(bs: typing.Union[bytes, bytearray, str], range_start: int, range_size: typing.Optional[int] = None, range_end: typing.Optional[int] = ida_idaapi.BADADDR, mask: typing.Optional[typing.Union[bytes, bytearray]] = None, flags: typing.Optional[int] = BIN_SEARCH_FORWARD|BIN_SEARCH_NOSHOW, radix: typing.Optional[int] = 16, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU) -> int
|
|
|
|
ida_bytes.find_custom_data_format(name: str) -> int
|
|
Get id of a custom data format.
|
|
|
|
@param name: name of the custom data format
|
|
@returns id or -1
|
|
|
|
ida_bytes.find_custom_data_type(name: str) -> int
|
|
Get id of a custom data type.
|
|
|
|
@param name: name of the custom data type
|
|
@returns id or -1
|
|
|
|
ida_bytes.find_free_chunk(start: ida_idaapi.ea_t, size: "asize_t", alignment: "asize_t") -> ida_idaapi.ea_t
|
|
Search for a hole in the addressing space of the program.
|
|
|
|
@param start: Address to start searching from
|
|
@param size: Size of the desired empty range
|
|
@param alignment: Alignment bitmask, must be a pow2-1. (for example, 0xF would align the returned range to 16 bytes).
|
|
@returns Start of the found empty range or BADADDR
|
|
|
|
ida_bytes.find_string(_str: str, range_start: int, range_end: typing.Optional[int] = ida_idaapi.BADADDR, range_size: typing.Optional[int] = None, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU, flags: typing.Optional[int] = BIN_SEARCH_FORWARD|BIN_SEARCH_NOSHOW) -> int
|
|
|
|
ida_bytes.float_flag() -> "flags64_t"
|
|
Get a flags64_t representing a float.
|
|
|
|
ida_bytes.flt_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.get_16bit(ea: ida_idaapi.ea_t) -> int
|
|
Get 16bits of the program at 'ea'.
|
|
|
|
@returns 1 byte (getFullByte()) if the current processor has 16-bit byte, otherwise return get_word()
|
|
|
|
ida_bytes.get_32bit(ea: ida_idaapi.ea_t) -> int
|
|
Get not more than 32bits of the program at 'ea'.
|
|
|
|
@returns 32 bit value, depending on processor_t::nbits:
|
|
* if ( nbits <= 8 ) return get_dword(ea);
|
|
* if ( nbits <= 16) return get_wide_word(ea);
|
|
* return get_wide_byte(ea);
|
|
|
|
ida_bytes.get_64bit(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get not more than 64bits of the program at 'ea'.
|
|
|
|
@returns 64 bit value, depending on processor_t::nbits:
|
|
* if ( nbits <= 8 ) return get_qword(ea);
|
|
* if ( nbits <= 16) return get_wide_dword(ea);
|
|
* return get_wide_byte(ea);
|
|
|
|
ida_bytes.get_byte(ea: ida_idaapi.ea_t) -> "uchar"
|
|
Get one byte (8-bit) of the program at 'ea'. This function works only for 8bit byte processors.
|
|
|
|
|
|
ida_bytes.get_bytes(ea: ida_idaapi.ea_t, size: int, gmb_flags: int = GMB_READALL)
|
|
Get the specified number of bytes of the program.
|
|
|
|
@param ea: program address
|
|
@param size: number of bytes to return
|
|
@param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL)
|
|
@return: the bytes (as bytes object), or None in case of failure
|
|
|
|
ida_bytes.get_bytes_and_mask(ea: ida_idaapi.ea_t, size: int, gmb_flags: int = GMB_READALL)
|
|
Get the specified number of bytes of the program, and a bitmask
|
|
specifying what bytes are defined and what bytes are not.
|
|
|
|
@param ea: program address
|
|
@param size: number of bytes to return
|
|
@param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL)
|
|
@return: a tuple (bytes, mask), or None in case of failure.
|
|
Both 'bytes' and 'mask' are 'str' instances.
|
|
|
|
ida_bytes.get_cmt(ea: ida_idaapi.ea_t, rptble: bool) -> str
|
|
Get an indented comment.
|
|
|
|
@param ea: linear address. may point to tail byte, the function will find start of the item
|
|
@param rptble: get repeatable comment?
|
|
@returns size of comment or -1
|
|
|
|
ida_bytes.get_custom_data_format(dfid: int) -> "data_format_t const *"
|
|
Get definition of a registered custom data format.
|
|
|
|
@param dfid: data format id
|
|
@returns data format definition or nullptr
|
|
|
|
ida_bytes.get_custom_data_formats(out: "intvec_t *", dtid: int) -> int
|
|
Get list of attached custom data formats for the specified data type.
|
|
|
|
@param out: buffer for the output. may be nullptr
|
|
@param dtid: data type id
|
|
@returns number of returned custom data formats. if error, returns -1
|
|
|
|
ida_bytes.get_custom_data_type(dtid: int) -> "data_type_t const *"
|
|
Get definition of a registered custom data type.
|
|
|
|
@param dtid: data type id
|
|
@returns data type definition or nullptr
|
|
|
|
ida_bytes.get_custom_data_types(*args) -> int
|
|
Get list of registered custom data type ids.
|
|
|
|
@param out: buffer for the output. may be nullptr
|
|
@param min_size: minimum value size
|
|
@param max_size: maximum value size
|
|
@returns number of custom data types with the specified size limits
|
|
|
|
ida_bytes.get_data_elsize(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = None) -> "asize_t"
|
|
Get size of data type specified in flags 'F'.
|
|
|
|
@param ea: linear address of the item
|
|
@param F: flags
|
|
@param ti: additional information about the data type. For example, if the current item is a structure instance, then ti->tid is structure id. Otherwise is ignored (may be nullptr). If specified as nullptr, will be automatically retrieved from the database
|
|
@returns * byte : 1
|
|
* word : 2
|
|
* etc...
|
|
|
|
ida_bytes.get_data_value(v: "uval_t *", ea: ida_idaapi.ea_t, size: "asize_t") -> bool
|
|
Get the value at of the item at 'ea'. This function works with entities up to sizeof(ea_t) (bytes, word, etc)
|
|
|
|
@param v: pointer to the result. may be nullptr
|
|
@param ea: linear address
|
|
@param size: size of data to read. If 0, then the item type at 'ea' will be used
|
|
@returns success
|
|
|
|
ida_bytes.get_db_byte(ea: ida_idaapi.ea_t) -> "uchar"
|
|
Get one byte (8-bit) of the program at 'ea' from the database. Works even if the debugger is active. See also get_dbg_byte() to read the process memory directly. This function works only for 8bit byte processors.
|
|
|
|
|
|
ida_bytes.get_default_radix() -> int
|
|
Get default base of number for the current processor.
|
|
|
|
@returns 2, 8, 10, 16
|
|
|
|
ida_bytes.get_dword(ea: ida_idaapi.ea_t) -> int
|
|
Get one dword (32-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors.
|
|
|
|
|
|
ida_bytes.get_enum_id(ea: ida_idaapi.ea_t, n: int) -> "uchar *"
|
|
Get enum id of 'enum' operand.
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands
|
|
@returns id of enum or BADNODE
|
|
|
|
ida_bytes.get_first_hidden_range() -> "hidden_range_t *"
|
|
Get pointer to the first hidden range.
|
|
|
|
@returns ptr to hidden range or nullptr
|
|
|
|
ida_bytes.get_flags(ea: ida_idaapi.ea_t) -> "flags64_t"
|
|
get flags with FF_IVL & MS_VAL. It is much slower under remote debugging because the kernel needs to read the process memory.
|
|
|
|
|
|
ida_bytes.get_flags_by_size(size: "size_t") -> "flags64_t"
|
|
Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. For other sizes returns 0
|
|
|
|
|
|
ida_bytes.get_flags_ex(ea: ida_idaapi.ea_t, how: int) -> "flags64_t"
|
|
Get flags for the specified address, extended form.
|
|
|
|
ida_bytes.get_forced_operand(ea: ida_idaapi.ea_t, n: int) -> str
|
|
Get forced operand.
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number
|
|
@returns size of forced operand or -1
|
|
|
|
ida_bytes.get_full_data_elsize(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = None) -> "asize_t"
|
|
Get full size of data type specified in flags 'F'. takes into account processors with wide bytes e.g. returns 2 for a byte element with 16-bit bytes
|
|
|
|
|
|
ida_bytes.get_full_flags(ea: ida_idaapi.ea_t) -> "flags64_t"
|
|
Get flags value for address 'ea'.
|
|
|
|
@returns 0 if address is not present in the program
|
|
|
|
ida_bytes.get_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *"
|
|
Get pointer to hidden range structure, in: linear address.
|
|
|
|
@param ea: any address in the hidden range
|
|
|
|
ida_bytes.get_hidden_range_num(ea: ida_idaapi.ea_t) -> int
|
|
Get number of a hidden range.
|
|
|
|
@param ea: any address in the hidden range
|
|
@returns number of hidden range (0..get_hidden_range_qty()-1)
|
|
|
|
ida_bytes.get_hidden_range_qty() -> int
|
|
Get number of hidden ranges.
|
|
|
|
ida_bytes.get_item_end(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get the end address of the item at 'ea'. The returned address doesn't belong to the current item. Unexplored bytes are counted as 1 byte entities.
|
|
|
|
|
|
ida_bytes.get_item_flag(_from: ida_idaapi.ea_t, n: int, ea: ida_idaapi.ea_t, appzero: bool) -> "flags64_t"
|
|
Get flag of the item at 'ea' even if it is a tail byte of some array or structure. This function is used to get flags of structure members or array elements.
|
|
|
|
@param n: operand number which refers to 'ea' or OPND_ALL for one of the operands
|
|
@param ea: the referenced address
|
|
@param appzero: append a struct field name if the field offset is zero? meaningful only if the name refers to a structure.
|
|
@returns flags or 0 (if failed)
|
|
|
|
ida_bytes.get_item_head(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get the start address of the item at 'ea'. If there is no current item, then 'ea' will be returned (see definition at the end of bytes.hpp source)
|
|
|
|
|
|
ida_bytes.get_item_refinfo(ri: "refinfo_t", ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Get refinfo of the item at 'ea'. This function works for a regular offset operand as well as for a tail byte of a structure variable (in this case refinfo to corresponding structure member will be returned)
|
|
|
|
@param ri: refinfo holder
|
|
@param ea: the item address
|
|
@param n: operand number which refers to 'ea' or OPND_ALL for one of the operands
|
|
@returns success
|
|
|
|
ida_bytes.get_item_size(ea: ida_idaapi.ea_t) -> "asize_t"
|
|
Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 byte. This function returns 0 only for BADADDR.
|
|
|
|
|
|
ida_bytes.get_last_hidden_range() -> "hidden_range_t *"
|
|
Get pointer to the last hidden range.
|
|
|
|
@returns ptr to hidden range or nullptr
|
|
|
|
ida_bytes.get_manual_insn(ea: ida_idaapi.ea_t) -> str
|
|
Retrieve the user-specified string for the manual instruction.
|
|
|
|
@param ea: linear address of the instruction or data item
|
|
@returns size of manual instruction or -1
|
|
|
|
ida_bytes.get_mapping(n: "size_t") -> "ea_t *, ea_t *, asize_t *"
|
|
Get memory mapping range by its number.
|
|
|
|
@param n: number of mapping range (0..get_mappings_qty()-1)
|
|
@returns false if the specified range doesn't exist, otherwise returns `from`, `to`, `size`
|
|
|
|
ida_bytes.get_mappings_qty() -> "size_t"
|
|
Get number of mappings.
|
|
|
|
ida_bytes.get_max_strlit_length(ea: ida_idaapi.ea_t, strtype: int, options: int = 0) -> "size_t"
|
|
Determine maximum length of string literal.
|
|
If the string literal has a length prefix (e.g., STRTYPE_LEN2 has a two-byte length prefix), the length of that prefix (i.e., 2) will be part of the returned value.
|
|
|
|
@param ea: starting address
|
|
@param strtype: string type. one of String type codes
|
|
@param options: combination of string literal length options
|
|
@returns length of the string in octets (octet==8bit)
|
|
|
|
ida_bytes.get_next_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *"
|
|
Get pointer to next hidden range.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to hidden range or nullptr if next hidden range doesn't exist
|
|
|
|
ida_bytes.get_octet(ogen: "octet_generator_t") -> "uchar *"
|
|
|
|
ida_bytes.get_operand_flag(typebits: "uint8", n: int) -> "flags64_t"
|
|
Place operand `n`'s type flag in the right nibble of a 64-bit flags set.
|
|
|
|
@param typebits: the type bits (one of `FF_N_`)
|
|
@param n: the operand number
|
|
@returns the shift to the nibble
|
|
|
|
ida_bytes.get_operand_type_shift(n: int) -> int
|
|
Get the shift in `flags64_t` for the nibble representing operand `n`'s type
|
|
Note: n must be < UA_MAXOP, and is not checked
|
|
|
|
@param n: the operand number
|
|
@returns the shift to the nibble
|
|
|
|
ida_bytes.get_opinfo(buf: "opinfo_t", ea: ida_idaapi.ea_t, n: int, flags: "flags64_t") -> "opinfo_t *"
|
|
Get additional information about an operand representation.
|
|
|
|
@param buf: buffer to receive the result. may not be nullptr
|
|
@param ea: linear address of item
|
|
@param n: number of operand, 0 or 1
|
|
@param flags: flags of the item
|
|
@returns nullptr if no additional representation information
|
|
|
|
ida_bytes.get_optype_flags0(F: "flags64_t") -> "flags64_t"
|
|
Get flags for first operand.
|
|
|
|
ida_bytes.get_optype_flags1(F: "flags64_t") -> "flags64_t"
|
|
Get flags for second operand.
|
|
|
|
ida_bytes.get_original_byte(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get original byte value (that was before patching). This function works for wide byte processors too.
|
|
|
|
|
|
ida_bytes.get_original_dword(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get original dword (that was before patching) This function works for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
|
|
ida_bytes.get_original_qword(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get original qword value (that was before patching) This function DOESN'T work for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
|
|
ida_bytes.get_original_word(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get original word value (that was before patching). This function works for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
|
|
ida_bytes.get_possible_item_varsize(ea: ida_idaapi.ea_t, tif: "tinfo_t") -> "asize_t"
|
|
Return the possible size of the item at EA of type TIF if TIF is the variable structure.
|
|
|
|
@param ea: the linear address of the item
|
|
@param tif: the item type
|
|
@returns the possible size
|
|
@retval asize_t(-1): TIF is not a variable structure
|
|
|
|
ida_bytes.get_predef_insn_cmt(ins: "insn_t const &") -> str
|
|
Get predefined comment.
|
|
|
|
@param ins: current instruction information
|
|
@returns size of comment or -1
|
|
|
|
ida_bytes.get_prev_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *"
|
|
Get pointer to previous hidden range.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to hidden range or nullptr if previous hidden range doesn't exist
|
|
|
|
ida_bytes.get_qword(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get one qword (64-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors.
|
|
|
|
|
|
ida_bytes.get_radix(F: "flags64_t", n: int) -> int
|
|
Get radix of the operand, in: flags. If the operand is not a number, returns get_default_radix()
|
|
|
|
@param F: flags
|
|
@param n: number of operand (0, 1, -1)
|
|
@returns 2, 8, 10, 16
|
|
|
|
ida_bytes.get_strlit_contents(ea: ida_idaapi.ea_t, len: int, type: int, flags: int = 0)
|
|
Get contents of string literal, as UTF-8-encoded codepoints.
|
|
It works even if the string has not been created in the database yet.
|
|
|
|
Note that the returned value will be of type 'bytes'; if
|
|
you want auto-conversion to unicode strings (that is: real Python
|
|
strings), you should probably be using the idautils.Strings class.
|
|
|
|
@param ea: linear address of the string
|
|
@param len: length of the string in bytes (including terminating 0)
|
|
@param type: type of the string. Represents both the character encoding,
|
|
<u>and</u> the 'type' of string at the given location.
|
|
@param flags: combination of STRCONV_..., to perform output conversion.
|
|
@return: a bytes-filled str object.
|
|
|
|
ida_bytes.get_stroff_path(*args)
|
|
Get the structure offset path for operand `n`, at the
|
|
specified address.
|
|
|
|
This function has the following signatures:
|
|
|
|
1. get_stroff_path(ea: ida_idaapi.ea_t, n : int) -> Tuple[List[int], int]
|
|
2. get_stroff_path(path: tid_array, delta: sval_pointer, ea: ida_idaapi.ea_t, n : int) (backward-compatibility only)
|
|
|
|
@param ea address where the operand holds a path to a structure offset (1st form)
|
|
@param n operand number (1st form)
|
|
@return a tuple holding a (list_of_tid_t's, delta_within_the_last_type), or (None, None)
|
|
|
|
ida_bytes.get_wide_byte(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get one wide byte of the program at 'ea'. Some processors may access more than 8bit quantity at an address. These processors have 32-bit byte organization from the IDA's point of view.
|
|
|
|
|
|
ida_bytes.get_wide_dword(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get two wide words (4 'bytes') of the program at 'ea'. Some processors may access more than 8bit quantity at an address. These processors have 32-bit byte organization from the IDA's point of view. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
|
|
ida_bytes.get_wide_word(ea: ida_idaapi.ea_t) -> "uint64"
|
|
Get one wide word (2 'byte') of the program at 'ea'. Some processors may access more than 8bit quantity at an address. These processors have 32-bit byte organization from the IDA's point of view. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
|
|
ida_bytes.get_word(ea: ida_idaapi.ea_t) -> "ushort"
|
|
Get one word (16-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors.
|
|
|
|
|
|
ida_bytes.get_zero_ranges(zranges: "rangeset_t", range: "range_t") -> bool
|
|
Return set of ranges with zero initialized bytes. The returned set includes only big zero initialized ranges (at least >1KB). Some zero initialized byte ranges may be not included. Only zero bytes that use the sparse storage method (STT_MM) are reported.
|
|
|
|
@param zranges: pointer to the return value. cannot be nullptr
|
|
@param range: the range of addresses to verify. can be nullptr - means all ranges
|
|
@returns true if the result is a non-empty set
|
|
|
|
ida_bytes.getn_hidden_range(n: int) -> "hidden_range_t *"
|
|
Get pointer to hidden range structure, in: number of hidden range.
|
|
|
|
@param n: number of hidden range, is in range 0..get_hidden_range_qty()-1
|
|
|
|
ida_bytes.has_any_name(F: "flags64_t") -> bool
|
|
Does the current byte have any name?
|
|
|
|
ida_bytes.has_auto_name(F: "flags64_t") -> bool
|
|
Does the current byte have auto-generated (no special prefix) name?
|
|
|
|
ida_bytes.has_cmt(F: "flags64_t") -> bool
|
|
Does the current byte have an indented comment?
|
|
|
|
ida_bytes.has_dummy_name(F: "flags64_t") -> bool
|
|
Does the current byte have dummy (auto-generated, with special prefix) name?
|
|
|
|
ida_bytes.has_extra_cmts(F: "flags64_t") -> bool
|
|
Does the current byte have additional anterior or posterior lines?
|
|
|
|
ida_bytes.has_immd(F: "flags64_t") -> bool
|
|
Has immediate value?
|
|
|
|
ida_bytes.has_name(F: "flags64_t") -> bool
|
|
Does the current byte have non-trivial (non-dummy) name?
|
|
|
|
ida_bytes.has_user_name(F: "flags64_t") -> bool
|
|
Does the current byte have user-specified name?
|
|
|
|
ida_bytes.has_value(F: "flags64_t") -> bool
|
|
Do flags contain byte value?
|
|
|
|
ida_bytes.has_xref(F: "flags64_t") -> bool
|
|
Does the current byte have cross-references to it?
|
|
|
|
ida_bytes.hex_flag() -> "flags64_t"
|
|
Get number flag of the base, regardless of current processor - better to use num_flag()
|
|
|
|
ida_bytes.hidden_range_t
|
|
|
|
ida_bytes.hidden_range_t.__init__(self)
|
|
|
|
ida_bytes.hidden_range_t.color
|
|
range color
|
|
|
|
ida_bytes.hidden_range_t.description
|
|
description to display if the range is collapsed
|
|
|
|
ida_bytes.hidden_range_t.footer
|
|
footer lines to display if the range is expanded
|
|
|
|
ida_bytes.hidden_range_t.header
|
|
header lines to display if the range is expanded
|
|
|
|
ida_bytes.hidden_range_t.visible
|
|
the range state
|
|
|
|
ida_bytes.is_align(F: "flags64_t") -> bool
|
|
FF_ALIGN
|
|
|
|
ida_bytes.is_attached_custom_data_format(dtid: int, dfid: int) -> bool
|
|
Is the custom data format attached to the custom data type?
|
|
|
|
@param dtid: data type id
|
|
@param dfid: data format id
|
|
@returns true or false
|
|
|
|
ida_bytes.is_bnot(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool
|
|
Should we negate the operand?. asm_t::a_bnot should be defined in the idp module in order to work with this function
|
|
|
|
|
|
ida_bytes.is_byte(F: "flags64_t") -> bool
|
|
FF_BYTE
|
|
|
|
ida_bytes.is_char(F: "flags64_t", n: int) -> bool
|
|
is character constant?
|
|
|
|
ida_bytes.is_char0(F: "flags64_t") -> bool
|
|
Is the first operand character constant? (example: push 'a')
|
|
|
|
ida_bytes.is_char1(F: "flags64_t") -> bool
|
|
Is the second operand character constant? (example: mov al, 'a')
|
|
|
|
ida_bytes.is_code(F: "flags64_t") -> bool
|
|
Does flag denote start of an instruction?
|
|
|
|
ida_bytes.is_custfmt(F: "flags64_t", n: int) -> bool
|
|
is custom data format?
|
|
|
|
ida_bytes.is_custfmt0(F: "flags64_t") -> bool
|
|
Does the first operand use a custom data representation?
|
|
|
|
ida_bytes.is_custfmt1(F: "flags64_t") -> bool
|
|
Does the second operand use a custom data representation?
|
|
|
|
ida_bytes.is_custom(F: "flags64_t") -> bool
|
|
FF_CUSTOM
|
|
|
|
ida_bytes.is_data(F: "flags64_t") -> bool
|
|
Does flag denote start of data?
|
|
|
|
ida_bytes.is_defarg(F: "flags64_t", n: int) -> bool
|
|
is defined?
|
|
|
|
ida_bytes.is_defarg0(F: "flags64_t") -> bool
|
|
Is the first operand defined? Initially operand has no defined representation.
|
|
|
|
ida_bytes.is_defarg1(F: "flags64_t") -> bool
|
|
Is the second operand defined? Initially operand has no defined representation.
|
|
|
|
ida_bytes.is_double(F: "flags64_t") -> bool
|
|
FF_DOUBLE
|
|
|
|
ida_bytes.is_dword(F: "flags64_t") -> bool
|
|
FF_DWORD
|
|
|
|
ida_bytes.is_enum(F: "flags64_t", n: int) -> bool
|
|
is enum?
|
|
|
|
ida_bytes.is_enum0(F: "flags64_t") -> bool
|
|
Is the first operand a symbolic constant (enum member)?
|
|
|
|
ida_bytes.is_enum1(F: "flags64_t") -> bool
|
|
Is the second operand a symbolic constant (enum member)?
|
|
|
|
ida_bytes.is_flag_for_operand(F: "flags64_t", typebits: "uint8", n: int) -> bool
|
|
Check that the 64-bit flags set has the expected type for operand `n`.
|
|
|
|
@param F: the flags
|
|
@param typebits: the type bits (one of `FF_N_`)
|
|
@param n: the operand number
|
|
@returns success
|
|
|
|
ida_bytes.is_float(F: "flags64_t") -> bool
|
|
FF_FLOAT
|
|
|
|
ida_bytes.is_float0(F: "flags64_t") -> bool
|
|
Is the first operand a floating point number?
|
|
|
|
ida_bytes.is_float1(F: "flags64_t") -> bool
|
|
Is the second operand a floating point number?
|
|
|
|
ida_bytes.is_flow(F: "flags64_t") -> bool
|
|
Does the previous instruction exist and pass execution flow to the current byte?
|
|
|
|
ida_bytes.is_fltnum(F: "flags64_t", n: int) -> bool
|
|
is floating point number?
|
|
|
|
ida_bytes.is_forced_operand(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Is operand manually defined?.
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number
|
|
|
|
ida_bytes.is_func(F: "flags64_t") -> bool
|
|
Is function start?
|
|
|
|
ida_bytes.is_head(F: "flags64_t") -> bool
|
|
Does flag denote start of instruction OR data?
|
|
|
|
ida_bytes.is_invsign(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool
|
|
Should sign of n-th operand inverted during output?. allowed values of n: 0-first operand, 1-other operands
|
|
|
|
|
|
ida_bytes.is_loaded(ea: ida_idaapi.ea_t) -> bool
|
|
Does the specified address have a byte value (is initialized?)
|
|
|
|
ida_bytes.is_lzero(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Display leading zeroes? Display leading zeroes in operands. The global switch for the leading zeroes is in idainfo::s_genflags Note: the leading zeroes doesn't work if for the target assembler octal numbers start with 0.
|
|
|
|
@param ea: the item (insn/data) address
|
|
@param n: the operand number (0-first operand, 1-other operands)
|
|
@returns success
|
|
|
|
ida_bytes.is_manual(F: "flags64_t", n: int) -> bool
|
|
is forced operand? (use is_forced_operand())
|
|
|
|
ida_bytes.is_manual_insn(ea: ida_idaapi.ea_t) -> bool
|
|
Is the instruction overridden?
|
|
|
|
@param ea: linear address of the instruction or data item
|
|
|
|
ida_bytes.is_mapped(ea: ida_idaapi.ea_t) -> bool
|
|
Is the specified address 'ea' present in the program?
|
|
|
|
ida_bytes.is_not_tail(F: "flags64_t") -> bool
|
|
Does flag denote tail byte?
|
|
|
|
ida_bytes.is_numop(F: "flags64_t", n: int) -> bool
|
|
is number (bin, oct, dec, hex)?
|
|
|
|
ida_bytes.is_numop0(F: "flags64_t") -> bool
|
|
Is the first operand a number (i.e. binary, octal, decimal or hex?)
|
|
|
|
ida_bytes.is_numop1(F: "flags64_t") -> bool
|
|
Is the second operand a number (i.e. binary, octal, decimal or hex?)
|
|
|
|
ida_bytes.is_off(F: "flags64_t", n: int) -> bool
|
|
is offset?
|
|
|
|
ida_bytes.is_off0(F: "flags64_t") -> bool
|
|
Is the first operand offset? (example: push offset xxx)
|
|
|
|
ida_bytes.is_off1(F: "flags64_t") -> bool
|
|
Is the second operand offset? (example: mov ax, offset xxx)
|
|
|
|
ida_bytes.is_oword(F: "flags64_t") -> bool
|
|
FF_OWORD
|
|
|
|
ida_bytes.is_pack_real(F: "flags64_t") -> bool
|
|
FF_PACKREAL
|
|
|
|
ida_bytes.is_qword(F: "flags64_t") -> bool
|
|
FF_QWORD
|
|
|
|
ida_bytes.is_same_data_type(F1: "flags64_t", F2: "flags64_t") -> bool
|
|
Do the given flags specify the same data type?
|
|
|
|
ida_bytes.is_seg(F: "flags64_t", n: int) -> bool
|
|
is segment?
|
|
|
|
ida_bytes.is_seg0(F: "flags64_t") -> bool
|
|
Is the first operand segment selector? (example: push seg seg001)
|
|
|
|
ida_bytes.is_seg1(F: "flags64_t") -> bool
|
|
Is the second operand segment selector? (example: mov dx, seg dseg)
|
|
|
|
ida_bytes.is_stkvar(F: "flags64_t", n: int) -> bool
|
|
is stack variable?
|
|
|
|
ida_bytes.is_stkvar0(F: "flags64_t") -> bool
|
|
Is the first operand a stack variable?
|
|
|
|
ida_bytes.is_stkvar1(F: "flags64_t") -> bool
|
|
Is the second operand a stack variable?
|
|
|
|
ida_bytes.is_strlit(F: "flags64_t") -> bool
|
|
FF_STRLIT
|
|
|
|
ida_bytes.is_stroff(F: "flags64_t", n: int) -> bool
|
|
is struct offset?
|
|
|
|
ida_bytes.is_stroff0(F: "flags64_t") -> bool
|
|
Is the first operand an offset within a struct?
|
|
|
|
ida_bytes.is_stroff1(F: "flags64_t") -> bool
|
|
Is the second operand an offset within a struct?
|
|
|
|
ida_bytes.is_struct(F: "flags64_t") -> bool
|
|
FF_STRUCT
|
|
|
|
ida_bytes.is_suspop(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool
|
|
is suspicious operand?
|
|
|
|
ida_bytes.is_tail(F: "flags64_t") -> bool
|
|
Does flag denote tail byte?
|
|
|
|
ida_bytes.is_tbyte(F: "flags64_t") -> bool
|
|
FF_TBYTE
|
|
|
|
ida_bytes.is_unknown(F: "flags64_t") -> bool
|
|
Does flag denote unexplored byte?
|
|
|
|
ida_bytes.is_varsize_item(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = None, itemsize: "asize_t *" = None) -> int
|
|
Is the item at 'ea' variable size?.
|
|
|
|
@param ea: linear address of the item
|
|
@param F: flags
|
|
@param ti: additional information about the data type. For example, if the current item is a structure instance, then ti->tid is structure id. Otherwise is ignored (may be nullptr). If specified as nullptr, will be automatically retrieved from the database
|
|
@param itemsize: if not nullptr and the item is varsize, itemsize will contain the calculated item size (for struct types, the minimal size is returned)
|
|
@retval 1: varsize item
|
|
@retval 0: fixed item
|
|
@retval -1: error (bad data definition)
|
|
|
|
ida_bytes.is_word(F: "flags64_t") -> bool
|
|
FF_WORD
|
|
|
|
ida_bytes.is_yword(F: "flags64_t") -> bool
|
|
FF_YWORD
|
|
|
|
ida_bytes.is_zword(F: "flags64_t") -> bool
|
|
FF_ZWORD
|
|
|
|
ida_bytes.leading_zero_important(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Check if leading zeroes are important.
|
|
|
|
ida_bytes.nbits(ea: ida_idaapi.ea_t) -> int
|
|
Get number of bits in a byte at the given address.
|
|
|
|
@returns processor_t::dnbits() if the address doesn't belong to a segment, otherwise the result depends on the segment type
|
|
|
|
ida_bytes.next_addr(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get next address in the program (i.e. next address which has flags).
|
|
|
|
@returns BADADDR if no such address exist.
|
|
|
|
ida_bytes.next_chunk(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get the first address of next contiguous chunk in the program.
|
|
|
|
@returns BADADDR if next chunk doesn't exist.
|
|
|
|
ida_bytes.next_head(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get start of next defined item.
|
|
|
|
@param ea: begin search at this address
|
|
@param maxea: not included in the search range
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.next_inited(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Find the next initialized address.
|
|
|
|
ida_bytes.next_not_tail(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get address of next non-tail byte.
|
|
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.next_that(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t, testf: "testf_t *") -> ida_idaapi.ea_t
|
|
Find next address with a flag satisfying the function 'testf'.
|
|
|
|
@param ea: start searching at this address + 1
|
|
@param maxea: not included in the search range.
|
|
@param testf: test function to find next address
|
|
@returns the found address or BADADDR.
|
|
|
|
ida_bytes.next_unknown(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Similar to next_that(), but will find the next address that is unexplored.
|
|
|
|
ida_bytes.next_visea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get next visible address.
|
|
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.num_flag() -> "flags64_t"
|
|
Get number of default base (bin, oct, dec, hex)
|
|
|
|
|
|
ida_bytes.oct_flag() -> "flags64_t"
|
|
Get number flag of the base, regardless of current processor - better to use num_flag()
|
|
|
|
ida_bytes.octet_generator_t
|
|
|
|
ida_bytes.octet_generator_t.__init__(self, _ea: ida_idaapi.ea_t)
|
|
|
|
ida_bytes.octet_generator_t.invert_byte_order(self) -> None
|
|
|
|
ida_bytes.off_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.op_adds_xrefs(F: "flags64_t", n: int) -> bool
|
|
Should processor module create xrefs from the operand?. Currently 'offset' and 'structure offset' operands create xrefs
|
|
|
|
|
|
ida_bytes.op_based_stroff(insn: "insn_t const &", n: int, opval: "adiff_t", base: ida_idaapi.ea_t) -> bool
|
|
Set operand representation to be 'struct offset' if the operand likely points to a structure member. For example, let's there is a structure at 1000 1000 stru_1000 Elf32_Sym <...> the operand #8 will be represented as '#Elf32_Sym.st_size' after the call of 'op_based_stroff(..., 8, 0x1000)' By the way, after the call of 'op_plain_offset(..., 0x1000)' it will be represented as '#(stru_1000.st_size - 0x1000)'
|
|
|
|
@param insn: the instruction
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@param opval: operand value (usually op_t::value or op_t::addr)
|
|
@param base: base reference
|
|
@returns success
|
|
|
|
ida_bytes.op_bin(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to bin_flag()
|
|
|
|
ida_bytes.op_chr(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to char_flag()
|
|
|
|
ida_bytes.op_custfmt(ea: ida_idaapi.ea_t, n: int, fid: int) -> bool
|
|
Set custom data format for operand (fid-custom data format id)
|
|
|
|
ida_bytes.op_dec(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to dec_flag()
|
|
|
|
ida_bytes.op_enum(ea: ida_idaapi.ea_t, n: int, id: "tid_t", serial: "uchar" = 0) -> bool
|
|
Set operand representation to be enum type If applied to unexplored bytes, converts them to 16/32bit word data
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@param id: id of enum
|
|
@param serial: the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several constants with the same value
|
|
@returns success
|
|
|
|
ida_bytes.op_flt(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to flt_flag()
|
|
|
|
ida_bytes.op_hex(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to hex_flag()
|
|
|
|
ida_bytes.op_num(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to num_flag()
|
|
|
|
ida_bytes.op_oct(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
set op type to oct_flag()
|
|
|
|
ida_bytes.op_seg(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Set operand representation to be 'segment'. If applied to unexplored bytes, converts them to 16/32bit word data
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@returns success
|
|
|
|
ida_bytes.op_stkvar(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Set operand representation to be 'stack variable'. Should be applied to an instruction within a function. Should be applied after creating a stack var using insn_t::create_stkvar().
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@returns success
|
|
|
|
ida_bytes.op_stroff(*args) -> bool
|
|
Set operand representation to be 'struct offset'.
|
|
|
|
This function has the following signatures:
|
|
|
|
1. op_stroff(ins: ida_ua.insn_t, n: int, path: List[int], delta: int)
|
|
2. op_stroff(ins: ida_ua.insn_t, n: int, path: ida_pro.tid_array, path_len: int, delta: int) (backward-compatibility only)
|
|
|
|
Here is an example using this function:
|
|
|
|
ins = ida_ua.insn_t()
|
|
if ida_ua.decode_insn(ins, some_address):
|
|
operand = 0
|
|
path = [ida_typeinf.get_named_type_tid("my_stucture_t")] # a one-element path
|
|
ida_bytes.op_stroff(ins, operand, path, 0)
|
|
|
|
ida_bytes.oword_flag() -> "flags64_t"
|
|
Get a flags64_t representing a octaword.
|
|
|
|
ida_bytes.packreal_flag() -> "flags64_t"
|
|
Get a flags64_t representing a packed decimal real.
|
|
|
|
ida_bytes.parse_binpat_str(out: "compiled_binpat_vec_t", ea: ida_idaapi.ea_t, _in: str, radix: int, strlits_encoding: int = 0) -> bool
|
|
Convert user-specified binary string to internal representation. The 'in' parameter contains space-separated tokens:
|
|
numbers (numeric base is determined by 'radix')
|
|
- if value of number fits a byte, it is considered as a byte
|
|
- if value of number fits a word, it is considered as 2 bytes
|
|
- if value of number fits a dword,it is considered as 4 bytes
|
|
"..." string constants
|
|
'x' single-character constants
|
|
? variable bytes
|
|
|
|
|
|
Note that string constants are surrounded with double quotes.
|
|
Here are a few examples (assuming base 16):
|
|
21 - bytes 0xCD, 0x21
|
|
- bytes 0xCD, 0x21 (little endian ) or 0x21, 0xCD (big-endian)
|
|
0 - the null terminated string "Hello"
|
|
- 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0
|
|
? ? ? ? 90 - byte 0xB8, 4 bytes with any value, byte 0x90
|
|
|
|
|
|
|
|
@param out: a vector of compiled binary patterns, for use with bin_search()
|
|
@param ea: linear address to convert for (the conversion depends on the address, because the number of bits in a byte depend on the segment type)
|
|
@param radix: numeric base of numbers (8,10,16)
|
|
@param strlits_encoding: the target encoding into which the string literals present in 'in', should be encoded. Can be any from [1, get_encoding_qty()), or the special values PBSENC_*
|
|
@returns false either in case of parsing error, or if at least one requested target encoding couldn't encode the string literals present in "in".
|
|
|
|
ida_bytes.patch_byte(ea: ida_idaapi.ea_t, x: "uint64") -> bool
|
|
Patch a byte of the program. The original value of the byte is saved and can be obtained by get_original_byte(). This function works for wide byte processors too.
|
|
|
|
@retval true: the database has been modified,
|
|
@retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already.
|
|
|
|
ida_bytes.patch_bytes(ea: ida_idaapi.ea_t, buf: "void const *") -> None
|
|
Patch the specified number of bytes of the program. Original values of bytes are saved and are available with get_original...() functions. See also put_bytes().
|
|
|
|
@param ea: linear address
|
|
@param buf: buffer with new values of bytes
|
|
|
|
ida_bytes.patch_dword(ea: ida_idaapi.ea_t, x: "uint64") -> bool
|
|
Patch a dword of the program. The original value of the dword is saved and can be obtained by get_original_dword(). This function DOESN'T work for wide byte processors. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@retval true: the database has been modified,
|
|
@retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already.
|
|
|
|
ida_bytes.patch_qword(ea: ida_idaapi.ea_t, x: "uint64") -> bool
|
|
Patch a qword of the program. The original value of the qword is saved and can be obtained by get_original_qword(). This function DOESN'T work for wide byte processors. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@retval true: the database has been modified,
|
|
@retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already.
|
|
|
|
ida_bytes.patch_word(ea: ida_idaapi.ea_t, x: "uint64") -> bool
|
|
Patch a word of the program. The original value of the word is saved and can be obtained by get_original_word(). This function works for wide byte processors too. This function takes into account order of bytes specified in idainfo::is_be()
|
|
|
|
@retval true: the database has been modified,
|
|
@retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already.
|
|
|
|
ida_bytes.prev_addr(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get previous address in the program.
|
|
|
|
@returns BADADDR if no such address exist.
|
|
|
|
ida_bytes.prev_chunk(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get the last address of previous contiguous chunk in the program.
|
|
|
|
@returns BADADDR if previous chunk doesn't exist.
|
|
|
|
ida_bytes.prev_head(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get start of previous defined item.
|
|
|
|
@param ea: begin search at this address
|
|
@param minea: included in the search range
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.prev_inited(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Find the previous initialized address.
|
|
|
|
ida_bytes.prev_not_tail(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get address of previous non-tail byte.
|
|
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.prev_that(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t, testf: "testf_t *") -> ida_idaapi.ea_t
|
|
Find previous address with a flag satisfying the function 'testf'.
|
|
|
|
@param ea: start searching from this address - 1.
|
|
@param minea: included in the search range.
|
|
@param testf: test function to find previous address
|
|
@returns the found address or BADADDR.
|
|
|
|
ida_bytes.prev_unknown(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Similar to prev_that(), but will find the previous address that is unexplored.
|
|
|
|
ida_bytes.prev_visea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Get previous visible address.
|
|
|
|
@returns BADADDR if none exists.
|
|
|
|
ida_bytes.print_strlit_type(strtype: int, flags: int = 0) -> "PyObject *"
|
|
Get string type information: the string type name (possibly decorated with hotkey markers), and the tooltip.
|
|
|
|
@param strtype: the string type
|
|
@param flags: or'ed PSTF_* constants
|
|
@returns length of generated text
|
|
|
|
ida_bytes.put_byte(ea: ida_idaapi.ea_t, x: "uint64") -> bool
|
|
Set value of one byte of the program. This function modifies the database. If the debugger is active then the debugged process memory is patched too.
|
|
|
|
@param ea: linear address
|
|
@param x: byte value
|
|
@returns true if the database has been modified
|
|
|
|
ida_bytes.put_bytes(ea: ida_idaapi.ea_t, buf: "void const *") -> None
|
|
Modify the specified number of bytes of the program. This function does not save the original values of bytes. See also patch_bytes().
|
|
|
|
@param ea: linear address
|
|
@param buf: buffer with new values of bytes
|
|
|
|
ida_bytes.put_dword(ea: ida_idaapi.ea_t, x: "uint64") -> None
|
|
Set value of one dword of the program. This function takes into account order of bytes specified in idainfo::is_be() This function works for wide byte processors too.
|
|
|
|
@param ea: linear address
|
|
@param x: dword value
|
|
|
|
ida_bytes.put_qword(ea: ida_idaapi.ea_t, x: "uint64") -> None
|
|
Set value of one qword (8 bytes) of the program. This function takes into account order of bytes specified in idainfo::is_be() This function DOESN'T works for wide byte processors.
|
|
|
|
@param ea: linear address
|
|
@param x: qword value
|
|
|
|
ida_bytes.put_word(ea: ida_idaapi.ea_t, x: "uint64") -> None
|
|
Set value of one word of the program. This function takes into account order of bytes specified in idainfo::is_be() This function works for wide byte processors too.
|
|
|
|
|
|
ida_bytes.qword_flag() -> "flags64_t"
|
|
Get a flags64_t representing a quad word.
|
|
|
|
ida_bytes.register_custom_data_format(df)
|
|
Registers a custom data format with a given data type.
|
|
|
|
@param df: an instance of data_format_t
|
|
@return:
|
|
< 0 if failed to register
|
|
> 0 data format id
|
|
|
|
ida_bytes.register_custom_data_type(dt)
|
|
Registers a custom data type.
|
|
|
|
@param dt: an instance of the data_type_t class
|
|
@return:
|
|
< 0 if failed to register
|
|
> 0 data type id
|
|
|
|
ida_bytes.register_data_types_and_formats(formats)
|
|
Registers multiple data types and formats at once.
|
|
To register one type/format at a time use register_custom_data_type/register_custom_data_format
|
|
|
|
It employs a special table of types and formats described below:
|
|
|
|
The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0
|
|
If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example:
|
|
many_formats = [
|
|
(pascal_data_type(), pascal_data_format()),
|
|
(simplevm_data_type(), simplevm_data_format()),
|
|
(makedword_data_format(),),
|
|
(simplevm_data_format(),)
|
|
]
|
|
The first two tuples describe data types and their associated formats.
|
|
The last two tuples describe two data formats to be used with built-in data types.
|
|
The data format may be attached to several data types. The id of the
|
|
data format is stored in the first data_format_t object. For example:
|
|
assert many_formats[1][1] != -1
|
|
assert many_formats[2][0] != -1
|
|
assert many_formats[3][0] == -1
|
|
|
|
ida_bytes.register_data_types_and_formats.__reg_format(df, dtid)
|
|
|
|
ida_bytes.register_data_types_and_formats.__reg_type(dt)
|
|
|
|
ida_bytes.revert_byte(ea: ida_idaapi.ea_t) -> bool
|
|
Revert patched byte
|
|
|
|
@retval true: byte was patched before and reverted now
|
|
|
|
ida_bytes.seg_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.set_cmt(ea: ida_idaapi.ea_t, comm: str, rptble: bool) -> bool
|
|
Set an indented comment.
|
|
|
|
@param ea: linear address
|
|
@param comm: comment string
|
|
* nullptr: do nothing (return 0)
|
|
* "" : delete comment
|
|
@param rptble: is repeatable?
|
|
@returns success
|
|
|
|
ida_bytes.set_forced_operand(ea: ida_idaapi.ea_t, n: int, op: str) -> bool
|
|
Set forced operand.
|
|
|
|
@param ea: linear address
|
|
@param n: 0..UA_MAXOP-1 operand number
|
|
@param op: text of operand
|
|
* nullptr: do nothing (return 0)
|
|
* "" : delete forced operand
|
|
@returns success
|
|
|
|
ida_bytes.set_immd(ea: ida_idaapi.ea_t) -> bool
|
|
Set 'has immediate operand' flag. Returns true if the FF_IMMD bit was not set and now is set
|
|
|
|
|
|
ida_bytes.set_lzero(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Set toggle lzero bit. This function changes the display of leading zeroes for the specified operand. If the default is not to display leading zeroes, this function will display them and vice versa.
|
|
|
|
@param ea: the item (insn/data) address
|
|
@param n: the operand number (0-first operand, 1-other operands)
|
|
@returns success
|
|
|
|
ida_bytes.set_manual_insn(ea: ida_idaapi.ea_t, manual_insn: str) -> None
|
|
Set manual instruction string.
|
|
|
|
@param ea: linear address of the instruction or data item
|
|
@param manual_insn: "" - delete manual string. nullptr - do nothing
|
|
|
|
ida_bytes.set_op_type(ea: ida_idaapi.ea_t, type: "flags64_t", n: int) -> bool
|
|
(internal function) change representation of operand(s).
|
|
|
|
@param ea: linear address
|
|
@param type: new flag value (should be obtained from char_flag(), num_flag() and similar functions)
|
|
@param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands
|
|
@retval 1: ok
|
|
@retval 0: failed (applied to a tail byte)
|
|
|
|
ida_bytes.set_opinfo(ea: ida_idaapi.ea_t, n: int, flag: "flags64_t", ti: "opinfo_t", suppress_events: bool = False) -> bool
|
|
Set additional information about an operand representation. This function is a low level one. Only the kernel should use it.
|
|
|
|
@param ea: linear address of the item
|
|
@param n: number of operand, 0 or 1 (see the note below)
|
|
@param flag: flags of the item
|
|
@param ti: additional representation information
|
|
@param suppress_events: do not generate changing_op_type and op_type_changed events
|
|
@returns success
|
|
|
|
ida_bytes.stkvar_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.strlit_flag() -> "flags64_t"
|
|
Get a flags64_t representing a string literal.
|
|
|
|
ida_bytes.stroff_flag() -> "flags64_t"
|
|
see FF_opbits
|
|
|
|
ida_bytes.stru_flag() -> "flags64_t"
|
|
Get a flags64_t representing a struct.
|
|
|
|
ida_bytes.tbyte_flag() -> "flags64_t"
|
|
Get a flags64_t representing a tbyte.
|
|
|
|
ida_bytes.toggle_bnot(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Toggle binary negation of operand. also see is_bnot()
|
|
|
|
ida_bytes.toggle_lzero(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Toggle lzero bit.
|
|
|
|
@param ea: the item (insn/data) address
|
|
@param n: the operand number (0-first operand, 1-other operands)
|
|
@returns success
|
|
|
|
ida_bytes.toggle_sign(ea: ida_idaapi.ea_t, n: int) -> bool
|
|
Toggle sign of n-th operand. allowed values of n: 0-first operand, 1-other operands
|
|
|
|
|
|
ida_bytes.unregister_custom_data_format(dfid)
|
|
Unregisters a custom data format
|
|
|
|
@param dfid: data format id
|
|
@return: Boolean
|
|
|
|
ida_bytes.unregister_custom_data_type(dtid)
|
|
Unregisters a custom data type.
|
|
|
|
@param dtid: the data type id
|
|
@return: Boolean
|
|
|
|
ida_bytes.unregister_data_types_and_formats(formats)
|
|
As opposed to register_data_types_and_formats(), this function
|
|
unregisters multiple data types and formats at once.
|
|
|
|
ida_bytes.unregister_data_types_and_formats.__unreg_format(df, dtid)
|
|
|
|
ida_bytes.unregister_data_types_and_formats.__unreg_type(dt)
|
|
|
|
ida_bytes.update_hidden_range(ha: "hidden_range_t") -> bool
|
|
Update hidden range information in the database. You cannot use this function to change the range boundaries
|
|
|
|
@param ha: range to update
|
|
@returns success
|
|
|
|
ida_bytes.use_mapping(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
Translate address according to current mappings.
|
|
|
|
@param ea: address to translate
|
|
@returns translated address
|
|
|
|
ida_bytes.visit_patched_bytes(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, callable)
|
|
Enumerates patched bytes in the given range and invokes a callable
|
|
|
|
@param ea1: start address
|
|
@param ea2: end address
|
|
@param callable: a Python callable with the following prototype:
|
|
callable(ea, fpos, org_val, patch_val).
|
|
If the callable returns non-zero then that value will be
|
|
returned to the caller and the enumeration will be
|
|
interrupted.
|
|
@return: Zero if the enumeration was successful or the return
|
|
value of the callback if enumeration was interrupted.
|
|
|
|
ida_bytes.word_flag() -> "flags64_t"
|
|
Get a flags64_t representing a word.
|
|
|
|
ida_bytes.yword_flag() -> "flags64_t"
|
|
Get a flags64_t representing a ymm word.
|
|
|
|
ida_bytes.zword_flag() -> "flags64_t"
|
|
Get a flags64_t representing a zmm word.
|
|
|
|
ida_dbg
|
|
Contains functions to control the debugging of a process.
|
|
|
|
See Debugger functions for a complete explanation of these functions.
|
|
These functions are inlined for the kernel. They are not inlined for the user-interfaces.
|
|
|
|
|
|
ida_dbg.BKPT_ACTIVE
|
|
active?
|
|
|
|
ida_dbg.BKPT_BADBPT
|
|
failed to write the bpt to the process memory (at least one location)
|
|
|
|
ida_dbg.BKPT_CNDREADY
|
|
condition has been compiled
|
|
|
|
ida_dbg.BKPT_FAKEPEND
|
|
fake pending bpt: it is inactive but another bpt of the same type is active at the same address(es)
|
|
|
|
|
|
ida_dbg.BKPT_LISTBPT
|
|
include in bpt list (user-defined bpt)
|
|
|
|
ida_dbg.BKPT_PAGE
|
|
written to the process as a page bpt. Available only after writing the bpt to the process.
|
|
|
|
|
|
ida_dbg.BKPT_PARTIAL
|
|
partially active? (some locations were not written yet)
|
|
|
|
ida_dbg.BKPT_TRACE
|
|
trace bpt; should not be deleted when the process gets suspended
|
|
|
|
ida_dbg.BPLT_ABS
|
|
absolute address: ea
|
|
|
|
ida_dbg.BPLT_REL
|
|
relative address: module_path, offset
|
|
|
|
ida_dbg.BPLT_SRC
|
|
source level: filename, lineno
|
|
|
|
ida_dbg.BPLT_SYM
|
|
symbolic: symbol_name, offset
|
|
|
|
ida_dbg.BPTCK_ACT
|
|
breakpoint is active (written to the process)
|
|
|
|
ida_dbg.BPTCK_NO
|
|
breakpoint is disabled
|
|
|
|
ida_dbg.BPTCK_NONE
|
|
breakpoint does not exist
|
|
|
|
ida_dbg.BPTCK_YES
|
|
breakpoint is enabled
|
|
|
|
ida_dbg.BPTEV_ADDED
|
|
Breakpoint has been added.
|
|
|
|
ida_dbg.BPTEV_CHANGED
|
|
Breakpoint has been modified.
|
|
|
|
ida_dbg.BPTEV_REMOVED
|
|
Breakpoint has been removed.
|
|
|
|
ida_dbg.BPT_BRK
|
|
suspend execution upon hit
|
|
|
|
ida_dbg.BPT_ELANG_SHIFT
|
|
index of the extlang (scripting language) of the condition
|
|
|
|
ida_dbg.BPT_ENABLED
|
|
enabled?
|
|
|
|
ida_dbg.BPT_LOWCND
|
|
condition is calculated at low level (on the server side)
|
|
|
|
ida_dbg.BPT_TRACE
|
|
add trace information upon hit
|
|
|
|
ida_dbg.BPT_TRACEON
|
|
enable tracing when the breakpoint is reached
|
|
|
|
ida_dbg.BPT_TRACE_BBLK
|
|
basic block tracing
|
|
|
|
ida_dbg.BPT_TRACE_FUNC
|
|
function tracing
|
|
|
|
ida_dbg.BPT_TRACE_INSN
|
|
instruction tracing
|
|
|
|
ida_dbg.BPT_TRACE_TYPES
|
|
trace insns, functions, and basic blocks. if any of BPT_TRACE_TYPES bits are set but BPT_TRACEON is clear, then turn off tracing for the specified trace types
|
|
|
|
|
|
ida_dbg.BPT_UPDMEM
|
|
refresh the memory layout and contents before evaluating bpt condition
|
|
|
|
ida_dbg.BT_LOG_INSTS
|
|
specific options for basic block tracing (see set_bblk_trace_options())
|
|
|
|
log all instructions in the current basic block
|
|
|
|
|
|
ida_dbg.DBGINV_ALL
|
|
invalidate everything
|
|
|
|
ida_dbg.DBGINV_MEMCFG
|
|
invalidate cached process segmentation
|
|
|
|
ida_dbg.DBGINV_MEMORY
|
|
invalidate cached memory contents
|
|
|
|
ida_dbg.DBGINV_NONE
|
|
invalidate nothing
|
|
|
|
ida_dbg.DBGINV_REDRAW
|
|
refresh the screen
|
|
|
|
ida_dbg.DBGINV_REGS
|
|
invalidate cached register values
|
|
|
|
ida_dbg.DBG_Hooks
|
|
|
|
ida_dbg.DBG_Hooks.__disown__(self)
|
|
|
|
ida_dbg.DBG_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1)
|
|
|
|
ida_dbg.DBG_Hooks.dbg_bpt(self, tid: "thid_t", bptea: ida_idaapi.ea_t) -> int
|
|
A user defined breakpoint was reached.
|
|
|
|
@param tid: (thid_t)
|
|
@param bptea: (::ea_t)
|
|
|
|
ida_dbg.DBG_Hooks.dbg_bpt_changed(self, bptev_code: int, bpt: "bpt_t") -> None
|
|
Breakpoint has been changed.
|
|
|
|
@param bptev_code: (int) Breakpoint modification events
|
|
@param bpt: (bpt_t *)
|
|
|
|
ida_dbg.DBG_Hooks.dbg_exception(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exc_code: int, exc_can_cont: bool, exc_ea: ida_idaapi.ea_t, exc_info: str) -> int
|
|
|
|
ida_dbg.DBG_Hooks.dbg_finished_loading_bpts(self) -> None
|
|
Finished loading breakpoint info from idb.
|
|
|
|
ida_dbg.DBG_Hooks.dbg_information(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, info: str) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_library_load(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_library_unload(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, info: str) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_process_attach(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_process_detach(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_process_exit(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exit_code: int) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_process_start(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_request_error(self, failed_command: int, failed_dbg_notification: int) -> None
|
|
An error occurred during the processing of a request.
|
|
|
|
@param failed_command: (ui_notification_t)
|
|
@param failed_dbg_notification: (dbg_notification_t)
|
|
|
|
ida_dbg.DBG_Hooks.dbg_run_to(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_started_loading_bpts(self) -> None
|
|
Started loading breakpoint info from idb.
|
|
|
|
ida_dbg.DBG_Hooks.dbg_step_into(self) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_step_over(self) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_step_until_ret(self) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_suspend_process(self) -> None
|
|
The process is now suspended.
|
|
|
|
|
|
ida_dbg.DBG_Hooks.dbg_thread_exit(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exit_code: int) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_thread_start(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None
|
|
|
|
ida_dbg.DBG_Hooks.dbg_trace(self, tid: "thid_t", ip: ida_idaapi.ea_t) -> int
|
|
A step occurred (one instruction was executed). This event notification is only generated if step tracing is enabled.
|
|
|
|
@param tid: (thid_t) thread ID
|
|
@param ip: (::ea_t) current instruction pointer. usually points after the executed instruction
|
|
@retval 1: do not log this trace event
|
|
@retval 0: log it
|
|
|
|
ida_dbg.DBG_Hooks.hook(self) -> bool
|
|
|
|
ida_dbg.DBG_Hooks.unhook(self) -> bool
|
|
|
|
ida_dbg.DEC_ERROR
|
|
error
|
|
|
|
ida_dbg.DEC_NOTASK
|
|
process does not exist
|
|
|
|
ida_dbg.DEC_TIMEOUT
|
|
timeout
|
|
|
|
ida_dbg.DOPT_BPT_MSGS
|
|
log breakpoints
|
|
|
|
ida_dbg.DOPT_DISABLE_ASLR
|
|
disable ASLR
|
|
|
|
ida_dbg.DOPT_END_BPT
|
|
evaluate event condition on process end
|
|
|
|
ida_dbg.DOPT_ENTRY_BPT
|
|
break on program entry point
|
|
|
|
ida_dbg.DOPT_EXCDLG
|
|
exception dialogs:
|
|
|
|
ida_dbg.DOPT_FAST_STEP
|
|
prevent debugger memory refreshes when single-stepping
|
|
|
|
ida_dbg.DOPT_INFO_BPT
|
|
break on debugging information
|
|
|
|
ida_dbg.DOPT_INFO_MSGS
|
|
log debugging info events
|
|
|
|
ida_dbg.DOPT_LIB_BPT
|
|
break on library load/unload
|
|
|
|
ida_dbg.DOPT_LIB_MSGS
|
|
log library loads/unloads
|
|
|
|
ida_dbg.DOPT_LOAD_DINFO
|
|
automatically load debug files (pdb)
|
|
|
|
ida_dbg.DOPT_REAL_MEMORY
|
|
do not hide breakpoint instructions
|
|
|
|
ida_dbg.DOPT_REDO_STACK
|
|
reconstruct the stack
|
|
|
|
ida_dbg.DOPT_SEGM_MSGS
|
|
log debugger segments modifications
|
|
|
|
ida_dbg.DOPT_START_BPT
|
|
break on process start
|
|
|
|
ida_dbg.DOPT_TEMP_HWBPT
|
|
when possible use hardware bpts for temp bpts
|
|
|
|
ida_dbg.DOPT_THREAD_BPT
|
|
break on thread start/exit
|
|
|
|
ida_dbg.DOPT_THREAD_MSGS
|
|
log thread starts/exits
|
|
|
|
ida_dbg.DSTATE_NOTASK
|
|
no process is currently debugged
|
|
|
|
ida_dbg.DSTATE_RUN
|
|
process is running
|
|
|
|
ida_dbg.DSTATE_SUSP
|
|
process is suspended and will not continue
|
|
|
|
ida_dbg.EXCDLG_ALWAYS
|
|
always display
|
|
|
|
ida_dbg.EXCDLG_NEVER
|
|
never display exception dialogs
|
|
|
|
ida_dbg.EXCDLG_UNKNOWN
|
|
display for unknown exceptions
|
|
|
|
ida_dbg.FT_LOG_RET
|
|
specific options for function tracing (see set_func_trace_options())
|
|
|
|
function tracing will log returning instructions
|
|
|
|
|
|
ida_dbg.IT_LOG_SAME_IP
|
|
specific options for instruction tracing (see set_insn_trace_options())
|
|
|
|
instruction tracing will log new instructions even when IP doesn't change
|
|
|
|
|
|
ida_dbg.MOVBPT_BAD_TYPE
|
|
BPLT_ABS is not supported.
|
|
|
|
ida_dbg.MOVBPT_DEST_BUSY
|
|
destination location is busy (we already have such a bpt)
|
|
|
|
ida_dbg.MOVBPT_NOT_FOUND
|
|
source bpt not found
|
|
|
|
ida_dbg.MOVBPT_OK
|
|
moved ok
|
|
|
|
ida_dbg.SRCIT_EXPR
|
|
an expression (a+b*c)
|
|
|
|
ida_dbg.SRCIT_FUNC
|
|
function
|
|
|
|
ida_dbg.SRCIT_LOCVAR
|
|
a stack, register, or register-relative local variable or parameter
|
|
|
|
ida_dbg.SRCIT_MODULE
|
|
module
|
|
|
|
ida_dbg.SRCIT_NONE
|
|
unknown
|
|
|
|
ida_dbg.SRCIT_STMT
|
|
a statement (if/while/for...)
|
|
|
|
ida_dbg.SRCIT_STTVAR
|
|
static variable/code
|
|
|
|
ida_dbg.ST_ALREADY_LOGGED
|
|
step tracing will be disabled when IP is already logged
|
|
|
|
ida_dbg.ST_DIFFERENTIAL
|
|
tracing: log only new instructions (not previously logged)
|
|
|
|
|
|
ida_dbg.ST_OPTIONS_MASK
|
|
mask of available options, to ensure compatibility with newer IDA versions
|
|
|
|
ida_dbg.ST_OVER_DEBUG_SEG
|
|
step tracing will be disabled when IP is in a debugger segment
|
|
|
|
ida_dbg.ST_OVER_LIB_FUNC
|
|
step tracing will be disabled when IP is in a library function
|
|
|
|
ida_dbg.ST_SKIP_LOOPS
|
|
step tracing will try to skip loops already recorded
|
|
|
|
ida_dbg.WFNE_ANY
|
|
return the first event (even if it doesn't suspend the process)
|
|
|
|
ida_dbg.WFNE_CONT
|
|
continue from the suspended state
|
|
|
|
ida_dbg.WFNE_NOWAIT
|
|
do not wait for any event, immediately return DEC_TIMEOUT (to be used with WFNE_CONT)
|
|
|
|
|
|
ida_dbg.WFNE_SILENT
|
|
1: be silent, 0:display modal boxes if necessary
|
|
|
|
ida_dbg.WFNE_SUSP
|
|
wait until the process gets suspended
|
|
|
|
ida_dbg.WFNE_USEC
|
|
timeout is specified in microseconds (minimum non-zero timeout is 40000us)
|
|
|
|
|
|
ida_dbg.add_bpt(*args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool
|
|
1. add_bpt(bpt: const bpt_t &) -> bool
|
|
|
|
# 0: add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool
|
|
|
|
Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
# 1: add_bpt(bpt: const bpt_t &) -> bool
|
|
|
|
Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.add_path_mapping(src: str, dst: str) -> None
|
|
|
|
ida_dbg.add_virt_module(mod: "modinfo_t") -> bool
|
|
|
|
ida_dbg.attach_process(*args) -> int
|
|
Attach the debugger to a running process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_attach}
|
|
|
|
@param pid: PID of the process to attach to. If NO_PROCESS, a dialog box will interactively ask the user for the process to attach to.
|
|
@param event_id: event to trigger upon attaching
|
|
@retval -4: debugger was not inited
|
|
@retval -3: the attaching is not supported
|
|
@retval -2: impossible to find a compatible process
|
|
@retval -1: impossible to attach to the given process (process died, privilege needed, not supported by the debugger plugin, ...)
|
|
@retval 0: the user cancelled the attaching to the process
|
|
@retval 1: the debugger properly attached to the process
|
|
|
|
ida_dbg.bpt_location_t
|
|
|
|
ida_dbg.bpt_location_t.__eq__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.__ge__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.__gt__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.__init__(self)
|
|
|
|
ida_dbg.bpt_location_t.__le__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.__lt__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.__ne__(self, r: "bpt_location_t") -> bool
|
|
|
|
ida_dbg.bpt_location_t.compare(self, r: "bpt_location_t") -> int
|
|
Lexically compare two breakpoint locations. Bpt locations are first compared based on type (i.e. BPLT_ABS < BPLT_REL). BPLT_ABS locations are compared based on their ea values. For all other location types, locations are first compared based on their string (path/filename/symbol), then their offset/lineno.
|
|
|
|
|
|
ida_dbg.bpt_location_t.ea(self) -> ida_idaapi.ea_t
|
|
Get address (BPLT_ABS)
|
|
|
|
ida_dbg.bpt_location_t.is_empty_path(self) -> bool
|
|
No path/filename specified? (BPLT_REL, BPLT_SRC)
|
|
|
|
ida_dbg.bpt_location_t.lineno(self) -> int
|
|
Get line number (BPLT_SRC)
|
|
|
|
ida_dbg.bpt_location_t.offset(self) -> int
|
|
Get offset (BPLT_REL, BPLT_SYM)
|
|
|
|
ida_dbg.bpt_location_t.path(self) -> str
|
|
Get path/filename (BPLT_REL, BPLT_SRC)
|
|
|
|
ida_dbg.bpt_location_t.set_abs_bpt(self, a: ida_idaapi.ea_t) -> None
|
|
Specify an absolute address location.
|
|
|
|
ida_dbg.bpt_location_t.set_rel_bpt(self, mod: str, _offset: int) -> None
|
|
Specify a relative address location.
|
|
|
|
ida_dbg.bpt_location_t.set_src_bpt(self, fn: str, _lineno: int) -> None
|
|
Specify a source level location.
|
|
|
|
ida_dbg.bpt_location_t.set_sym_bpt(self, _symbol: str, _offset: int = 0) -> None
|
|
Specify a symbolic location.
|
|
|
|
ida_dbg.bpt_location_t.symbol(self) -> str
|
|
Get symbol name (BPLT_SYM)
|
|
|
|
ida_dbg.bpt_location_t.type(self) -> "bpt_loctype_t"
|
|
Get bpt type.
|
|
|
|
ida_dbg.bpt_t
|
|
|
|
ida_dbg.bpt_t.__init__(self)
|
|
|
|
ida_dbg.bpt_t.badbpt(self) -> bool
|
|
Failed to write bpt to process memory?
|
|
|
|
ida_dbg.bpt_t.bptid
|
|
Internal breakpoint id.
|
|
|
|
ida_dbg.bpt_t.cb
|
|
size of this structure
|
|
|
|
ida_dbg.bpt_t.cndidx
|
|
Internal number of the condition (<0-none)
|
|
|
|
ida_dbg.bpt_t.ea
|
|
Address, if known. For BPLT_SRC, index into an internal data struct.
|
|
|
|
ida_dbg.bpt_t.enabled(self) -> bool
|
|
Is breakpoint enabled?
|
|
|
|
ida_dbg.bpt_t.flags
|
|
Breakpoint property bits
|
|
|
|
|
|
ida_dbg.bpt_t.get_cnd_elang_idx(self) -> "size_t"
|
|
|
|
ida_dbg.bpt_t.get_size(self) -> int
|
|
Get bpt size.
|
|
|
|
ida_dbg.bpt_t.is_absbpt(self) -> bool
|
|
Is absolute address breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_active(self) -> bool
|
|
Written completely to process?
|
|
|
|
ida_dbg.bpt_t.is_compiled(self) -> bool
|
|
Condition has been compiled?
|
|
|
|
|
|
ida_dbg.bpt_t.is_hwbpt(self) -> bool
|
|
Is hardware breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_inactive(self) -> bool
|
|
Not written to process at all?
|
|
|
|
ida_dbg.bpt_t.is_low_level(self) -> bool
|
|
Is bpt condition calculated at low level?
|
|
|
|
ida_dbg.bpt_t.is_page_bpt(self) -> bool
|
|
Page breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_partially_active(self) -> bool
|
|
Written partially to process?
|
|
|
|
ida_dbg.bpt_t.is_relbpt(self) -> bool
|
|
Is relative address breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_srcbpt(self) -> bool
|
|
Is source level breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_symbpt(self) -> bool
|
|
Is symbolic breakpoint?
|
|
|
|
ida_dbg.bpt_t.is_tracemodebpt(self) -> bool
|
|
Does breakpoint trace anything?
|
|
|
|
ida_dbg.bpt_t.is_traceoffbpt(self) -> bool
|
|
Is this a tracing breakpoint, and is tracing disabled?
|
|
|
|
ida_dbg.bpt_t.is_traceonbpt(self) -> bool
|
|
Is this a tracing breakpoint, and is tracing enabled?
|
|
|
|
ida_dbg.bpt_t.listbpt(self) -> bool
|
|
Include in the bpt list?
|
|
|
|
ida_dbg.bpt_t.loc
|
|
Location.
|
|
|
|
ida_dbg.bpt_t.pass_count
|
|
Number of times the breakpoint is hit before stopping (default is 0: stop always)
|
|
|
|
|
|
ida_dbg.bpt_t.pid
|
|
breakpoint process id
|
|
|
|
ida_dbg.bpt_t.props
|
|
Internal breakpoint properties
|
|
|
|
|
|
ida_dbg.bpt_t.set_abs_bpt(self, a: ida_idaapi.ea_t) -> None
|
|
Set bpt location to an absolute address.
|
|
|
|
ida_dbg.bpt_t.set_rel_bpt(self, mod: str, o: int) -> None
|
|
Set bpt location to a relative address.
|
|
|
|
ida_dbg.bpt_t.set_src_bpt(self, fn: str, lineno: int) -> None
|
|
Set bpt location to a source line.
|
|
|
|
ida_dbg.bpt_t.set_sym_bpt(self, sym: str, o: int) -> None
|
|
Set bpt location to a symbol.
|
|
|
|
ida_dbg.bpt_t.set_trace_action(self, enable: bool, trace_types: int) -> bool
|
|
Configure tracing options.
|
|
|
|
ida_dbg.bpt_t.size
|
|
Size of the breakpoint (0 for software breakpoints)
|
|
|
|
ida_dbg.bpt_t.tid
|
|
breakpoint thread id
|
|
|
|
ida_dbg.bpt_t.type
|
|
Breakpoint type.
|
|
|
|
ida_dbg.bpt_vec_t
|
|
|
|
ida_dbg.bpt_vec_t.__getitem__(self, i: "size_t") -> "bpt_t const &"
|
|
|
|
ida_dbg.bpt_vec_t.__init__(self, *args)
|
|
|
|
ida_dbg.bpt_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_dbg.bpt_vec_t.__setitem__(self, i: "size_t", v: "bpt_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.append(self, x: "bpt_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.at(self, _idx: "size_t") -> "bpt_t const &"
|
|
|
|
ida_dbg.bpt_vec_t.begin(self, *args) -> "qvector< bpt_t >::const_iterator"
|
|
|
|
ida_dbg.bpt_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_dbg.bpt_vec_t.clear(self) -> None
|
|
|
|
ida_dbg.bpt_vec_t.empty(self) -> bool
|
|
|
|
ida_dbg.bpt_vec_t.end(self, *args) -> "qvector< bpt_t >::const_iterator"
|
|
|
|
ida_dbg.bpt_vec_t.erase(self, *args) -> "qvector< bpt_t >::iterator"
|
|
|
|
ida_dbg.bpt_vec_t.extend(self, x: "bpt_vec_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.extract(self) -> "bpt_t *"
|
|
|
|
ida_dbg.bpt_vec_t.grow(self, *args) -> None
|
|
|
|
ida_dbg.bpt_vec_t.inject(self, s: "bpt_t", len: "size_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.insert(self, it: "bpt_t", x: "bpt_t") -> "qvector< bpt_t >::iterator"
|
|
|
|
ida_dbg.bpt_vec_t.pop_back(self) -> None
|
|
|
|
ida_dbg.bpt_vec_t.push_back(self, *args) -> "bpt_t &"
|
|
|
|
ida_dbg.bpt_vec_t.qclear(self) -> None
|
|
|
|
ida_dbg.bpt_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.resize(self, *args) -> None
|
|
|
|
ida_dbg.bpt_vec_t.size(self) -> "size_t"
|
|
|
|
ida_dbg.bpt_vec_t.swap(self, r: "bpt_vec_t") -> None
|
|
|
|
ida_dbg.bpt_vec_t.truncate(self) -> None
|
|
|
|
ida_dbg.bptaddrs_t
|
|
|
|
ida_dbg.bptaddrs_t.__init__(self)
|
|
|
|
ida_dbg.bring_debugger_to_front() -> None
|
|
|
|
ida_dbg.check_bpt(ea: ida_idaapi.ea_t) -> int
|
|
Check the breakpoint at the specified address.
|
|
|
|
@returns one of Breakpoint status codes
|
|
|
|
ida_dbg.choose_trace_file() -> str
|
|
Show the choose trace dialog.
|
|
|
|
ida_dbg.clear_requests_queue() -> None
|
|
Clear the queue of waiting requests. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.clear_trace() -> None
|
|
Clear all events in the trace buffer. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.collect_stack_trace(tid: "thid_t", trace: "call_stack_t") -> bool
|
|
|
|
ida_dbg.continue_backwards() -> bool
|
|
Continue the execution of the process in the debugger backwards. Can only be used with debuggers that support time-travel debugging. \sq{Type, Synchronous function - available as Request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.continue_process() -> bool
|
|
Continue the execution of the process in the debugger. \sq{Type, Synchronous function - available as Request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.create_source_viewer(out_ccv: "TWidget **", parent: "TWidget *", custview: "TWidget *", sf: "source_file_ptr", lines: "strvec_t *", lnnum: int, colnum: int, flags: int) -> "source_view_t *"
|
|
Create a source code view.
|
|
|
|
ida_dbg.dbg_add_bpt_tev(tid: "thid_t", ea: ida_idaapi.ea_t, bp: ida_idaapi.ea_t) -> bool
|
|
Add a new breakpoint trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns false if the operation failed, true otherwise
|
|
|
|
ida_dbg.dbg_add_call_tev(tid: "thid_t", caller: ida_idaapi.ea_t, callee: ida_idaapi.ea_t) -> None
|
|
Add a new call trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_add_debug_event(event: "debug_event_t") -> None
|
|
Add a new debug event to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_add_insn_tev(tid: "thid_t", ea: ida_idaapi.ea_t, save: "save_reg_values_t" = SAVE_DIFF) -> bool
|
|
Add a new instruction trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns false if the operation failed, true otherwise
|
|
|
|
ida_dbg.dbg_add_many_tevs(new_tevs: "tevinforeg_vec_t") -> bool
|
|
Add many new trace elements to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns false if the operation failed for any tev_info_t object
|
|
|
|
ida_dbg.dbg_add_ret_tev(tid: "thid_t", ret_insn: ida_idaapi.ea_t, return_to: ida_idaapi.ea_t) -> None
|
|
Add a new return trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_add_tev(type: "tev_type_t", tid: "thid_t", address: ida_idaapi.ea_t) -> None
|
|
Add a new trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_add_thread(tid: "thid_t") -> None
|
|
Add a thread to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: "compiled_binpat_vec_t const &", srch_flags: int) -> str
|
|
|
|
ida_dbg.dbg_bpt
|
|
A user defined breakpoint was reached.
|
|
|
|
|
|
ida_dbg.dbg_bpt_changed
|
|
Breakpoint has been changed.
|
|
|
|
|
|
ida_dbg.dbg_can_query()
|
|
This function can be used to check if the debugger can be queried:
|
|
- debugger is loaded
|
|
- process is suspended
|
|
- process is not suspended but can take requests. In this case some requests like
|
|
memory read/write, bpt management succeed and register querying will fail.
|
|
Check if idaapi.get_process_state() < 0 to tell if the process is suspended
|
|
|
|
@return: Boolean
|
|
|
|
ida_dbg.dbg_del_thread(tid: "thid_t") -> None
|
|
Delete a thread from the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.dbg_finished_loading_bpts
|
|
Finished loading breakpoint info from idb.
|
|
|
|
ida_dbg.dbg_is_loaded()
|
|
Checks if a debugger is loaded
|
|
|
|
@return: Boolean
|
|
|
|
ida_dbg.dbg_last
|
|
The last debugger notification code.
|
|
|
|
ida_dbg.dbg_request_error
|
|
An error occurred during the processing of a request.
|
|
|
|
|
|
ida_dbg.dbg_started_loading_bpts
|
|
Started loading breakpoint info from idb.
|
|
|
|
ida_dbg.dbg_suspend_process
|
|
The process is now suspended.
|
|
|
|
|
|
ida_dbg.dbg_trace
|
|
A step occurred (one instruction was executed). This event notification is only generated if step tracing is enabled.
|
|
|
|
|
|
ida_dbg.define_exception(code: "uint", name: str, desc: str, flags: int) -> str
|
|
Convenience function: define new exception code.
|
|
|
|
@param code: exception code (cannot be 0)
|
|
@param name: exception name (cannot be empty or nullptr)
|
|
@param desc: exception description (maybe nullptr)
|
|
@param flags: combination of Exception info flags
|
|
@returns failure message or nullptr. You must call store_exceptions() if this function succeeds
|
|
|
|
ida_dbg.del_bpt(*args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. del_bpt(ea: ida_idaapi.ea_t) -> bool
|
|
1. del_bpt(bptloc: const bpt_location_t &) -> bool
|
|
|
|
# 0: del_bpt(ea: ida_idaapi.ea_t) -> bool
|
|
|
|
Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
# 1: del_bpt(bptloc: const bpt_location_t &) -> bool
|
|
|
|
Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.del_bptgrp(name: str) -> bool
|
|
Delete a folder, bpt that were part of this folder are moved to the root folder \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param name: full path to the folder to be deleted
|
|
@returns success
|
|
|
|
ida_dbg.del_virt_module(base: "ea_t const") -> bool
|
|
|
|
ida_dbg.detach_process() -> bool
|
|
Detach the debugger from the debugged process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_detach}
|
|
|
|
|
|
ida_dbg.diff_trace_file(NONNULL_filename: str) -> bool
|
|
Show difference between the current trace and the one from 'filename'.
|
|
|
|
ida_dbg.disable_bblk_trace() -> bool
|
|
|
|
ida_dbg.disable_bpt(*args) -> bool
|
|
|
|
ida_dbg.disable_func_trace() -> bool
|
|
|
|
ida_dbg.disable_insn_trace() -> bool
|
|
|
|
ida_dbg.disable_step_trace() -> bool
|
|
|
|
ida_dbg.edit_manual_regions() -> None
|
|
|
|
ida_dbg.enable_bblk_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.enable_bpt(*args) -> bool
|
|
|
|
ida_dbg.enable_bptgrp(bptgrp_name: str, enable: bool = True) -> int
|
|
Enable (or disable) all bpts in a folder \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param bptgrp_name: absolute path to the folder
|
|
@param enable: by default true, enable bpts, false disable bpts
|
|
@retval -1: an error occured
|
|
@retval 0: no changes
|
|
@retval >0: nubmers of bpts udpated
|
|
|
|
ida_dbg.enable_func_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.enable_insn_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.enable_manual_regions(enable: bool) -> None
|
|
|
|
ida_dbg.enable_step_trace(enable: int = 1) -> bool
|
|
|
|
ida_dbg.eval_ctx_t
|
|
|
|
ida_dbg.eval_ctx_t.__init__(self, _ea: ida_idaapi.ea_t)
|
|
|
|
ida_dbg.exist_bpt(ea: ida_idaapi.ea_t) -> bool
|
|
Does a breakpoint exist at the given location?
|
|
|
|
ida_dbg.exit_process() -> bool
|
|
Terminate the debugging of the current process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_exit}
|
|
|
|
|
|
ida_dbg.find_bpt(bptloc: "bpt_location_t", bpt: "bpt_t") -> bool
|
|
Find a breakpoint by location. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
@param bptloc: Breakpoint location
|
|
@param bpt: bpt is filled if the breakpoint was found
|
|
|
|
ida_dbg.get_bblk_trace_options() -> int
|
|
Get current basic block tracing options. Also see BT_LOG_INSTS \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_bpt(ea: ida_idaapi.ea_t, bpt: "bpt_t") -> bool
|
|
Get the characteristics of a breakpoint. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param ea: any address in the breakpoint range
|
|
@param bpt: if not nullptr, is filled with the characteristics.
|
|
@returns false if no breakpoint exists
|
|
|
|
ida_dbg.get_bpt_group(bptloc: "bpt_location_t") -> str
|
|
Retrieve the absolute path to the folder of the bpt based on the bpt_location find_bpt is called to retrieve the bpt \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param bptloc: bptlocation of the bpt
|
|
@returns success
|
|
@retval true: breakpoint correclty moved to the directory
|
|
|
|
ida_dbg.get_bpt_qty() -> int
|
|
Get number of breakpoints. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_bpt_tev_ea(n: int) -> ida_idaapi.ea_t
|
|
Get the address associated to a read, read/write or execution trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@returns BADADDR if not a read, read/write or execution trace event.
|
|
|
|
ida_dbg.get_bptloc_string(i: int) -> str
|
|
|
|
ida_dbg.get_call_tev_callee(n: int) -> ida_idaapi.ea_t
|
|
Get the called function from a function call trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@returns BADADDR if not a function call event.
|
|
|
|
ida_dbg.get_current_source_file() -> str
|
|
|
|
ida_dbg.get_current_source_line() -> int
|
|
|
|
ida_dbg.get_current_thread() -> "thid_t"
|
|
Get current thread ID. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_dbg_byte(ea: ida_idaapi.ea_t) -> "uint32 *"
|
|
Get one byte of the debugged process memory.
|
|
|
|
@param ea: linear address
|
|
@returns success
|
|
@retval true: success
|
|
@retval false: address inaccessible or debugger not running
|
|
|
|
ida_dbg.get_dbg_memory_info(ranges: "meminfo_vec_t") -> int
|
|
|
|
ida_dbg.get_dbg_reg_info(regname: str, ri: "register_info_t") -> bool
|
|
Get register information \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_debug_event() -> "debug_event_t const *"
|
|
Get the current debugger event.
|
|
|
|
ida_dbg.get_debugger_event_cond() -> str
|
|
|
|
ida_dbg.get_first_module(modinfo: "modinfo_t") -> bool
|
|
|
|
ida_dbg.get_func_trace_options() -> int
|
|
Get current function tracing options. Also see FT_LOG_RET \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_global_var(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, name: str, out: "source_item_ptr *") -> bool
|
|
|
|
ida_dbg.get_grp_bpts(bpts: "bpt_vec_t", grp_name: str) -> "ssize_t"
|
|
Retrieve a copy the bpts stored in a folder \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param bpts: : pointer to a vector where the copy of bpts are stored
|
|
@param grp_name: absolute path to the folder
|
|
@returns number of bpts present in the vector
|
|
|
|
ida_dbg.get_insn_tev_reg_mem(n: int, memmap: "memreg_infos_t") -> bool
|
|
Read the memory pointed by register values from an instruction trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param memmap: result
|
|
@returns false if not an instruction event or no memory is available
|
|
|
|
ida_dbg.get_insn_tev_reg_result(n: int, regname: str, regval: "regval_t") -> bool
|
|
Read the resulting register value from an instruction trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param regname: name of desired register
|
|
@param regval: result
|
|
@returns false if not an instruction trace event or register wasn't modified.
|
|
|
|
ida_dbg.get_insn_tev_reg_val(n: int, regname: str, regval: "regval_t") -> bool
|
|
Read a register value from an instruction trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param regname: name of desired register
|
|
@param regval: result
|
|
@returns false if not an instruction event.
|
|
|
|
ida_dbg.get_insn_trace_options() -> int
|
|
Get current instruction tracing options. Also see IT_LOG_SAME_IP \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_ip_val() -> "uint64 *"
|
|
Get value of the IP (program counter) register for the current thread. Requires a suspended debugger.
|
|
|
|
|
|
ida_dbg.get_local_var(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, name: str, out: "source_item_ptr *") -> bool
|
|
|
|
ida_dbg.get_local_vars(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, out: "source_items_t *") -> bool
|
|
|
|
ida_dbg.get_manual_regions(*args)
|
|
Returns the manual memory regions
|
|
|
|
This function has the following signatures:
|
|
|
|
1. get_manual_regions() -> List[Tuple(ida_idaapi.ea_t, ida_idaapi.ea_t, str, str, ida_idaapi.ea_t, int, int)]
|
|
Where each tuple holds (start_ea, end_ea, name, sclass, sbase, bitness, perm)
|
|
2. get_manual_regions(storage: meminfo_vec_t) -> None
|
|
|
|
ida_dbg.get_module_info(ea: ida_idaapi.ea_t, modinfo: "modinfo_t") -> bool
|
|
|
|
ida_dbg.get_next_module(modinfo: "modinfo_t") -> bool
|
|
|
|
ida_dbg.get_process_options() -> "qstring *, qstring *, qstring *, qstring *, qstring *, int *"
|
|
Get process options. Any of the arguments may be nullptr
|
|
|
|
|
|
ida_dbg.get_process_options2() -> "qstring *, qstring *, launch_env_t *, qstring *, qstring *, qstring *, int *"
|
|
|
|
ida_dbg.get_process_state() -> int
|
|
Return the state of the currently debugged process. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns one of Debugged process states
|
|
|
|
ida_dbg.get_processes(proclist: "procinfo_vec_t") -> "ssize_t"
|
|
Take a snapshot of running processes and return their description. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param proclist: array with information about each running process
|
|
@returns number of processes or -1 on error
|
|
|
|
ida_dbg.get_reg_val(*args)
|
|
Get a register value.
|
|
|
|
This function has the following signatures:
|
|
|
|
1. get_reg_val(name: str) -> Union[int, float, bytes]
|
|
2. get_reg_val(name: str, regval: regval_t) -> bool
|
|
|
|
The first (and most user-friendly) form will return
|
|
a value whose type is related to the register type.
|
|
I.e., either an integer, a float or, in the case of large
|
|
vector registers, a bytes sequence.
|
|
|
|
@param name the register name
|
|
@return the register value (1st form)
|
|
|
|
ida_dbg.get_reg_vals(tid: int, clsmask: int = -1) -> "ida_idd.regvals_t"
|
|
Fetch live registers values for the thread
|
|
|
|
@param tid The ID of the thread to read registers for
|
|
@param clsmask An OR'ed mask of register classes to
|
|
read values for (can be used to speed up the
|
|
retrieval process)
|
|
|
|
@return: a list of register values (empty if an error occurs)
|
|
|
|
ida_dbg.get_ret_tev_return(n: int) -> ida_idaapi.ea_t
|
|
Get the return address from a function return trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@returns BADADDR if not a function return event.
|
|
|
|
ida_dbg.get_running_notification() -> "dbg_notification_t"
|
|
Get the notification associated (if any) with the current running request. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns dbg_null if no running request
|
|
|
|
ida_dbg.get_running_request() -> "ui_notification_t"
|
|
Get the current running request. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns ui_null if no running request
|
|
|
|
ida_dbg.get_sp_val() -> "uint64 *"
|
|
Get value of the SP register for the current thread. Requires a suspended debugger.
|
|
|
|
|
|
ida_dbg.get_srcinfo_provider(name: str) -> "srcinfo_provider_t *"
|
|
|
|
ida_dbg.get_step_trace_options() -> int
|
|
Get current step tracing options. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns Step trace options
|
|
|
|
ida_dbg.get_tev_ea(n: int) -> ida_idaapi.ea_t
|
|
|
|
ida_dbg.get_tev_event(n: int, d: "debug_event_t") -> bool
|
|
Get the corresponding debug event, if any, for the specified tev object. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param d: result
|
|
@returns false if the tev_t object doesn't have any associated debug event, true otherwise, with the debug event in "d".
|
|
|
|
ida_dbg.get_tev_info(n: int, tev_info: "tev_info_t") -> bool
|
|
Get main information about a trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param tev_info: result
|
|
@returns success
|
|
|
|
ida_dbg.get_tev_memory_info(n: int, mi: "meminfo_vec_t") -> bool
|
|
Get the memory layout, if any, for the specified tev object. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event.
|
|
@param mi: result
|
|
@returns false if the tev_t object is not of type tev_mem, true otherwise, with the new memory layout in "mi".
|
|
|
|
ida_dbg.get_tev_qty() -> int
|
|
Get number of trace events available in trace buffer. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_tev_reg_mem(tev, idx)
|
|
|
|
ida_dbg.get_tev_reg_mem_ea(tev, idx)
|
|
|
|
ida_dbg.get_tev_reg_mem_qty(tev)
|
|
|
|
ida_dbg.get_tev_reg_val(tev, reg)
|
|
|
|
ida_dbg.get_tev_tid(n: int) -> int
|
|
|
|
ida_dbg.get_tev_type(n: int) -> int
|
|
|
|
ida_dbg.get_thread_qty() -> int
|
|
Get number of threads. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.get_trace_base_address() -> ida_idaapi.ea_t
|
|
Get the base address of the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns the base address of the currently loaded trace
|
|
|
|
ida_dbg.get_trace_dynamic_register_set(idaregs: "dynamic_register_set_t *") -> None
|
|
Get dynamic register set of current trace.
|
|
|
|
ida_dbg.get_trace_file_desc(filename: str) -> str
|
|
Get the file header of the specified trace file.
|
|
|
|
ida_dbg.get_trace_platform() -> str
|
|
Get platform name of current trace.
|
|
|
|
ida_dbg.getn_bpt(n: int, bpt: "bpt_t") -> bool
|
|
Get the characteristics of a breakpoint. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of breakpoint, is in range 0..get_bpt_qty()-1
|
|
@param bpt: filled with the characteristics.
|
|
@returns false if no breakpoint exists
|
|
|
|
ida_dbg.getn_thread(n: int) -> "thid_t"
|
|
Get the ID of a thread. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of thread, is in range 0..get_thread_qty()-1
|
|
@returns NO_THREAD if the thread doesn't exist.
|
|
|
|
ida_dbg.getn_thread_name(n: int) -> str
|
|
Get the NAME of a thread \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param n: number of thread, is in range 0..get_thread_qty()-1 or -1 for the current thread
|
|
@returns thread name or nullptr if the thread doesn't exist.
|
|
|
|
ida_dbg.graph_trace() -> bool
|
|
Show the trace callgraph.
|
|
|
|
ida_dbg.handle_debug_event(ev: "debug_event_t", rqflags: int) -> int
|
|
|
|
ida_dbg.hide_all_bpts() -> int
|
|
|
|
ida_dbg.internal_get_sreg_base(tid: int, sreg_value: int)
|
|
Get the sreg base, for the given thread.
|
|
|
|
@param tid: the thread ID
|
|
@param sreg_value: the sreg value
|
|
@return: The sreg base, or BADADDR on failure.
|
|
|
|
ida_dbg.internal_ioctl(fn: int, buf: "void const *", poutbuf: "void **", poutsize: "ssize_t *") -> int
|
|
|
|
ida_dbg.invalidate_dbg_state(dbginv: int) -> int
|
|
Invalidate cached debugger information. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param dbginv: Debugged process invalidation options
|
|
@returns current debugger state (one of Debugged process states)
|
|
|
|
ida_dbg.invalidate_dbgmem_config() -> None
|
|
Invalidate the debugged process memory configuration. Call this function if the debugged process might have changed its memory layout (allocated more memory, for example)
|
|
|
|
|
|
ida_dbg.invalidate_dbgmem_contents(ea: ida_idaapi.ea_t, size: "asize_t") -> None
|
|
Invalidate the debugged process memory contents. Call this function each time the process has been stopped or the process memory is modified. If ea == BADADDR, then the whole memory contents will be invalidated
|
|
|
|
|
|
ida_dbg.is_bblk_trace_enabled() -> bool
|
|
|
|
ida_dbg.is_debugger_busy() -> bool
|
|
Is the debugger busy?. Some debuggers do not accept any commands while the debugged application is running. For such a debugger, it is unsafe to do anything with the database (even simple queries like get_byte may lead to undesired consequences). Returns: true if the debugged application is running under such a debugger
|
|
|
|
|
|
ida_dbg.is_debugger_memory(ea: ida_idaapi.ea_t) -> bool
|
|
Is the address mapped to debugger memory?
|
|
|
|
ida_dbg.is_debugger_on() -> bool
|
|
Is the debugger currently running?
|
|
|
|
ida_dbg.is_func_trace_enabled() -> bool
|
|
Get current state of functions tracing. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_insn_trace_enabled() -> bool
|
|
Get current state of instruction tracing. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_reg_custom(regname: str) -> bool
|
|
Does a register contain a value of a custom data type? \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_reg_float(regname: str) -> bool
|
|
Does a register contain a floating point value? \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_reg_integer(regname: str) -> bool
|
|
Does a register contain an integer value? \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_request_running() -> bool
|
|
Is a request currently running?
|
|
|
|
ida_dbg.is_step_trace_enabled() -> bool
|
|
Get current state of step tracing. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.is_valid_dstate(state: int) -> bool
|
|
|
|
ida_dbg.is_valid_trace_file(filename: str) -> bool
|
|
Is the specified file a valid trace file for the current database?
|
|
|
|
ida_dbg.list_bptgrps() -> List[str]
|
|
Retrieve the list of absolute path of all folders of bpt dirtree.
|
|
Synchronous function, Notification, none (synchronous function)
|
|
|
|
ida_dbg.load_debugger(dbgname: str, use_remote: bool) -> bool
|
|
|
|
ida_dbg.load_trace_file(filename: str) -> str
|
|
Load a recorded trace file in the 'Tracing' window. If the call succeeds and 'buf' is not null, the description of the trace stored in the binary trace file will be returned in 'buf'
|
|
|
|
|
|
ida_dbg.memreg_info_t
|
|
|
|
ida_dbg.memreg_info_t.__init__(self)
|
|
|
|
ida_dbg.memreg_info_t.get_bytes(self) -> "PyObject *"
|
|
|
|
ida_dbg.memreg_infos_t
|
|
|
|
ida_dbg.memreg_infos_t.__getitem__(self, i: "size_t") -> "memreg_info_t const &"
|
|
|
|
ida_dbg.memreg_infos_t.__init__(self, *args)
|
|
|
|
ida_dbg.memreg_infos_t.__len__(self) -> "size_t"
|
|
|
|
ida_dbg.memreg_infos_t.__setitem__(self, i: "size_t", v: "memreg_info_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.append(self, x: "memreg_info_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.at(self, _idx: "size_t") -> "memreg_info_t const &"
|
|
|
|
ida_dbg.memreg_infos_t.begin(self, *args) -> "qvector< memreg_info_t >::const_iterator"
|
|
|
|
ida_dbg.memreg_infos_t.capacity(self) -> "size_t"
|
|
|
|
ida_dbg.memreg_infos_t.clear(self) -> None
|
|
|
|
ida_dbg.memreg_infos_t.empty(self) -> bool
|
|
|
|
ida_dbg.memreg_infos_t.end(self, *args) -> "qvector< memreg_info_t >::const_iterator"
|
|
|
|
ida_dbg.memreg_infos_t.erase(self, *args) -> "qvector< memreg_info_t >::iterator"
|
|
|
|
ida_dbg.memreg_infos_t.extend(self, x: "memreg_infos_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.extract(self) -> "memreg_info_t *"
|
|
|
|
ida_dbg.memreg_infos_t.grow(self, *args) -> None
|
|
|
|
ida_dbg.memreg_infos_t.inject(self, s: "memreg_info_t", len: "size_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.insert(self, it: "memreg_info_t", x: "memreg_info_t") -> "qvector< memreg_info_t >::iterator"
|
|
|
|
ida_dbg.memreg_infos_t.pop_back(self) -> None
|
|
|
|
ida_dbg.memreg_infos_t.push_back(self, *args) -> "memreg_info_t &"
|
|
|
|
ida_dbg.memreg_infos_t.qclear(self) -> None
|
|
|
|
ida_dbg.memreg_infos_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.resize(self, *args) -> None
|
|
|
|
ida_dbg.memreg_infos_t.size(self) -> "size_t"
|
|
|
|
ida_dbg.memreg_infos_t.swap(self, r: "memreg_infos_t") -> None
|
|
|
|
ida_dbg.memreg_infos_t.truncate(self) -> None
|
|
|
|
ida_dbg.put_dbg_byte(ea: ida_idaapi.ea_t, x: int) -> bool
|
|
Change one byte of the debugged process memory.
|
|
|
|
@param ea: linear address
|
|
@param x: byte value
|
|
@returns true if the process memory has been modified
|
|
|
|
ida_dbg.read_dbg_memory(ea: ida_idaapi.ea_t, buffer: "void *", size: "size_t") -> "ssize_t"
|
|
|
|
ida_dbg.refresh_debugger_memory()
|
|
Refreshes the debugger memory
|
|
|
|
@return: Nothing
|
|
|
|
ida_dbg.rename_bptgrp(old_name: str, new_name: str) -> bool
|
|
Rename a folder of bpt dirtree \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param old_name: absolute path to the folder to be renamed
|
|
@param new_name: absolute path of the new folder name
|
|
@returns success
|
|
|
|
ida_dbg.request_add_bpt(*args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. request_add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool
|
|
1. request_add_bpt(bpt: const bpt_t &) -> bool
|
|
|
|
# 0: request_add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool
|
|
|
|
Post an add_bpt(ea_t, asize_t, bpttype_t) request.
|
|
|
|
|
|
# 1: request_add_bpt(bpt: const bpt_t &) -> bool
|
|
|
|
Post an add_bpt(const bpt_t &) request.
|
|
|
|
ida_dbg.request_attach_process(pid: "pid_t", event_id: int) -> int
|
|
Post an attach_process() request.
|
|
|
|
ida_dbg.request_clear_trace() -> None
|
|
Post a clear_trace() request.
|
|
|
|
ida_dbg.request_continue_backwards() -> bool
|
|
Post a continue_backwards() request.
|
|
|
|
|
|
ida_dbg.request_continue_process() -> bool
|
|
Post a continue_process() request.
|
|
|
|
|
|
ida_dbg.request_del_bpt(*args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. request_del_bpt(ea: ida_idaapi.ea_t) -> bool
|
|
1. request_del_bpt(bptloc: const bpt_location_t &) -> bool
|
|
|
|
# 0: request_del_bpt(ea: ida_idaapi.ea_t) -> bool
|
|
|
|
Post a del_bpt(ea_t) request.
|
|
|
|
|
|
# 1: request_del_bpt(bptloc: const bpt_location_t &) -> bool
|
|
|
|
Post a del_bpt(const bpt_location_t &) request.
|
|
|
|
ida_dbg.request_detach_process() -> bool
|
|
Post a detach_process() request.
|
|
|
|
ida_dbg.request_disable_bblk_trace() -> bool
|
|
|
|
ida_dbg.request_disable_bpt(*args) -> bool
|
|
|
|
ida_dbg.request_disable_func_trace() -> bool
|
|
|
|
ida_dbg.request_disable_insn_trace() -> bool
|
|
|
|
ida_dbg.request_disable_step_trace() -> bool
|
|
|
|
ida_dbg.request_enable_bblk_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.request_enable_bpt(*args) -> bool
|
|
|
|
ida_dbg.request_enable_func_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.request_enable_insn_trace(enable: bool = True) -> bool
|
|
|
|
ida_dbg.request_enable_step_trace(enable: int = 1) -> bool
|
|
|
|
ida_dbg.request_exit_process() -> bool
|
|
Post an exit_process() request.
|
|
|
|
ida_dbg.request_resume_thread(tid: "thid_t") -> int
|
|
Post a resume_thread() request.
|
|
|
|
ida_dbg.request_run_to(*args) -> bool
|
|
Post a run_to() request.
|
|
|
|
ida_dbg.request_run_to_backwards(*args) -> bool
|
|
Post a run_to_backwards() request.
|
|
|
|
ida_dbg.request_select_thread(tid: "thid_t") -> bool
|
|
Post a select_thread() request.
|
|
|
|
ida_dbg.request_set_bblk_trace_options(options: int) -> None
|
|
Post a set_bblk_trace_options() request.
|
|
|
|
ida_dbg.request_set_func_trace_options(options: int) -> None
|
|
Post a set_func_trace_options() request.
|
|
|
|
ida_dbg.request_set_insn_trace_options(options: int) -> None
|
|
Post a set_insn_trace_options() request.
|
|
|
|
ida_dbg.request_set_reg_val(regname: str, o: "PyObject *") -> "PyObject *"
|
|
Post a set_reg_val() request.
|
|
|
|
ida_dbg.request_set_resume_mode(tid: "thid_t", mode: "resume_mode_t") -> bool
|
|
Post a set_resume_mode() request.
|
|
|
|
ida_dbg.request_set_step_trace_options(options: int) -> None
|
|
Post a set_step_trace_options() request.
|
|
|
|
ida_dbg.request_start_process(path: str = None, args: str = None, sdir: str = None) -> int
|
|
Post a start_process() request.
|
|
|
|
ida_dbg.request_step_into() -> bool
|
|
Post a step_into() request.
|
|
|
|
ida_dbg.request_step_into_backwards() -> bool
|
|
Post a step_into_backwards() request.
|
|
|
|
ida_dbg.request_step_over() -> bool
|
|
Post a step_over() request.
|
|
|
|
ida_dbg.request_step_over_backwards() -> bool
|
|
Post a step_over_backwards() request.
|
|
|
|
ida_dbg.request_step_until_ret() -> bool
|
|
Post a step_until_ret() request.
|
|
|
|
ida_dbg.request_suspend_process() -> bool
|
|
Post a suspend_process() request.
|
|
|
|
ida_dbg.request_suspend_thread(tid: "thid_t") -> int
|
|
Post a suspend_thread() request.
|
|
|
|
ida_dbg.resume_thread(tid: "thid_t") -> int
|
|
Resume thread. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
@param tid: thread id
|
|
@retval -1: network error
|
|
@retval 0: failed
|
|
@retval 1: ok
|
|
|
|
ida_dbg.retrieve_exceptions() -> "excvec_t *"
|
|
Retrieve the exception information. You may freely modify the returned vector and add/edit/delete exceptions You must call store_exceptions() after any modifications Note: exceptions with code zero, multiple exception codes or names are prohibited
|
|
|
|
|
|
ida_dbg.run_requests() -> bool
|
|
Execute requests until all requests are processed or an asynchronous function is called. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@returns false if not all requests could be processed (indicates an asynchronous function was started)
|
|
|
|
ida_dbg.run_to(*args) -> bool
|
|
Execute the process until the given address is reached. If no process is active, a new process is started. Technically, the debugger sets up a temporary breakpoint at the given address, and continues (or starts) the execution of the whole process. So, all threads continue their execution! \sq{Type, Asynchronous function - available as Request, Notification, dbg_run_to}
|
|
|
|
@param ea: target address
|
|
@param pid: not used yet. please do not specify this parameter.
|
|
@param tid: not used yet. please do not specify this parameter.
|
|
|
|
ida_dbg.run_to_backwards(*args) -> bool
|
|
Execute the process backwards until the given address is reached. Technically, the debugger sets up a temporary breakpoint at the given address, and continues (or starts) the execution of the whole process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_run_to}
|
|
|
|
@param ea: target address
|
|
@param pid: not used yet. please do not specify this parameter.
|
|
@param tid: not used yet. please do not specify this parameter.
|
|
|
|
ida_dbg.save_trace_file(filename: str, description: str) -> bool
|
|
Save the current trace in the specified file.
|
|
|
|
ida_dbg.select_thread(tid: "thid_t") -> bool
|
|
Select the given thread as the current debugged thread. All thread related execution functions will work on this thread. The process must be suspended to select a new thread. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
@param tid: ID of the thread to select
|
|
@returns false if the thread doesn't exist.
|
|
|
|
ida_dbg.send_dbg_command(command)
|
|
Send a direct command to the debugger backend, and
|
|
retrieve the result as a string.
|
|
|
|
Note: any double-quotes in 'command' must be backslash-escaped.
|
|
Note: this only works with some debugger backends: Bochs, WinDbg, GDB.
|
|
|
|
Returns: (True, <result string>) on success, or (False, <Error message string>) on failure
|
|
|
|
ida_dbg.set_bblk_trace_options(options: int) -> None
|
|
Modify basic block tracing options (see BT_LOG_INSTS)
|
|
|
|
ida_dbg.set_bpt_group(bpt: "bpt_t", grp_name: str) -> bool
|
|
Move a bpt into a folder in the breakpoint dirtree if the folder didn't exists, it will be created \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param bpt: bpt that will be moved
|
|
@param grp_name: absolute path to the breakpoint dirtree folder
|
|
@returns success
|
|
|
|
ida_dbg.set_bptloc_group(bptloc: "bpt_location_t", grp_name: str) -> bool
|
|
Move a bpt into a folder in the breakpoint dirtree based on the bpt_location find_bpt is called to retrieve the bpt and then set_bpt_group if the folder didn't exists, it will be created \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param bptloc: bptlocation of the bpt that will be moved
|
|
@param grp_name: absolute path to the breakpoint dirtree folder
|
|
@returns success
|
|
|
|
ida_dbg.set_bptloc_string(s: str) -> int
|
|
|
|
ida_dbg.set_debugger_event_cond(NONNULL_evcond: str) -> None
|
|
|
|
ida_dbg.set_debugger_options(options: "uint") -> "uint"
|
|
Set debugger options. Replaces debugger options with the specification combination Debugger options
|
|
|
|
@returns the old debugger options
|
|
|
|
ida_dbg.set_func_trace_options(options: int) -> None
|
|
Modify function tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.set_highlight_trace_options(hilight: bool, color: "bgcolor_t", diff: "bgcolor_t") -> None
|
|
Set highlight trace parameters.
|
|
|
|
ida_dbg.set_insn_trace_options(options: int) -> None
|
|
Modify instruction tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.set_manual_regions(ranges: "meminfo_vec_t") -> None
|
|
|
|
ida_dbg.set_process_options(*args) -> None
|
|
Set process options. Any of the arguments may be nullptr, which means 'do not modify'
|
|
|
|
|
|
ida_dbg.set_process_state(newstate: int, p_thid: "thid_t *", dbginv: int) -> int
|
|
Set new state for the debugged process. Notifies the IDA kernel about the change of the debugged process state. For example, a debugger module could call this function when it knows that the process is suspended for a short period of time. Some IDA API calls can be made only when the process is suspended. The process state is usually restored before returning control to the caller. You must know that it is ok to change the process state, doing it at arbitrary moments may crash the application or IDA. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param newstate: new process state (one of Debugged process states) if DSTATE_NOTASK is passed then the state is not changed
|
|
@param p_thid: ptr to new thread id. may be nullptr or pointer to NO_THREAD. the pointed variable will contain the old thread id upon return
|
|
@param dbginv: Debugged process invalidation options
|
|
@returns old debugger state (one of Debugged process states)
|
|
|
|
ida_dbg.set_reg_val(*args) -> bool
|
|
Set a register value by name
|
|
|
|
This function has the following signatures:
|
|
1. set_reg_val(name: str, value: Union[int, float, bytes]) -> bool
|
|
1. set_reg_val(tid: int, regidx: int, value: Union[int, float, bytes]) -> bool
|
|
|
|
Depending on the register type, this will expect
|
|
either an integer, a float or, in the case of large
|
|
vector registers, a bytes sequence.
|
|
|
|
@param name (1st form) the register name
|
|
@param tid (2nd form) the thread ID
|
|
@param regidx (2nd form) the register index
|
|
@param value the register value
|
|
@return success
|
|
|
|
ida_dbg.set_remote_debugger(host: str, _pass: str, port: int = -1) -> None
|
|
Set remote debugging options. Should be used before starting the debugger.
|
|
|
|
@param host: If empty, IDA will use local debugger. If nullptr, the host will not be set.
|
|
@param port: If -1, the default port number will be used
|
|
|
|
ida_dbg.set_resume_mode(tid: "thid_t", mode: "resume_mode_t") -> bool
|
|
How to resume the application. Set resume mode but do not resume process.
|
|
|
|
|
|
ida_dbg.set_step_trace_options(options: int) -> None
|
|
Modify step tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.set_trace_base_address(ea: ida_idaapi.ea_t) -> None
|
|
Set the base address of the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.set_trace_dynamic_register_set(idaregs: "dynamic_register_set_t &") -> None
|
|
Set dynamic register set of current trace.
|
|
|
|
ida_dbg.set_trace_file_desc(filename: str, description: str) -> bool
|
|
Change the description of the specified trace file.
|
|
|
|
ida_dbg.set_trace_platform(platform: str) -> None
|
|
Set platform name of current trace.
|
|
|
|
ida_dbg.set_trace_size(size: int) -> bool
|
|
Specify the new size of the circular buffer. \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
@param size: if 0, buffer isn't circular and events are never removed. If the new size is smaller than the existing number of trace events, a corresponding number of trace events are removed.
|
|
|
|
ida_dbg.srcdbg_request_step_into() -> bool
|
|
|
|
ida_dbg.srcdbg_request_step_over() -> bool
|
|
|
|
ida_dbg.srcdbg_request_step_until_ret() -> bool
|
|
|
|
ida_dbg.srcdbg_step_into() -> bool
|
|
|
|
ida_dbg.srcdbg_step_over() -> bool
|
|
|
|
ida_dbg.srcdbg_step_until_ret() -> bool
|
|
|
|
ida_dbg.start_process(path: str = None, args: str = None, sdir: str = None) -> int
|
|
Start a process in the debugger. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_start}
|
|
|
|
@param path: path to the executable to start
|
|
@param args: arguments to pass to process
|
|
@param sdir: starting directory for the process
|
|
@retval -1: impossible to create the process
|
|
@retval 0: the starting of the process was cancelled by the user
|
|
@retval 1: the process was properly started
|
|
|
|
ida_dbg.step_into() -> bool
|
|
Execute one instruction in the current thread. Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_into}
|
|
|
|
|
|
ida_dbg.step_into_backwards() -> bool
|
|
Execute one instruction backwards in the current thread. Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_into}
|
|
|
|
|
|
ida_dbg.step_over() -> bool
|
|
Execute one instruction in the current thread, but without entering into functions. Others threads keep suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_over}
|
|
|
|
|
|
ida_dbg.step_over_backwards() -> bool
|
|
Execute one instruction backwards in the current thread, but without entering into functions. Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_over}
|
|
|
|
|
|
ida_dbg.step_until_ret() -> bool
|
|
Execute instructions in the current thread until a function return instruction is executed (aka "step out"). Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_until_ret}
|
|
|
|
|
|
ida_dbg.store_exceptions() -> bool
|
|
Update the exception information stored in the debugger module by invoking its dbg->set_exception_info callback
|
|
|
|
|
|
ida_dbg.suspend_process() -> bool
|
|
Suspend the process in the debugger. \sq{ Type,
|
|
* Synchronous function (if in a notification handler)
|
|
* Asynchronous function (everywhere else)
|
|
* available as Request, Notification,
|
|
* none (if in a notification handler)
|
|
* dbg_suspend_process (everywhere else) }
|
|
|
|
ida_dbg.suspend_thread(tid: "thid_t") -> int
|
|
Suspend thread. Suspending a thread may deadlock the whole application if the suspended was owning some synchronization objects. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)}
|
|
|
|
@param tid: thread id
|
|
@retval -1: network error
|
|
@retval 0: failed
|
|
@retval 1: ok
|
|
|
|
ida_dbg.tev_bpt
|
|
write, read/write, execution trace
|
|
|
|
ida_dbg.tev_call
|
|
a function call trace
|
|
|
|
ida_dbg.tev_event
|
|
debug event occurred
|
|
|
|
ida_dbg.tev_info_reg_t
|
|
|
|
ida_dbg.tev_info_reg_t.__init__(self)
|
|
|
|
ida_dbg.tev_info_t
|
|
|
|
ida_dbg.tev_info_t.__init__(self)
|
|
|
|
ida_dbg.tev_info_t.ea
|
|
address where the event occurred
|
|
|
|
ida_dbg.tev_info_t.tid
|
|
thread where the event was recorded
|
|
|
|
ida_dbg.tev_info_t.type
|
|
trace event type
|
|
|
|
ida_dbg.tev_insn
|
|
an instruction trace
|
|
|
|
ida_dbg.tev_max
|
|
first unused event type
|
|
|
|
ida_dbg.tev_mem
|
|
memory layout changed
|
|
|
|
ida_dbg.tev_none
|
|
no event
|
|
|
|
ida_dbg.tev_reg_value_t
|
|
|
|
ida_dbg.tev_reg_value_t.__init__(self, *args)
|
|
|
|
ida_dbg.tev_reg_values_t
|
|
|
|
ida_dbg.tev_reg_values_t.__getitem__(self, i: "size_t") -> "tev_reg_value_t const &"
|
|
|
|
ida_dbg.tev_reg_values_t.__init__(self, *args)
|
|
|
|
ida_dbg.tev_reg_values_t.__len__(self) -> "size_t"
|
|
|
|
ida_dbg.tev_reg_values_t.__setitem__(self, i: "size_t", v: "tev_reg_value_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.append(self, x: "tev_reg_value_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.at(self, _idx: "size_t") -> "tev_reg_value_t const &"
|
|
|
|
ida_dbg.tev_reg_values_t.begin(self, *args) -> "qvector< tev_reg_value_t >::const_iterator"
|
|
|
|
ida_dbg.tev_reg_values_t.capacity(self) -> "size_t"
|
|
|
|
ida_dbg.tev_reg_values_t.clear(self) -> None
|
|
|
|
ida_dbg.tev_reg_values_t.empty(self) -> bool
|
|
|
|
ida_dbg.tev_reg_values_t.end(self, *args) -> "qvector< tev_reg_value_t >::const_iterator"
|
|
|
|
ida_dbg.tev_reg_values_t.erase(self, *args) -> "qvector< tev_reg_value_t >::iterator"
|
|
|
|
ida_dbg.tev_reg_values_t.extend(self, x: "tev_reg_values_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.extract(self) -> "tev_reg_value_t *"
|
|
|
|
ida_dbg.tev_reg_values_t.grow(self, *args) -> None
|
|
|
|
ida_dbg.tev_reg_values_t.inject(self, s: "tev_reg_value_t", len: "size_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.insert(self, it: "tev_reg_value_t", x: "tev_reg_value_t") -> "qvector< tev_reg_value_t >::iterator"
|
|
|
|
ida_dbg.tev_reg_values_t.pop_back(self) -> None
|
|
|
|
ida_dbg.tev_reg_values_t.push_back(self, *args) -> "tev_reg_value_t &"
|
|
|
|
ida_dbg.tev_reg_values_t.qclear(self) -> None
|
|
|
|
ida_dbg.tev_reg_values_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.resize(self, *args) -> None
|
|
|
|
ida_dbg.tev_reg_values_t.size(self) -> "size_t"
|
|
|
|
ida_dbg.tev_reg_values_t.swap(self, r: "tev_reg_values_t") -> None
|
|
|
|
ida_dbg.tev_reg_values_t.truncate(self) -> None
|
|
|
|
ida_dbg.tev_ret
|
|
a function return trace
|
|
|
|
ida_dbg.tevinforeg_vec_t
|
|
|
|
ida_dbg.tevinforeg_vec_t.__getitem__(self, i: "size_t") -> "tev_info_reg_t const &"
|
|
|
|
ida_dbg.tevinforeg_vec_t.__init__(self, *args)
|
|
|
|
ida_dbg.tevinforeg_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_dbg.tevinforeg_vec_t.__setitem__(self, i: "size_t", v: "tev_info_reg_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.append(self, x: "tev_info_reg_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.at(self, _idx: "size_t") -> "tev_info_reg_t const &"
|
|
|
|
ida_dbg.tevinforeg_vec_t.begin(self, *args) -> "qvector< tev_info_reg_t >::const_iterator"
|
|
|
|
ida_dbg.tevinforeg_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_dbg.tevinforeg_vec_t.clear(self) -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.empty(self) -> bool
|
|
|
|
ida_dbg.tevinforeg_vec_t.end(self, *args) -> "qvector< tev_info_reg_t >::const_iterator"
|
|
|
|
ida_dbg.tevinforeg_vec_t.erase(self, *args) -> "qvector< tev_info_reg_t >::iterator"
|
|
|
|
ida_dbg.tevinforeg_vec_t.extend(self, x: "tevinforeg_vec_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.extract(self) -> "tev_info_reg_t *"
|
|
|
|
ida_dbg.tevinforeg_vec_t.grow(self, *args) -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.inject(self, s: "tev_info_reg_t", len: "size_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.insert(self, it: "tev_info_reg_t", x: "tev_info_reg_t") -> "qvector< tev_info_reg_t >::iterator"
|
|
|
|
ida_dbg.tevinforeg_vec_t.pop_back(self) -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.push_back(self, *args) -> "tev_info_reg_t &"
|
|
|
|
ida_dbg.tevinforeg_vec_t.qclear(self) -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.resize(self, *args) -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.size(self) -> "size_t"
|
|
|
|
ida_dbg.tevinforeg_vec_t.swap(self, r: "tevinforeg_vec_t") -> None
|
|
|
|
ida_dbg.tevinforeg_vec_t.truncate(self) -> None
|
|
|
|
ida_dbg.update_bpt(bpt: "bpt_t") -> bool
|
|
Update modifiable characteristics of an existing breakpoint. To update the breakpoint location, use change_bptlocs() \sq{Type, Synchronous function, Notification, none (synchronous function)}
|
|
|
|
|
|
ida_dbg.wait_for_next_event(wfne: int, timeout: int) -> "dbg_event_code_t"
|
|
Wait for the next event.
|
|
This function (optionally) resumes the process execution, and waits for a debugger event until a possible timeout occurs.
|
|
|
|
@param wfne: combination of Wait for debugger event flags constants
|
|
@param timeout: number of seconds to wait, -1-infinity
|
|
@returns either an event_id_t (if > 0), or a dbg_event_code_t (if <= 0)
|
|
|
|
ida_dbg.write_dbg_memory(*args) -> "ssize_t"
|
|
|
|
ida_diskio
|
|
File I/O functions for IDA.
|
|
|
|
You should not use standard C file I/O functions in modules. Use functions from this header, pro.h and fpro.h instead.
|
|
This file also declares a call_system() function.
|
|
|
|
|
|
ida_diskio.IDA_SUBDIR_IDADIR_FIRST
|
|
$IDADIR/subdir will be first, not last
|
|
|
|
ida_diskio.IDA_SUBDIR_IDP
|
|
append the processor name as a subdirectory
|
|
|
|
ida_diskio.IDA_SUBDIR_ONLY_EXISTING
|
|
only existing directories will be present
|
|
|
|
ida_diskio.LOC_CLOSE
|
|
close the inner linput
|
|
|
|
ida_diskio.LOC_KEEP
|
|
do nothing
|
|
|
|
ida_diskio.LOC_UNMAKE
|
|
unmake the inner linput
|
|
|
|
ida_diskio.VAULT_CACHE_FNAME
|
|
to store file caches
|
|
|
|
ida_diskio.VAULT_CACHE_SUBDIR
|
|
subdir name for cached deltas and old files
|
|
|
|
ida_diskio.choose_ioport_device2(_device: str, file: str, parse_params: "choose_ioport_parser_t") -> bool
|
|
|
|
ida_diskio.choose_ioport_parser_t
|
|
|
|
ida_diskio.choose_ioport_parser_t.__disown__(self)
|
|
|
|
ida_diskio.choose_ioport_parser_t.__init__(self)
|
|
|
|
ida_diskio.choose_ioport_parser_t.parse(self, param: str, line: str) -> bool
|
|
@retval true: and fill PARAM with a displayed string
|
|
@retval false: and empty PARAM to skip the current device
|
|
@retval false: and fill PARAM with an error message
|
|
|
|
ida_diskio.close_linput(li: "linput_t *") -> None
|
|
|
|
ida_diskio.create_bytearray_linput(s: str) -> "linput_t *"
|
|
|
|
ida_diskio.create_generic_linput(gl: "generic_linput_t") -> "linput_t *"
|
|
|
|
ida_diskio.create_memory_linput(start: ida_idaapi.ea_t, size: "asize_t") -> "linput_t *"
|
|
|
|
ida_diskio.enumerate_files(path, fname, callback)
|
|
Enumerate files in the specified directory while the callback returns 0.
|
|
|
|
@param path: directory to enumerate files in
|
|
@param fname: mask of file names to enumerate
|
|
@param callback: a callable object that takes the filename as
|
|
its first argument and it returns 0 to continue
|
|
enumeration or non-zero to stop enumeration.
|
|
@return:
|
|
None in case of script errors
|
|
tuple(code, fname) : If the callback returns non-zero
|
|
|
|
ida_diskio.file_enumerator_t
|
|
|
|
ida_diskio.file_enumerator_t.__disown__(self)
|
|
|
|
ida_diskio.file_enumerator_t.__init__(self)
|
|
|
|
ida_diskio.file_enumerator_t.visit_file(self, file: str) -> int
|
|
|
|
ida_diskio.fopenA(file: str) -> "FILE *"
|
|
|
|
ida_diskio.fopenM(file: str) -> "FILE *"
|
|
|
|
ida_diskio.fopenRB(file: str) -> "FILE *"
|
|
|
|
ida_diskio.fopenRT(file: str) -> "FILE *"
|
|
|
|
ida_diskio.fopenWB(file: str) -> "FILE *"
|
|
|
|
ida_diskio.fopenWT(file: str) -> "FILE *"
|
|
|
|
ida_diskio.generic_linput_t
|
|
|
|
ida_diskio.generic_linput_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_diskio.generic_linput_t.read(self, off: "qoff64_t", buffer: "void *", nbytes: "size_t") -> "ssize_t"
|
|
|
|
ida_diskio.get_ida_subdirs(subdir: str, flags: int = 0) -> "qstrvec_t *"
|
|
Get list of directories in which to find a specific IDA resource (see IDA subdirectories). The order of the resulting list is as follows:
|
|
[$IDAUSR/subdir (0..N entries)]
|
|
$IDADIR/subdir
|
|
|
|
|
|
|
|
@param subdir: name of the resource to list (can be nullptr)
|
|
@param flags: Subdirectory modification flags bits
|
|
@returns number of directories appended to 'dirs'
|
|
|
|
ida_diskio.get_linput_type(li: "linput_t *") -> "linput_type_t"
|
|
|
|
ida_diskio.get_special_folder(csidl: int) -> str
|
|
Get a folder location by CSIDL (see Common CSIDLs). Path should be of at least MAX_PATH size
|
|
|
|
|
|
ida_diskio.get_user_idadir() -> str
|
|
Get user ida related directory.
|
|
if $IDAUSR is defined:
|
|
- the first element in $IDAUSR
|
|
else
|
|
- default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro)
|
|
|
|
|
|
|
|
|
|
ida_diskio.getsysfile(filename: str, subdir: str) -> str
|
|
Search for IDA system file. This function searches for a file in:
|
|
0. each directory specified by IDAUSR%
|
|
1. ida directory [+ subdir]
|
|
|
|
|
|
and returns the first match.
|
|
|
|
@param filename: name of file to search
|
|
@param subdir: if specified, the file is looked for in the specified subdirectory of the ida directory first (see IDA subdirectories)
|
|
@returns nullptr if not found, otherwise a pointer to full file name.
|
|
|
|
ida_diskio.idadir(subdir: str) -> str
|
|
Get IDA directory (if subdir==nullptr) or the specified subdirectory (see IDA subdirectories)
|
|
|
|
|
|
ida_diskio.ioports_fallback_t
|
|
|
|
ida_diskio.ioports_fallback_t.__disown__(self)
|
|
|
|
ida_diskio.ioports_fallback_t.__init__(self)
|
|
|
|
ida_diskio.ioports_fallback_t.handle(self, ports: "ioports_t const &", line: str) -> bool
|
|
@param ports: i/o port definitions
|
|
@param line: input line to parse
|
|
@returns success or fills ERRBUF with an error message
|
|
|
|
ida_diskio.open_linput(file: str, remote: bool) -> "linput_t *"
|
|
|
|
ida_diskio.qlgetz(li: "linput_t *", fpos: "int64") -> str
|
|
|
|
ida_diskio.read_ioports(ports: "ioports_t *", device: str, file: str, callback: "ioports_fallback_t" = None) -> "ssize_t"
|
|
|
|
ida_dirtree
|
|
Types involved in grouping of item into folders.
|
|
|
|
The dirtree_t class is used to organize a directory tree on top of any collection that allows for accessing its elements by an id (inode).
|
|
No requirements are imposed on the inodes apart from the forbidden value -1 (used to denote a bad inode).
|
|
The dirspec_t class is used to specialize the dirtree. It can be used to introduce a directory structure for:
|
|
* local types
|
|
* structs
|
|
* enums
|
|
* functions
|
|
* names
|
|
* etc
|
|
|
|
ida_dirtree.DTE_ALREADY_EXISTS
|
|
item already exists
|
|
|
|
ida_dirtree.DTE_BAD_PATH
|
|
invalid path
|
|
|
|
ida_dirtree.DTE_CANT_RENAME
|
|
failed to rename an item
|
|
|
|
ida_dirtree.DTE_MAX_DIR
|
|
maximum directory count achieved
|
|
|
|
ida_dirtree.DTE_NOT_DIRECTORY
|
|
item is not a directory
|
|
|
|
ida_dirtree.DTE_NOT_EMPTY
|
|
directory is not empty
|
|
|
|
ida_dirtree.DTE_NOT_FOUND
|
|
item not found
|
|
|
|
ida_dirtree.DTE_OK
|
|
ok
|
|
|
|
ida_dirtree.DTE_OWN_CHILD
|
|
moving inside subdirectory of itself
|
|
|
|
ida_dirtree.DTN_DISPLAY_NAME
|
|
use short, displayable form of the entry name. for example, 'std::string' instead of 'std::basic_string<char, ...>'. Note that more than one "full name" can have the same displayable name.
|
|
|
|
|
|
ida_dirtree.DTN_FULL_NAME
|
|
use long form of the entry name. That name is unique.
|
|
|
|
|
|
ida_dirtree.direntry_t
|
|
|
|
ida_dirtree.direntry_t.__eq__(self, r: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_t.__init__(self, *args)
|
|
|
|
ida_dirtree.direntry_t.__lt__(self, r: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_t.__ne__(self, r: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_t.idx
|
|
diridx_t or inode_t
|
|
|
|
ida_dirtree.direntry_t.isdir
|
|
is 'idx' a diridx_t, or an inode_t
|
|
|
|
ida_dirtree.direntry_t.valid(self) -> bool
|
|
|
|
ida_dirtree.direntry_vec_t
|
|
|
|
ida_dirtree.direntry_vec_t.__eq__(self, r: "direntry_vec_t") -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.__getitem__(self, i: "size_t") -> "direntry_t const &"
|
|
|
|
ida_dirtree.direntry_vec_t.__init__(self, *args)
|
|
|
|
ida_dirtree.direntry_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_dirtree.direntry_vec_t.__ne__(self, r: "direntry_vec_t") -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.__setitem__(self, i: "size_t", v: "direntry_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t._del(self, x: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.add_unique(self, x: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.append(self, x: "direntry_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t.at(self, _idx: "size_t") -> "direntry_t const &"
|
|
|
|
ida_dirtree.direntry_vec_t.begin(self, *args) -> "qvector< direntry_t >::const_iterator"
|
|
|
|
ida_dirtree.direntry_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_dirtree.direntry_vec_t.clear(self) -> None
|
|
|
|
ida_dirtree.direntry_vec_t.empty(self) -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.end(self, *args) -> "qvector< direntry_t >::const_iterator"
|
|
|
|
ida_dirtree.direntry_vec_t.erase(self, *args) -> "qvector< direntry_t >::iterator"
|
|
|
|
ida_dirtree.direntry_vec_t.extend(self, x: "direntry_vec_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t.extract(self) -> "direntry_t *"
|
|
|
|
ida_dirtree.direntry_vec_t.find(self, *args) -> "qvector< direntry_t >::const_iterator"
|
|
|
|
ida_dirtree.direntry_vec_t.grow(self, *args) -> None
|
|
|
|
ida_dirtree.direntry_vec_t.has(self, x: "direntry_t") -> bool
|
|
|
|
ida_dirtree.direntry_vec_t.inject(self, s: "direntry_t", len: "size_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t.insert(self, it: "direntry_t", x: "direntry_t") -> "qvector< direntry_t >::iterator"
|
|
|
|
ida_dirtree.direntry_vec_t.pop_back(self) -> None
|
|
|
|
ida_dirtree.direntry_vec_t.push_back(self, *args) -> "direntry_t &"
|
|
|
|
ida_dirtree.direntry_vec_t.qclear(self) -> None
|
|
|
|
ida_dirtree.direntry_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t.resize(self, *args) -> None
|
|
|
|
ida_dirtree.direntry_vec_t.size(self) -> "size_t"
|
|
|
|
ida_dirtree.direntry_vec_t.swap(self, r: "direntry_vec_t") -> None
|
|
|
|
ida_dirtree.direntry_vec_t.truncate(self) -> None
|
|
|
|
ida_dirtree.dirspec_t
|
|
|
|
ida_dirtree.dirspec_t.__disown__(self)
|
|
|
|
ida_dirtree.dirspec_t.__init__(self, nm: str = None, f: int = 0)
|
|
|
|
ida_dirtree.dirspec_t.get_attrs(self, inode: "inode_t") -> str
|
|
|
|
ida_dirtree.dirspec_t.get_inode(self, dirpath: str, name: str) -> "inode_t"
|
|
get the entry inode in the specified directory
|
|
|
|
@param dirpath: the absolute directory path with trailing slash
|
|
@param name: the entry name in the directory
|
|
@returns the entry inode
|
|
|
|
ida_dirtree.dirspec_t.get_name(self, inode: "inode_t", name_flags: int = DTN_FULL_NAME) -> bool
|
|
get the entry name. for example, the structure name
|
|
|
|
@param inode: inode number of the entry
|
|
@param name_flags: how exactly the name should be retrieved. combination of bits for get_...name() methods bits
|
|
@returns false if the entry does not exist.
|
|
|
|
ida_dirtree.dirspec_t.is_orderable(self) -> bool
|
|
|
|
ida_dirtree.dirspec_t.rename_inode(self, inode: "inode_t", newname: str) -> bool
|
|
rename the entry
|
|
|
|
@returns success
|
|
|
|
ida_dirtree.dirspec_t.unlink_inode(self, inode: "inode_t") -> None
|
|
event: unlinked an inode
|
|
|
|
|
|
ida_dirtree.dirtree_cursor_t
|
|
|
|
ida_dirtree.dirtree_cursor_t.__eq__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.__ge__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.__gt__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.__init__(self, *args)
|
|
|
|
ida_dirtree.dirtree_cursor_t.__le__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.__lt__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.__ne__(self, r: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.compare(self, r: "dirtree_cursor_t") -> int
|
|
|
|
ida_dirtree.dirtree_cursor_t.is_root_cursor(self) -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_t.parent
|
|
the parent directory
|
|
|
|
ida_dirtree.dirtree_cursor_t.rank
|
|
the index into the parent directory
|
|
|
|
ida_dirtree.dirtree_cursor_t.root_cursor() -> "dirtree_cursor_t"
|
|
|
|
ida_dirtree.dirtree_cursor_t.set_root_cursor(self) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_t.valid(self) -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__eq__(self, r: "dirtree_cursor_vec_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__getitem__(self, i: "size_t") -> "dirtree_cursor_t const &"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__init__(self, *args)
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__len__(self) -> "size_t"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__ne__(self, r: "dirtree_cursor_vec_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.__setitem__(self, i: "size_t", v: "dirtree_cursor_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t._del(self, x: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.add_unique(self, x: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.append(self, x: "dirtree_cursor_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.at(self, _idx: "size_t") -> "dirtree_cursor_t const &"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.begin(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.capacity(self) -> "size_t"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.clear(self) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.empty(self) -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.end(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.erase(self, *args) -> "qvector< dirtree_cursor_t >::iterator"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.extend(self, x: "dirtree_cursor_vec_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.extract(self) -> "dirtree_cursor_t *"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.find(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.grow(self, *args) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.has(self, x: "dirtree_cursor_t") -> bool
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.inject(self, s: "dirtree_cursor_t", len: "size_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.insert(self, it: "dirtree_cursor_t", x: "dirtree_cursor_t") -> "qvector< dirtree_cursor_t >::iterator"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.pop_back(self) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.push_back(self, *args) -> "dirtree_cursor_t &"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.qclear(self) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.resize(self, *args) -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.size(self) -> "size_t"
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.swap(self, r: "dirtree_cursor_vec_t") -> None
|
|
|
|
ida_dirtree.dirtree_cursor_vec_t.truncate(self) -> None
|
|
|
|
ida_dirtree.dirtree_iterator_t
|
|
|
|
ida_dirtree.dirtree_iterator_t.__init__(self)
|
|
|
|
ida_dirtree.dirtree_selection_t
|
|
|
|
ida_dirtree.dirtree_selection_t.__init__(self)
|
|
|
|
ida_dirtree.dirtree_t
|
|
|
|
ida_dirtree.dirtree_t.__init__(self, ds: "dirspec_t")
|
|
|
|
ida_dirtree.dirtree_t.change_rank(self, path: str, rank_delta: "ssize_t") -> "dterr_t"
|
|
Change ordering rank of an item.
|
|
|
|
@param path: path to the item
|
|
@param rank_delta: the amount of the change. positive numbers mean to move down in the list; negative numbers mean to move up.
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.chdir(self, path: str) -> "dterr_t"
|
|
Change current directory
|
|
|
|
@param path: new current directory
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.errstr(err: "dterr_t") -> str
|
|
Get textual representation of the error code.
|
|
|
|
ida_dirtree.dirtree_t.find_entry(self, de: "direntry_t") -> "dirtree_cursor_t"
|
|
Find the cursor corresponding to an entry of a directory
|
|
|
|
@param de: directory entry
|
|
@returns cursor corresponding to the directory entry
|
|
|
|
ida_dirtree.dirtree_t.findfirst(self, ff: "dirtree_iterator_t", pattern: str) -> bool
|
|
Start iterating over files in a directory
|
|
|
|
@param ff: directory iterator. it will be initialized by the function
|
|
@param pattern: pattern to search for
|
|
@returns success
|
|
|
|
ida_dirtree.dirtree_t.findnext(self, ff: "dirtree_iterator_t") -> bool
|
|
Continue iterating over files in a directory
|
|
|
|
@param ff: directory iterator
|
|
@returns success
|
|
|
|
ida_dirtree.dirtree_t.get_abspath(self, *args) -> str
|
|
This function has the following signatures:
|
|
|
|
0. get_abspath(cursor: const dirtree_cursor_t &, name_flags: int=DTN_FULL_NAME) -> str
|
|
1. get_abspath(relpath: str) -> str
|
|
|
|
# 0: get_abspath(cursor: const dirtree_cursor_t &, name_flags: int=DTN_FULL_NAME) -> str
|
|
|
|
Get absolute path pointed by the cursor
|
|
|
|
@returns path; empty string if error
|
|
|
|
# 1: get_abspath(relpath: str) -> str
|
|
|
|
Construct an absolute path from the specified relative path. This function verifies the directory part of the specified path. The last component of the specified path is not verified.
|
|
|
|
@returns path. empty path means wrong directory part of RELPATH
|
|
|
|
ida_dirtree.dirtree_t.get_dir_size(self, diridx: "diridx_t") -> "ssize_t"
|
|
Get dir size
|
|
|
|
@param diridx: directory index
|
|
@returns number of entries under this directory; if error, return -1
|
|
|
|
ida_dirtree.dirtree_t.get_entry_attrs(self, de: "direntry_t") -> str
|
|
Get entry attributes
|
|
|
|
@param de: directory entry
|
|
@returns name
|
|
|
|
ida_dirtree.dirtree_t.get_entry_name(self, de: "direntry_t", name_flags: int = DTN_FULL_NAME) -> str
|
|
Get entry name
|
|
|
|
@param de: directory entry
|
|
@param name_flags: how exactly the name should be retrieved. combination of bits for get_...name() methods bits
|
|
@returns name
|
|
|
|
ida_dirtree.dirtree_t.get_id(self) -> str
|
|
netnode name
|
|
|
|
ida_dirtree.dirtree_t.get_parent_cursor(self, cursor: "dirtree_cursor_t") -> "dirtree_cursor_t"
|
|
Get parent cursor.
|
|
|
|
@param cursor: a valid ditree cursor
|
|
@returns cursor's parent
|
|
|
|
ida_dirtree.dirtree_t.get_rank(self, diridx: "diridx_t", de: "direntry_t") -> "ssize_t"
|
|
Get ordering rank of an item.
|
|
|
|
@param diridx: index of the parent directory
|
|
@param de: directory entry
|
|
@returns number in a range of [0..n) where n is the number of entries in the parent directory. -1 if error
|
|
|
|
ida_dirtree.dirtree_t.getcwd(self) -> str
|
|
Get current directory
|
|
|
|
@returns the current working directory
|
|
|
|
ida_dirtree.dirtree_t.is_dir_ordered(self, diridx: "diridx_t") -> bool
|
|
Is dir ordered?
|
|
|
|
@returns true if the dirtree has natural ordering
|
|
|
|
ida_dirtree.dirtree_t.is_orderable(self) -> bool
|
|
Is dirtree orderable?
|
|
|
|
@returns true if the dirtree is orderable
|
|
|
|
ida_dirtree.dirtree_t.isdir(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. isdir(path: str) -> bool
|
|
1. isdir(de: const direntry_t &) -> bool
|
|
|
|
# 0: isdir(path: str) -> bool
|
|
|
|
Is a directory?
|
|
|
|
@returns true if the specified path is a directory
|
|
|
|
# 1: isdir(de: const direntry_t &) -> bool
|
|
|
|
ida_dirtree.dirtree_t.isfile(self, *args) -> bool
|
|
This function has the following signatures:
|
|
|
|
0. isfile(path: str) -> bool
|
|
1. isfile(de: const direntry_t &) -> bool
|
|
|
|
# 0: isfile(path: str) -> bool
|
|
|
|
Is a file?
|
|
|
|
@returns true if the specified path is a file
|
|
|
|
# 1: isfile(de: const direntry_t &) -> bool
|
|
|
|
ida_dirtree.dirtree_t.link(self, *args) -> "dterr_t"
|
|
This function has the following signatures:
|
|
|
|
0. link(path: str) -> dterr_t
|
|
1. link(inode: inode_t) -> dterr_t
|
|
|
|
# 0: link(path: str) -> dterr_t
|
|
|
|
Add a file item into a directory.
|
|
|
|
@returns dterr_t error code
|
|
|
|
# 1: link(inode: inode_t) -> dterr_t
|
|
|
|
Add an inode into the current directory
|
|
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.load(self) -> bool
|
|
Load the tree structure from the netnode. If dirspec_t::id is empty, the operation will be considered a success. In addition, calling load() more than once will not do anything, and will be considered a success.
|
|
|
|
@returns success
|
|
|
|
ida_dirtree.dirtree_t.mkdir(self, path: str) -> "dterr_t"
|
|
Create a directory.
|
|
|
|
@param path: directory to create
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.notify_dirtree(self, added: bool, inode: "inode_t") -> None
|
|
Notify dirtree about a change of an inode.
|
|
|
|
@param added: are we adding or deleting an inode?
|
|
@param inode: inode in question
|
|
|
|
ida_dirtree.dirtree_t.rename(self, _from: str, to: str) -> "dterr_t"
|
|
Rename a directory entry.
|
|
|
|
@param to: destination path
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.resolve_cursor(self, cursor: "dirtree_cursor_t") -> "direntry_t"
|
|
Resolve cursor
|
|
|
|
@param cursor: to analyze
|
|
@returns directory entry; if the cursor is bad, the resolved entry will be invalid.
|
|
|
|
ida_dirtree.dirtree_t.resolve_path(self, path: str) -> "direntry_t"
|
|
Resolve path
|
|
|
|
@param path: to analyze
|
|
@returns directory entry
|
|
|
|
ida_dirtree.dirtree_t.rmdir(self, path: str) -> "dterr_t"
|
|
Remove a directory.
|
|
|
|
@param path: directory to delete
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_t.save(self) -> bool
|
|
Save the tree structure to the netnode.
|
|
|
|
@returns success
|
|
|
|
ida_dirtree.dirtree_t.set_id(self, nm: str) -> None
|
|
|
|
ida_dirtree.dirtree_t.set_natural_order(self, diridx: "diridx_t", enable: bool) -> bool
|
|
Enable/disable natural inode order in a directory.
|
|
|
|
@param diridx: directory index
|
|
@param enable: action to do TRUE - enable ordering: re-order existing entries so that all subdirs are at the to beginning of the list, file entries are sorted and placed after the subdirs FALSE - disable ordering, no changes to existing entries
|
|
@returns SUCCESS
|
|
|
|
ida_dirtree.dirtree_t.traverse(self, v: "dirtree_visitor_t") -> "ssize_t"
|
|
Traverse dirtree, and be notified at each entry If the the visitor returns anything other than 0, iteration will stop, and that value returned. The tree is traversed using a depth-first algorithm. It is forbidden to modify the dirtree_t during traversal; doing so will result in undefined behavior.
|
|
|
|
@param v: the callback
|
|
@returns 0, or whatever the visitor returned
|
|
|
|
ida_dirtree.dirtree_t.unlink(self, *args) -> "dterr_t"
|
|
This function has the following signatures:
|
|
|
|
0. unlink(path: str) -> dterr_t
|
|
1. unlink(inode: inode_t) -> dterr_t
|
|
|
|
# 0: unlink(path: str) -> dterr_t
|
|
|
|
Remove a file item from a directory.
|
|
|
|
@returns dterr_t error code
|
|
|
|
# 1: unlink(inode: inode_t) -> dterr_t
|
|
|
|
Remove an inode from the current directory
|
|
|
|
@returns dterr_t error code
|
|
|
|
ida_dirtree.dirtree_visitor_t
|
|
|
|
ida_dirtree.dirtree_visitor_t.__disown__(self)
|
|
|
|
ida_dirtree.dirtree_visitor_t.__init__(self)
|
|
|
|
ida_dirtree.dirtree_visitor_t.visit(self, c: "dirtree_cursor_t", de: "direntry_t") -> "ssize_t"
|
|
Will be called for each entry in the dirtree_t If something other than 0 is returned, iteration will stop.
|
|
|
|
@param c: the current cursor
|
|
@param de: the current entry
|
|
@returns 0 to keep iterating, or anything else to stop
|
|
|
|
ida_dirtree.get_std_dirtree(id: "dirtree_id_t") -> "dirtree_t *"
|
|
|
|
ida_entry
|
|
Functions that deal with entry points.
|
|
|
|
Exported functions are considered as entry points as well.
|
|
IDA maintains list of entry points to the program. Each entry point:
|
|
* has an address
|
|
* has a name
|
|
* may have an ordinal number
|
|
|
|
|
|
|
|
|
|
ida_entry.AEF_IDBENC
|
|
the name is given in the IDB encoding; non-ASCII bytes will be decoded accordingly. Specifying AEF_IDBENC also implies AEF_NODUMMY
|
|
|
|
|
|
ida_entry.AEF_NODUMMY
|
|
automatically prepend the name with '_' if it begins with a dummy suffix. See also AEF_IDBENC
|
|
|
|
|
|
ida_entry.AEF_UTF8
|
|
the name is given in UTF-8 (default)
|
|
|
|
ida_entry.add_entry(ord: int, ea: ida_idaapi.ea_t, name: str, makecode: bool, flags: int = 0) -> bool
|
|
Add an entry point to the list of entry points.
|
|
|
|
@param ord: ordinal number if ordinal number is equal to 'ea' then ordinal is not used
|
|
@param ea: linear address
|
|
@param name: name of entry point. If the specified location already has a name, the old name will be appended to the regular comment. If name == nullptr, then the old name will be retained.
|
|
@param makecode: should the kernel convert bytes at the entry point to instruction(s)
|
|
@param flags: See AEF_*
|
|
@returns success (currently always true)
|
|
|
|
ida_entry.get_entry(ord: int) -> ida_idaapi.ea_t
|
|
Get entry point address by its ordinal
|
|
|
|
@param ord: ordinal number of entry point
|
|
@returns address or BADADDR
|
|
|
|
ida_entry.get_entry_forwarder(ord: int) -> str
|
|
Get forwarder name for the entry point by its ordinal.
|
|
|
|
@param ord: ordinal number of entry point
|
|
@returns size of entry forwarder name or -1
|
|
|
|
ida_entry.get_entry_name(ord: int) -> str
|
|
Get name of the entry point by its ordinal.
|
|
|
|
@param ord: ordinal number of entry point
|
|
@returns size of entry name or -1
|
|
|
|
ida_entry.get_entry_ordinal(idx: "size_t") -> int
|
|
Get ordinal number of an entry point.
|
|
|
|
@param idx: internal number of entry point. Should be in the range 0..get_entry_qty()-1
|
|
@returns ordinal number or 0.
|
|
|
|
ida_entry.get_entry_qty() -> "size_t"
|
|
Get number of entry points.
|
|
|
|
ida_entry.rename_entry(ord: int, name: str, flags: int = 0) -> bool
|
|
Rename entry point.
|
|
|
|
@param ord: ordinal number of the entry point
|
|
@param name: name of entry point. If the specified location already has a name, the old name will be appended to a repeatable comment.
|
|
@param flags: See AEF_*
|
|
@returns success
|
|
|
|
ida_entry.set_entry_forwarder(ord: int, name: str, flags: int = 0) -> bool
|
|
Set forwarder name for ordinal.
|
|
|
|
@param ord: ordinal number of the entry point
|
|
@param name: forwarder name for entry point.
|
|
@param flags: See AEF_*
|
|
@returns success
|
|
|
|
ida_expr
|
|
thread safe function. may be called
|
|
|
|
ida_expr.CPL_DEL_MACROS
|
|
delete macros at the end of compilation
|
|
|
|
ida_expr.CPL_ONLY_SAFE
|
|
allow calls of only thread-safe functions
|
|
|
|
ida_expr.CPL_USE_LABELS
|
|
allow program labels in the script
|
|
|
|
ida_expr.EXTFUN_BASE
|
|
requires open database.
|
|
|
|
ida_expr.EXTFUN_NORET
|
|
does not return. the interpreter may clean up its state before calling it.
|
|
|
|
|
|
ida_expr.EXTFUN_SAFE
|
|
thread safe function. may be called from any thread.
|
|
|
|
|
|
ida_expr.IDC_LANG_EXT
|
|
IDC script extension.
|
|
|
|
ida_expr.VARSLICE_SINGLE
|
|
return single index (i2 is ignored)
|
|
|
|
ida_expr.VREF_COPY
|
|
copy the result to the input var (v)
|
|
|
|
ida_expr.VREF_LOOP
|
|
dereference until we get a non VT_REF
|
|
|
|
ida_expr.VREF_ONCE
|
|
dereference only once, do not loop
|
|
|
|
ida_expr.VT_FLOAT
|
|
Floating point (see idc_value_t::e)
|
|
|
|
ida_expr.VT_FUNC
|
|
Function (see idc_value_t::funcidx)
|
|
|
|
ida_expr.VT_INT64
|
|
i64
|
|
|
|
ida_expr.VT_LONG
|
|
Integer (see idc_value_t::num)
|
|
|
|
ida_expr.VT_OBJ
|
|
Object (see idc_value_t::obj)
|
|
|
|
ida_expr.VT_PVOID
|
|
void *
|
|
|
|
ida_expr.VT_REF
|
|
Reference.
|
|
|
|
ida_expr.VT_STR
|
|
String (see qstr() and similar functions)
|
|
|
|
ida_expr.VT_WILD
|
|
Function with arbitrary number of arguments. The actual number of arguments will be passed in idc_value_t::num. This value should not be used for idc_value_t.
|
|
|
|
|
|
ida_expr._IdcFunction
|
|
Internal class that calls pyw_call_idc_func() with a context
|
|
|
|
ida_expr._IdcFunction.__call__(self, args, res)
|
|
|
|
ida_expr._IdcFunction.__init__(self, ctxptr)
|
|
|
|
ida_expr.add_idc_class(name: str, super: "idc_class_t const *" = None) -> "idc_class_t *"
|
|
Create a new IDC class.
|
|
|
|
@param name: name of the new class
|
|
@param super: the base class for the new class. if the new class is not based on any other class, pass nullptr
|
|
@returns pointer to the created class. If such a class already exists, a pointer to it will be returned. Pointers to other existing classes may be invalidated by this call.
|
|
|
|
ida_expr.add_idc_func(name, fp, args, defvals = , flags = 0)
|
|
Add an IDC function. This function does not modify the predefined kernel functions. Example:
|
|
error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res)
|
|
|
|
msg("myfunc is called with arg0=%a and arg1=%s\n", argv[0].num, argv[1].str);
|
|
res->num = 5; // let's return 5
|
|
return eOk;
|
|
|
|
const char myfunc5_args[] = { VT_LONG, VT_STR, 0 };
|
|
const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, nullptr, 0, EXTFUN_BASE };
|
|
|
|
after this:
|
|
|
|
|
|
there is a new IDC function which can be called like this:
|
|
"test");
|
|
|
|
|
|
|
|
@returns success
|
|
|
|
ida_expr.add_idc_gvar(name: str) -> "idc_value_t *"
|
|
Add global IDC variable.
|
|
|
|
@param name: name of the global variable
|
|
@returns pointer to the created variable or existing variable. NB: the returned pointer is valid until a new global var is added.
|
|
|
|
ida_expr.call_idc_func__(*args)
|
|
|
|
ida_expr.compile_idc_file(nonnul_line: str) -> str
|
|
|
|
ida_expr.compile_idc_snippet(func: str, text: str, resolver: "idc_resolver_t *" = None, only_safe_funcs: bool = False) -> str
|
|
Compile text with IDC statements.
|
|
|
|
@param func: name of the function to create out of the snippet
|
|
@param text: text to compile
|
|
@param resolver: callback object to get values of undefined variables This object will be called if IDC function contains references to undefined variables. May be nullptr.
|
|
@param only_safe_funcs: if true, any calls to functions without EXTFUN_SAFE flag will lead to a compilation error.
|
|
@retval true: ok
|
|
@retval false: error, see errbuf
|
|
|
|
ida_expr.compile_idc_text(nonnul_line: str) -> str
|
|
|
|
ida_expr.copy_idcv(dst: "idc_value_t", src: "idc_value_t") -> "error_t"
|
|
Copy 'src' to 'dst'. For idc objects only a reference is copied.
|
|
|
|
|
|
ida_expr.create_idcv_ref(ref: "idc_value_t", v: "idc_value_t") -> bool
|
|
Create a variable reference. Currently only references to global variables can be created.
|
|
|
|
@param ref: ptr to the result
|
|
@param v: variable to reference
|
|
@returns success
|
|
|
|
ida_expr.deep_copy_idcv(dst: "idc_value_t", src: "idc_value_t") -> "error_t"
|
|
Deep copy an IDC object. This function performs deep copy of idc objects. If 'src' is not an object, copy_idcv() will be called
|
|
|
|
|
|
ida_expr.del_idc_func(name)
|
|
Delete an IDC function
|
|
|
|
|
|
ida_expr.del_idcv_attr(obj: "idc_value_t", attr: str) -> "error_t"
|
|
Delete an object attribute.
|
|
|
|
@param obj: variable that holds an object reference
|
|
@param attr: attribute name
|
|
@returns error code, eOk on success
|
|
|
|
ida_expr.deref_idcv(v: "idc_value_t", vref_flags: int) -> "idc_value_t *"
|
|
Dereference a VT_REF variable.
|
|
|
|
@param v: variable to dereference
|
|
@param vref_flags: Dereference IDC variable flags
|
|
@returns pointer to the dereference result or nullptr. If returns nullptr, qerrno is set to eExecBadRef "Illegal variable reference"
|
|
|
|
ida_expr.eExecThrow
|
|
See return value of idc_func_t.
|
|
|
|
ida_expr.eval_expr(rv: "idc_value_t", where: ida_idaapi.ea_t, line: str) -> str
|
|
Compile and calculate an expression.
|
|
|
|
@param rv: pointer to the result
|
|
@param where: the current linear address in the addressing space of the program being disassembled. If will be used to resolve names of local variables etc. if not applicable, then should be BADADDR.
|
|
@param line: the expression to evaluate
|
|
@retval true: ok
|
|
@retval false: error, see errbuf
|
|
|
|
ida_expr.eval_idc_expr(rv: "idc_value_t", where: ida_idaapi.ea_t, line: str) -> str
|
|
Same as eval_expr(), but will always use the IDC interpreter regardless of the currently installed extlang.
|
|
|
|
|
|
ida_expr.exec_idc_script(result: "idc_value_t", path: str, func: str, args: "idc_value_t", argsnum: "size_t") -> str
|
|
Compile and execute IDC function(s) from file.
|
|
|
|
@param result: ptr to idc_value_t to hold result of the function. If execution fails, this variable will contain the exception information. You may pass nullptr if you are not interested in the returned value.
|
|
@param path: text file containing text of IDC functions
|
|
@param func: function name to execute
|
|
@param args: array of parameters
|
|
@param argsnum: number of parameters to pass to 'fname' This number should be equal to number of parameters the function expects.
|
|
@retval true: ok
|
|
@retval false: error, see errbuf
|
|
|
|
ida_expr.exec_system_script(file: str, complain_if_no_file: bool = True) -> bool
|
|
Compile and execute "main" function from system file.
|
|
|
|
@param file: file name with IDC function(s). The file will be searched using get_idc_filename().
|
|
@param complain_if_no_file: * 1: display warning if the file is not found
|
|
* 0: don't complain if file doesn't exist
|
|
@retval 1: ok, file is compiled and executed
|
|
@retval 0: failure, compilation or execution error, warning is displayed
|
|
|
|
ida_expr.find_idc_class(name: str) -> "idc_class_t *"
|
|
Find an existing IDC class by its name.
|
|
|
|
@param name: name of the class
|
|
@returns pointer to the class or nullptr. The returned pointer is valid until a new call to add_idc_class()
|
|
|
|
ida_expr.find_idc_func(prefix: str, n: int = 0) -> str
|
|
|
|
ida_expr.find_idc_gvar(name: str) -> "idc_value_t *"
|
|
Find an existing global IDC variable by its name.
|
|
|
|
@param name: name of the global variable
|
|
@returns pointer to the variable or nullptr. NB: the returned pointer is valid until a new global var is added. FIXME: it is difficult to use this function in a thread safe manner
|
|
|
|
ida_expr.first_idcv_attr(obj: "idc_value_t") -> str
|
|
|
|
ida_expr.free_idcv(v: "idc_value_t") -> None
|
|
Free storage used by VT_STR/VT_OBJ IDC variables. After this call the variable has a numeric value 0
|
|
|
|
|
|
ida_expr.get_idc_filename(file: str) -> str
|
|
Get full name of IDC file name. Search for file in list of include directories, IDCPATH directory and system directories.
|
|
|
|
@param file: file name without full path
|
|
@returns nullptr is file not found. otherwise returns pointer to buf
|
|
|
|
ida_expr.get_idcv_attr(res: "idc_value_t", obj: "idc_value_t", attr: str, may_use_getattr: bool = False) -> "error_t"
|
|
Get an object attribute.
|
|
|
|
@param res: buffer for the attribute value
|
|
@param obj: variable that holds an object reference. if obj is nullptr it searches global variables, then user functions
|
|
@param attr: attribute name
|
|
@param may_use_getattr: may call getattr functions to calculate the attribute if it does not exist
|
|
@returns error code, eOk on success
|
|
|
|
ida_expr.get_idcv_class_name(obj: "idc_value_t") -> str
|
|
Retrieves the IDC object class name.
|
|
|
|
@param obj: class instance variable
|
|
@returns error code, eOk on success
|
|
|
|
ida_expr.get_idcv_slice(res: "idc_value_t", v: "idc_value_t", i1: int, i2: int, flags: int = 0) -> "error_t"
|
|
Get slice.
|
|
|
|
@param res: output variable that will contain the slice
|
|
@param v: input variable (string or object)
|
|
@param i1: slice start index
|
|
@param i2: slice end index (excluded)
|
|
@param flags: IDC variable slice flags or 0
|
|
@returns eOk if success
|
|
|
|
ida_expr.highlighter_cbs_t
|
|
|
|
ida_expr.highlighter_cbs_t.__disown__(self)
|
|
|
|
ida_expr.highlighter_cbs_t.__init__(self)
|
|
|
|
ida_expr.highlighter_cbs_t.cur_block_state(self) -> int
|
|
|
|
ida_expr.highlighter_cbs_t.prev_block_state(self) -> int
|
|
|
|
ida_expr.highlighter_cbs_t.set_block_state(self, arg0: int) -> None
|
|
|
|
ida_expr.highlighter_cbs_t.set_style(self, arg0: int, arg1: int, arg2: "syntax_highlight_style") -> None
|
|
|
|
ida_expr.idc_global_t
|
|
|
|
ida_expr.idc_global_t.__init__(self, *args)
|
|
|
|
ida_expr.idc_value_t
|
|
|
|
ida_expr.idc_value_t.__init__(self, *args)
|
|
|
|
ida_expr.idc_value_t._create_empty_string(self) -> None
|
|
|
|
ida_expr.idc_value_t.c_str(self) -> str
|
|
VT_STR
|
|
|
|
ida_expr.idc_value_t.clear(self) -> None
|
|
See free_idcv()
|
|
|
|
ida_expr.idc_value_t.create_empty_string(self) -> None
|
|
|
|
ida_expr.idc_value_t.e
|
|
VT_FLOAT
|
|
|
|
ida_expr.idc_value_t.funcidx
|
|
VT_FUNC
|
|
|
|
ida_expr.idc_value_t.i64
|
|
VT_INT64
|
|
|
|
ida_expr.idc_value_t.is_convertible(self) -> bool
|
|
Convertible types are VT_LONG, VT_FLOAT, VT_INT64, and VT_STR.
|
|
|
|
ida_expr.idc_value_t.is_integral(self) -> bool
|
|
Does value represent a whole number?
|
|
|
|
|
|
ida_expr.idc_value_t.is_zero(self) -> bool
|
|
Does value represent the integer 0?
|
|
|
|
ida_expr.idc_value_t.num
|
|
VT_LONG
|
|
|
|
ida_expr.idc_value_t.pvoid
|
|
VT_PVOID
|
|
|
|
ida_expr.idc_value_t.qstr(self) -> str
|
|
VT_STR
|
|
|
|
ida_expr.idc_value_t.reserve
|
|
VT_STR.
|
|
|
|
ida_expr.idc_value_t.set_float(self, f: "fpvalue_t const &") -> None
|
|
|
|
ida_expr.idc_value_t.set_int64(self, v: "int64") -> None
|
|
|
|
ida_expr.idc_value_t.set_long(self, v: int) -> None
|
|
|
|
ida_expr.idc_value_t.set_pvoid(self, p: "void *") -> None
|
|
|
|
ida_expr.idc_value_t.set_string(self, *args) -> None
|
|
|
|
ida_expr.idc_value_t.swap(self, v: "idc_value_t") -> None
|
|
Set this = r and v = this.
|
|
|
|
ida_expr.idc_value_t.u_str(self) -> "uchar const *"
|
|
VT_STR
|
|
|
|
ida_expr.idc_value_t.vtype
|
|
IDC value types
|
|
|
|
ida_expr.idc_values_t
|
|
|
|
ida_expr.idc_values_t.__getitem__(self, i: "size_t") -> "idc_value_t const &"
|
|
|
|
ida_expr.idc_values_t.__init__(self, *args)
|
|
|
|
ida_expr.idc_values_t.__len__(self) -> "size_t"
|
|
|
|
ida_expr.idc_values_t.__setitem__(self, i: "size_t", v: "idc_value_t") -> None
|
|
|
|
ida_expr.idc_values_t.append(self, x: "idc_value_t") -> None
|
|
|
|
ida_expr.idc_values_t.at(self, _idx: "size_t") -> "idc_value_t const &"
|
|
|
|
ida_expr.idc_values_t.begin(self, *args) -> "qvector< idc_value_t >::const_iterator"
|
|
|
|
ida_expr.idc_values_t.capacity(self) -> "size_t"
|
|
|
|
ida_expr.idc_values_t.clear(self) -> None
|
|
|
|
ida_expr.idc_values_t.empty(self) -> bool
|
|
|
|
ida_expr.idc_values_t.end(self, *args) -> "qvector< idc_value_t >::const_iterator"
|
|
|
|
ida_expr.idc_values_t.erase(self, *args) -> "qvector< idc_value_t >::iterator"
|
|
|
|
ida_expr.idc_values_t.extend(self, x: "idc_values_t") -> None
|
|
|
|
ida_expr.idc_values_t.extract(self) -> "idc_value_t *"
|
|
|
|
ida_expr.idc_values_t.grow(self, *args) -> None
|
|
|
|
ida_expr.idc_values_t.inject(self, s: "idc_value_t", len: "size_t") -> None
|
|
|
|
ida_expr.idc_values_t.insert(self, it: "idc_value_t", x: "idc_value_t") -> "qvector< idc_value_t >::iterator"
|
|
|
|
ida_expr.idc_values_t.pop_back(self) -> None
|
|
|
|
ida_expr.idc_values_t.push_back(self, *args) -> "idc_value_t &"
|
|
|
|
ida_expr.idc_values_t.qclear(self) -> None
|
|
|
|
ida_expr.idc_values_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_expr.idc_values_t.resize(self, *args) -> None
|
|
|
|
ida_expr.idc_values_t.size(self) -> "size_t"
|
|
|
|
ida_expr.idc_values_t.swap(self, r: "idc_values_t") -> None
|
|
|
|
ida_expr.idc_values_t.truncate(self) -> None
|
|
|
|
ida_expr.idcv_float(v: "idc_value_t") -> "error_t"
|
|
Convert IDC variable to a floating point.
|
|
|
|
ida_expr.idcv_int64(v: "idc_value_t") -> "error_t"
|
|
Convert IDC variable to a 64bit number.
|
|
|
|
@returns v = 0 if impossible to convert to int64
|
|
|
|
ida_expr.idcv_long(v: "idc_value_t") -> "error_t"
|
|
Convert IDC variable to a long (32/64bit) number.
|
|
|
|
@returns v = 0 if impossible to convert to long
|
|
|
|
ida_expr.idcv_num(v: "idc_value_t") -> "error_t"
|
|
Convert IDC variable to a long number.
|
|
|
|
@returns * v = 0 if IDC variable = "false" string
|
|
* v = 1 if IDC variable = "true" string
|
|
* v = number if IDC variable is number or string containing a number
|
|
* eTypeConflict if IDC variable = empty string
|
|
|
|
ida_expr.idcv_object(v: "idc_value_t", icls: "idc_class_t const *" = None) -> "error_t"
|
|
Create an IDC object. The original value of 'v' is discarded (freed).
|
|
|
|
@param v: variable to hold the object. any previous value will be cleaned
|
|
@param icls: ptr to the desired class. nullptr means "object" class this ptr must be returned by add_idc_class() or find_idc_class()
|
|
@returns always eOk
|
|
|
|
ida_expr.idcv_string(v: "idc_value_t") -> "error_t"
|
|
Convert IDC variable to a text string.
|
|
|
|
ida_expr.last_idcv_attr(obj: "idc_value_t") -> str
|
|
|
|
ida_expr.move_idcv(dst: "idc_value_t", src: "idc_value_t") -> "error_t"
|
|
Move 'src' to 'dst'. This function is more effective than copy_idcv since it never copies big amounts of data.
|
|
|
|
|
|
ida_expr.next_idcv_attr(obj: "idc_value_t", attr: str) -> str
|
|
|
|
ida_expr.prev_idcv_attr(obj: "idc_value_t", attr: str) -> str
|
|
|
|
ida_expr.print_idcv(v: "idc_value_t", name: str = None, indent: int = 0) -> str
|
|
Get text representation of idc_value_t.
|
|
|
|
ida_expr.py_add_idc_func(name: str, fp_ptr: "size_t", args: str, defvals: "idc_values_t", flags: int) -> bool
|
|
|
|
ida_expr.py_get_call_idc_func() -> "size_t"
|
|
|
|
ida_expr.pyw_convert_defvals(out: "idc_values_t", py_seq: "PyObject *") -> bool
|
|
|
|
ida_expr.pyw_register_idc_func(name: str, args: str, py_fp: "PyObject *") -> "size_t"
|
|
|
|
ida_expr.pyw_unregister_idc_func(ctxptr: "size_t") -> bool
|
|
|
|
ida_expr.set_header_path(path: str, add: bool) -> bool
|
|
Set or append a header path. IDA looks for the include files in the appended header paths, then in the ida executable directory.
|
|
|
|
@param path: list of directories to add (separated by ';') may be nullptr, in this case nothing is added
|
|
@param add: true: append. false: remove old paths.
|
|
@retval true: success
|
|
@retval false: no memory
|
|
|
|
ida_expr.set_idcv_attr(obj: "idc_value_t", attr: str, value: "idc_value_t", may_use_setattr: bool = False) -> "error_t"
|
|
Set an object attribute.
|
|
|
|
@param obj: variable that holds an object reference. if obj is nullptr then it tries to modify a global variable with the attribute name
|
|
@param attr: attribute name
|
|
@param value: new attribute value
|
|
@param may_use_setattr: may call setattr functions for the class
|
|
@returns error code, eOk on success
|
|
|
|
ida_expr.set_idcv_slice(v: "idc_value_t", i1: int, i2: int, _in: "idc_value_t", flags: int = 0) -> "error_t"
|
|
Set slice.
|
|
|
|
@param v: variable to modify (string or object)
|
|
@param i1: slice start index
|
|
@param i2: slice end index (excluded)
|
|
@param flags: IDC variable slice flags or 0
|
|
@returns eOk on success
|
|
|
|
ida_expr.swap_idcvs(v1: "idc_value_t", v2: "idc_value_t") -> None
|
|
Swap 2 variables.
|
|
|
|
ida_expr.throw_idc_exception(r: "idc_value_t", desc: str) -> "error_t"
|
|
Create an idc execution exception object. This helper function can be used to return an exception from C++ code to IDC. In other words this function can be called from idc_func_t() callbacks. Sample usage: if ( !ok ) return throw_idc_exception(r, "detailed error msg");
|
|
|
|
@param r: object to hold the exception object
|
|
@param desc: exception description
|
|
@returns eExecThrow
|
|
|
|
ida_fixup
|
|
Functions that deal with fixup information.
|
|
|
|
A loader should setup fixup information using set_fixup().
|
|
|
|
|
|
ida_fixup.FIXUPF_CREATED
|
|
fixup was not present in the input file
|
|
|
|
ida_fixup.FIXUPF_EXTDEF
|
|
target is a location (otherwise - segment). Use this bit if the target is a symbol rather than an offset from the beginning of a segment.
|
|
|
|
|
|
ida_fixup.FIXUPF_LOADER_MASK
|
|
additional flags. The bits from this mask are not stored in the database and can be used by the loader at its discretion.
|
|
|
|
|
|
ida_fixup.FIXUPF_REL
|
|
fixup is relative to the linear address `base`. Otherwise fixup is relative to the start of the segment with `sel` selector.
|
|
|
|
|
|
ida_fixup.FIXUPF_UNUSED
|
|
fixup is ignored by IDA
|
|
* disallows the kernel to convert operands
|
|
* this fixup is not used during output
|
|
|
|
|
|
|
|
|
|
ida_fixup.FIXUP_CUSTOM
|
|
start of the custom types range
|
|
|
|
ida_fixup.FIXUP_HI16
|
|
high 16 bits of 32bit offset
|
|
|
|
ida_fixup.FIXUP_HI8
|
|
high 8 bits of 16bit offset
|
|
|
|
ida_fixup.FIXUP_LOW16
|
|
low 16 bits of 32bit offset
|
|
|
|
ida_fixup.FIXUP_LOW8
|
|
low 8 bits of 16bit offset
|
|
|
|
ida_fixup.FIXUP_OFF16
|
|
16-bit offset
|
|
|
|
ida_fixup.FIXUP_OFF16S
|
|
16-bit signed offset
|
|
|
|
ida_fixup.FIXUP_OFF32
|
|
32-bit offset
|
|
|
|
ida_fixup.FIXUP_OFF32S
|
|
32-bit signed offset
|
|
|
|
ida_fixup.FIXUP_OFF64
|
|
64-bit offset
|
|
|
|
ida_fixup.FIXUP_OFF8
|
|
8-bit offset
|
|
|
|
ida_fixup.FIXUP_OFF8S
|
|
8-bit signed offset
|
|
|
|
ida_fixup.FIXUP_PTR16
|
|
32-bit long pointer (16-bit base:16-bit offset)
|
|
|
|
|
|
ida_fixup.FIXUP_PTR32
|
|
48-bit pointer (16-bit base:32-bit offset)
|
|
|
|
ida_fixup.FIXUP_SEG16
|
|
16-bit base-logical segment base (selector)
|
|
|
|
ida_fixup.V695_FIXUP_VHIGH
|
|
obsolete
|
|
|
|
ida_fixup.V695_FIXUP_VLOW
|
|
obsolete
|
|
|
|
ida_fixup.calc_fixup_size(type: "fixup_type_t") -> int
|
|
Calculate size of fixup in bytes (the number of bytes the fixup patches)
|
|
|
|
@retval -1: means error
|
|
|
|
ida_fixup.contains_fixups(ea: ida_idaapi.ea_t, size: "asize_t") -> bool
|
|
Does the specified address range contain any fixup information?
|
|
|
|
ida_fixup.del_fixup(source: ida_idaapi.ea_t) -> None
|
|
Delete fixup information.
|
|
|
|
ida_fixup.exists_fixup(source: ida_idaapi.ea_t) -> bool
|
|
Check that a fixup exists at the given address.
|
|
|
|
ida_fixup.find_custom_fixup(name: str) -> "fixup_type_t"
|
|
|
|
ida_fixup.fixup_data_t
|
|
|
|
ida_fixup.fixup_data_t.__init__(self, *args)
|
|
|
|
ida_fixup.fixup_data_t.calc_size(self) -> int
|
|
calc_fixup_size()
|
|
|
|
ida_fixup.fixup_data_t.clr_extdef(self) -> None
|
|
|
|
ida_fixup.fixup_data_t.clr_unused(self) -> None
|
|
|
|
ida_fixup.fixup_data_t.displacement
|
|
displacement (offset from the target)
|
|
|
|
ida_fixup.fixup_data_t.get(self, source: ida_idaapi.ea_t) -> bool
|
|
get_fixup()
|
|
|
|
ida_fixup.fixup_data_t.get_base(self) -> ida_idaapi.ea_t
|
|
Get base of fixup.
|
|
|
|
|
|
ida_fixup.fixup_data_t.get_desc(self, source: ida_idaapi.ea_t) -> str
|
|
get_fixup_desc()
|
|
|
|
ida_fixup.fixup_data_t.get_flags(self) -> int
|
|
Fixup flags Fixup flags.
|
|
|
|
ida_fixup.fixup_data_t.get_handler(self) -> "fixup_handler_t const *"
|
|
get_fixup_handler()
|
|
|
|
ida_fixup.fixup_data_t.get_type(self) -> "fixup_type_t"
|
|
Fixup type Types of fixups.
|
|
|
|
ida_fixup.fixup_data_t.get_value(self, ea: ida_idaapi.ea_t) -> int
|
|
get_fixup_value()
|
|
|
|
ida_fixup.fixup_data_t.has_base(self) -> bool
|
|
Is fixup relative?
|
|
|
|
ida_fixup.fixup_data_t.is_custom(self) -> bool
|
|
is_fixup_custom()
|
|
|
|
ida_fixup.fixup_data_t.is_extdef(self) -> bool
|
|
|
|
ida_fixup.fixup_data_t.is_unused(self) -> bool
|
|
|
|
ida_fixup.fixup_data_t.off
|
|
target offset
|
|
|
|
|
|
ida_fixup.fixup_data_t.patch_value(self, ea: ida_idaapi.ea_t) -> bool
|
|
patch_fixup_value()
|
|
|
|
ida_fixup.fixup_data_t.sel
|
|
selector of the target segment. BADSEL means an absolute (zero based) target.
|
|
|
|
|
|
ida_fixup.fixup_data_t.set(self, source: ida_idaapi.ea_t) -> None
|
|
set_fixup()
|
|
|
|
ida_fixup.fixup_data_t.set_base(self, new_base: ida_idaapi.ea_t) -> None
|
|
Set base of fixup. The target should be set before a call of this function.
|
|
|
|
|
|
ida_fixup.fixup_data_t.set_extdef(self) -> None
|
|
|
|
ida_fixup.fixup_data_t.set_sel(self, seg: "segment_t const *") -> None
|
|
|
|
ida_fixup.fixup_data_t.set_target_sel(self) -> None
|
|
Set selector of fixup to the target. The target should be set before a call of this function.
|
|
|
|
|
|
ida_fixup.fixup_data_t.set_type(self, type_: "fixup_type_t") -> None
|
|
|
|
ida_fixup.fixup_data_t.set_type_and_flags(self, type_: "fixup_type_t", flags_: int = 0) -> None
|
|
|
|
ida_fixup.fixup_data_t.set_unused(self) -> None
|
|
|
|
ida_fixup.fixup_data_t.was_created(self) -> bool
|
|
Is fixup artificial?
|
|
|
|
ida_fixup.fixup_info_t
|
|
|
|
ida_fixup.fixup_info_t.__init__(self)
|
|
|
|
ida_fixup.gen_fix_fixups(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, size: "asize_t") -> None
|
|
Relocate the bytes with fixup information once more (generic function). This function may be called from loader_t::move_segm() if it suits the goal. If loader_t::move_segm is not defined then this function will be called automatically when moving segments or rebasing the entire program. Special parameter values (from = BADADDR, size = 0, to = delta) are used when the function is called from rebase_program(delta).
|
|
|
|
|
|
ida_fixup.get_first_fixup_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_fixup.get_fixup(fd: "fixup_data_t", source: ida_idaapi.ea_t) -> bool
|
|
Get fixup information.
|
|
|
|
ida_fixup.get_fixup_desc(source: ida_idaapi.ea_t, fd: "fixup_data_t") -> str
|
|
Get FIXUP description comment.
|
|
|
|
ida_fixup.get_fixup_handler(type: "fixup_type_t") -> "fixup_handler_t const *"
|
|
Get handler of standard or custom fixup.
|
|
|
|
ida_fixup.get_fixup_value(ea: ida_idaapi.ea_t, type: "fixup_type_t") -> int
|
|
Get the operand value. This function get fixup bytes from data or an instruction at `ea` and convert them to the operand value (maybe partially). It is opposite in meaning to the `patch_fixup_value()`. For example, FIXUP_HI8 read a byte at `ea` and shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low 26 bits of the insn at `ea` and shifts it left by 2 bits. This function is mainly used to get a relocation addend.
|
|
|
|
@param ea: address to get fixup bytes from, the size of the fixup bytes depends on the fixup type.
|
|
@param type: fixup type
|
|
@retval operand: value
|
|
|
|
ida_fixup.get_fixups(out: "fixups_t *", ea: ida_idaapi.ea_t, size: "asize_t") -> bool
|
|
|
|
ida_fixup.get_next_fixup_ea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
|
|
ida_fixup.get_prev_fixup_ea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
|
|
ida_fixup.handle_fixups_in_macro(ri: "refinfo_t", ea: ida_idaapi.ea_t, other: "fixup_type_t", macro_reft_and_flags: int) -> bool
|
|
Handle two fixups in a macro. We often combine two instruction that load parts of a value into one macro instruction. For example:
|
|
ADRP X0, #var@PAGE
|
|
ADD X0, X0, #var@PAGEOFF --> ADRL X0, var
|
|
lui $v0, %hi(var)
|
|
addiu $v0, $v0, %lo(var) --> la $v0, var
|
|
|
|
|
|
|
|
@returns success ('false' means that RI was not changed)
|
|
|
|
ida_fixup.is_fixup_custom(type: "fixup_type_t") -> bool
|
|
Is fixup processed by processor module?
|
|
|
|
ida_fixup.patch_fixup_value(ea: ida_idaapi.ea_t, fd: "fixup_data_t") -> bool
|
|
Patch the fixup bytes. This function updates data or an instruction at `ea` to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea` to the high byte of `fd->off`, or AArch64's custom fixup BRANCH26 updates low 26 bits of the insn at `ea` to the value of `fd->off` shifted right by 2.
|
|
|
|
@param ea: address where data are changed, the size of the changed data depends on the fixup type.
|
|
@param fd: fixup data
|
|
@retval false: the fixup bytes do not fit (e.g. `fd->off` is greater than 0xFFFFFFC for BRANCH26). The database is changed even in this case.
|
|
|
|
ida_fixup.set_fixup(source: ida_idaapi.ea_t, fd: "fixup_data_t") -> None
|
|
Set fixup information. You should fill fixup_data_t and call this function and the kernel will remember information in the database.
|
|
|
|
@param source: the fixup source address, i.e. the address modified by the fixup
|
|
@param fd: fixup data
|
|
|
|
ida_fpro
|
|
System independent counterparts of FILE* related functions from Clib.
|
|
|
|
You should not use C standard I/O functions in your modules. The reason: Each module compiled with Borland (and statically linked to Borland's library) will host a copy of the FILE * information.
|
|
So, if you open a file in the plugin and pass the handle to the kernel, the kernel will not be able to use it.
|
|
If you really need to use the standard functions, define USE_STANDARD_FILE_FUNCTIONS. In this case do not mix them with q... functions.
|
|
|
|
|
|
ida_fpro.qfclose(fp: "FILE *") -> int
|
|
|
|
ida_fpro.qfile_t
|
|
A helper class to work with FILE related functions.
|
|
|
|
ida_fpro.qfile_t.__init__(self, *args)
|
|
|
|
ida_fpro.qfile_t.close(self)
|
|
Closes the file
|
|
|
|
ida_fpro.qfile_t.filename(self) -> "PyObject *"
|
|
|
|
ida_fpro.qfile_t.flush(self)
|
|
|
|
ida_fpro.qfile_t.from_capsule(pycapsule: "PyObject *") -> "qfile_t *"
|
|
|
|
ida_fpro.qfile_t.from_fp(fp: "FILE *") -> "qfile_t *"
|
|
|
|
ida_fpro.qfile_t.get_byte(self)
|
|
Reads a single byte from the file. Returns None if EOF or the read byte
|
|
|
|
ida_fpro.qfile_t.get_fp(self) -> "FILE *"
|
|
|
|
ida_fpro.qfile_t.gets(self, len)
|
|
Reads a line from the input file. Returns the read line or None
|
|
|
|
@param len: the maximum line length
|
|
|
|
ida_fpro.qfile_t.open(self, filename, mode)
|
|
Opens a file
|
|
|
|
@param filename: the file name
|
|
@param mode: The mode string, ala fopen() style
|
|
@return: Boolean
|
|
|
|
ida_fpro.qfile_t.opened(self)
|
|
Checks if the file is opened or not
|
|
|
|
ida_fpro.qfile_t.put_byte(self)
|
|
Writes a single byte to the file
|
|
|
|
@param chr: the byte value
|
|
|
|
ida_fpro.qfile_t.puts(self, str: str) -> int
|
|
|
|
ida_fpro.qfile_t.read(self, size)
|
|
Reads from the file. Returns the buffer or None
|
|
|
|
@param size: the maximum number of bytes to read
|
|
@return: a str, or None
|
|
|
|
ida_fpro.qfile_t.readbytes(self, size, big_endian)
|
|
Similar to read() but it respect the endianness
|
|
|
|
@param size: the maximum number of bytes to read
|
|
@param big_endian: endianness
|
|
@return a str, or None
|
|
|
|
ida_fpro.qfile_t.seek(self, offset, whence = ida_idaapi.SEEK_SET)
|
|
Set input source position
|
|
|
|
@param offset: the seek offset
|
|
@param whence: the position to seek from
|
|
@return: the new position (not 0 as fseek!)
|
|
|
|
ida_fpro.qfile_t.size(self) -> "int64"
|
|
|
|
ida_fpro.qfile_t.tell(self)
|
|
Returns the current position
|
|
|
|
ida_fpro.qfile_t.tmpfile()
|
|
A static method to construct an instance using a temporary file
|
|
|
|
ida_fpro.qfile_t.write(self, buf)
|
|
Writes to the file. Returns 0 or the number of bytes written
|
|
|
|
@param buf: the str to write
|
|
@return: result code
|
|
|
|
ida_fpro.qfile_t.writebytes(self, size, big_endian)
|
|
Similar to write() but it respect the endianness
|
|
|
|
@param buf: the str to write
|
|
@param big_endian: endianness
|
|
@return: result code
|
|
|
|
ida_frame
|
|
Routines to manipulate function stack frames, stack variables, register variables and local labels.
|
|
|
|
The frame is represented as a structure:
|
|
+------------------------------------------------+
|
|
| function arguments |
|
|
+------------------------------------------------+
|
|
| return address (isn't stored in func_t) |
|
|
+------------------------------------------------+
|
|
| saved registers (SI, DI, etc - func_t::frregs) |
|
|
+------------------------------------------------+ <- typical BP
|
|
| | |
|
|
| | | func_t::fpd
|
|
| | |
|
|
| | <- real BP
|
|
| local variables (func_t::frsize) |
|
|
| |
|
|
| |
|
|
+------------------------------------------------+ <- SP
|
|
|
|
To access the structure of a function frame and stack variables, use:
|
|
* tinfo_t::get_func_frame(const func_t *pfn) (the preferred way)
|
|
* get_func_frame(tinfo_t *out, const func_t *pfn)
|
|
* tinfo_t::get_udt_details() gives info about stack variables: their type, names, offset, etc
|
|
|
|
|
|
|
|
|
|
ida_frame.REGVAR_ERROR_ARG
|
|
function arguments are bad
|
|
|
|
ida_frame.REGVAR_ERROR_NAME
|
|
the provided name(s) can't be accepted
|
|
|
|
ida_frame.REGVAR_ERROR_OK
|
|
all ok
|
|
|
|
ida_frame.REGVAR_ERROR_RANGE
|
|
the definition range is bad
|
|
|
|
ida_frame.STKVAR_VALID_SIZE
|
|
x.dtyp contains correct variable type (for insns like 'lea' this bit must be off). In general, dr_O references do not allow to determine the variable size
|
|
|
|
|
|
ida_frame.add_auto_stkpnt(pfn: "func_t *", ea: ida_idaapi.ea_t, delta: int) -> bool
|
|
Add automatic SP register change point.
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address where SP changes. usually this is the end of the instruction which modifies the stack pointer ( insn_t::ea+ insn_t::size)
|
|
@param delta: difference between old and new values of SP
|
|
@returns success
|
|
|
|
ida_frame.add_frame(pfn: "func_t *", frsize: int, frregs: "ushort", argsize: "asize_t") -> bool
|
|
Add function frame.
|
|
|
|
@param pfn: pointer to function structure
|
|
@param frsize: size of function local variables
|
|
@param frregs: size of saved registers
|
|
@param argsize: size of function arguments range which will be purged upon return. this parameter is used for __stdcall and __pascal calling conventions. for other calling conventions please pass 0.
|
|
@retval 1: ok
|
|
@retval 0: failed (no function, frame already exists)
|
|
|
|
ida_frame.add_frame_member(pfn: "func_t const *", name: str, offset: int, tif: "tinfo_t", repr: "value_repr_t" = None, etf_flags: "uint" = 0) -> bool
|
|
Add member to the frame type
|
|
|
|
@param pfn: pointer to function
|
|
@param name: variable name, nullptr means autogenerate a name
|
|
@param offset: member offset in the frame structure, in bytes
|
|
@param tif: variable type
|
|
@param repr: variable representation
|
|
@returns success
|
|
|
|
ida_frame.add_regvar(pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str, cmt: str) -> int
|
|
Define a register variable.
|
|
|
|
@param pfn: function in which the definition will be created
|
|
@param ea1: range of addresses within the function where the definition will be used
|
|
@param ea2: range of addresses within the function where the definition will be used
|
|
@param canon: name of a general register
|
|
@param user: user-defined name for the register
|
|
@param cmt: comment for the definition
|
|
@returns Register variable error codes
|
|
|
|
ida_frame.add_user_stkpnt(ea: ida_idaapi.ea_t, delta: int) -> bool
|
|
Add user-defined SP register change point.
|
|
|
|
@param ea: linear address where SP changes
|
|
@param delta: difference between old and new values of SP
|
|
@returns success
|
|
|
|
ida_frame.build_stkvar_name(pfn: "func_t const *", v: int) -> str
|
|
Build automatic stack variable name.
|
|
|
|
@param pfn: pointer to function (can't be nullptr!)
|
|
@param v: value of variable offset
|
|
@returns length of stack variable name or -1
|
|
|
|
ida_frame.build_stkvar_xrefs(out: "xreflist_t", pfn: "func_t *", start_offset: int, end_offset: int) -> None
|
|
Fill 'out' with a list of all the xrefs made from function 'pfn' to specified range of the pfn's stack frame.
|
|
|
|
@param out: the list of xrefs to fill.
|
|
@param pfn: the function to scan.
|
|
@param start_offset: start frame structure offset, in bytes
|
|
@param end_offset: end frame structure offset, in bytes
|
|
|
|
ida_frame.calc_frame_offset(pfn: "func_t *", off: int, insn: "insn_t const *" = None, op: "op_t const *" = None) -> int
|
|
Calculate the offset of stack variable in the frame.
|
|
|
|
@param pfn: pointer to function (cannot be nullptr)
|
|
@param off: the offset relative to stack pointer or frame pointer
|
|
@param insn: the instruction
|
|
@param op: the operand
|
|
@returns the offset in the frame
|
|
|
|
ida_frame.calc_stkvar_struc_offset(pfn: "func_t *", insn: "insn_t const &", n: int) -> ida_idaapi.ea_t
|
|
Calculate offset of stack variable in the frame structure.
|
|
|
|
@param pfn: pointer to function (cannot be nullptr)
|
|
@param insn: the instruction
|
|
@param n: 0..UA_MAXOP-1 operand number -1 if error, return BADADDR
|
|
@returns BADADDR if some error (issue a warning if stack frame is bad)
|
|
|
|
ida_frame.define_stkvar(pfn: "func_t *", name: str, off: int, tif: "tinfo_t", repr: "value_repr_t" = None) -> bool
|
|
Define/redefine a stack variable.
|
|
|
|
@param pfn: pointer to function
|
|
@param name: variable name, nullptr means autogenerate a name
|
|
@param off: offset of the stack variable in the frame. negative values denote local variables, positive - function arguments.
|
|
@param tif: variable type
|
|
@param repr: variable representation
|
|
@returns success
|
|
|
|
ida_frame.del_frame(pfn: "func_t *") -> bool
|
|
Delete a function frame.
|
|
|
|
@param pfn: pointer to function structure
|
|
@returns success
|
|
|
|
ida_frame.del_regvar(pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str) -> int
|
|
Delete a register variable definition.
|
|
|
|
@param pfn: function in question
|
|
@param ea1: range of addresses within the function where the definition holds
|
|
@param ea2: range of addresses within the function where the definition holds
|
|
@param canon: name of a general register
|
|
@returns Register variable error codes
|
|
|
|
ida_frame.del_stkpnt(pfn: "func_t *", ea: ida_idaapi.ea_t) -> bool
|
|
Delete SP register change point.
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address
|
|
@returns success
|
|
|
|
ida_frame.delete_frame_members(pfn: "func_t const *", start_offset: int, end_offset: int) -> bool
|
|
Delete frame members
|
|
|
|
@param pfn: pointer to function
|
|
@param start_offset: member offset to start deletion from, in bytes
|
|
@param end_offset: member offset which not included in the deletion, in bytes
|
|
@returns success
|
|
|
|
ida_frame.find_regvar(*args) -> "regvar_t *"
|
|
This function has the following signatures:
|
|
|
|
0. find_regvar(pfn: func_t *, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str) -> regvar_t *
|
|
1. find_regvar(pfn: func_t *, ea: ida_idaapi.ea_t, canon: str) -> regvar_t *
|
|
|
|
# 0: find_regvar(pfn: func_t *, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str) -> regvar_t *
|
|
|
|
Find a register variable definition (powerful version). One of 'canon' and 'user' should be nullptr. If both 'canon' and 'user' are nullptr it returns the first regvar definition in the range.
|
|
|
|
@returns nullptr-not found, otherwise ptr to regvar_t
|
|
|
|
# 1: find_regvar(pfn: func_t *, ea: ida_idaapi.ea_t, canon: str) -> regvar_t *
|
|
|
|
Find a register variable definition.
|
|
|
|
@returns nullptr-not found, otherwise ptr to regvar_t
|
|
|
|
ida_frame.frame_off_args(pfn: "func_t const *") -> ida_idaapi.ea_t
|
|
Get starting address of arguments section.
|
|
|
|
ida_frame.frame_off_lvars(pfn: "func_t const *") -> ida_idaapi.ea_t
|
|
Get start address of local variables section.
|
|
|
|
ida_frame.frame_off_retaddr(pfn: "func_t const *") -> ida_idaapi.ea_t
|
|
Get starting address of return address section.
|
|
|
|
ida_frame.frame_off_savregs(pfn: "func_t const *") -> ida_idaapi.ea_t
|
|
Get starting address of saved registers section.
|
|
|
|
ida_frame.free_regvar(v: "regvar_t") -> None
|
|
|
|
ida_frame.get_effective_spd(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int
|
|
Get effective difference between the initial and current values of ESP. This function returns the sp-diff used by the instruction. The difference between get_spd() and get_effective_spd() is present only for instructions like "pop [esp+N]": they modify sp and use the modified value.
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address
|
|
@returns 0 or the difference, usually a negative number
|
|
|
|
ida_frame.get_frame_part(range: "range_t", pfn: "func_t const *", part: "frame_part_t") -> None
|
|
Get offsets of the frame part in the frame.
|
|
|
|
@param range: pointer to the output buffer with the frame part start/end(exclusive) offsets, can't be nullptr
|
|
@param pfn: pointer to function structure, can't be nullptr
|
|
@param part: frame part
|
|
|
|
ida_frame.get_frame_retsize(pfn: "func_t const *") -> int
|
|
Get size of function return address.
|
|
|
|
@param pfn: pointer to function structure, can't be nullptr
|
|
|
|
ida_frame.get_frame_size(pfn: "func_t const *") -> "asize_t"
|
|
Get full size of a function frame. This function takes into account size of local variables + size of saved registers + size of return address + number of purged bytes. The purged bytes correspond to the arguments of the functions with __stdcall and __fastcall calling conventions.
|
|
|
|
@param pfn: pointer to function structure, may be nullptr
|
|
@returns size of frame in bytes or zero
|
|
|
|
ida_frame.get_func_frame(out: "tinfo_t", pfn: "func_t const *") -> bool
|
|
Get type of function frame
|
|
|
|
@param out: type info
|
|
@param pfn: pointer to function structure
|
|
@returns success
|
|
|
|
ida_frame.get_sp_delta(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int
|
|
Get modification of SP made at the specified location
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address
|
|
@returns 0 if the specified location doesn't contain a SP change point. otherwise return delta of SP modification.
|
|
|
|
ida_frame.get_spd(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int
|
|
Get difference between the initial and current values of ESP.
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address of the instruction
|
|
@returns 0 or the difference, usually a negative number. returns the sp-diff before executing the instruction.
|
|
|
|
ida_frame.has_regvar(pfn: "func_t *", ea: ida_idaapi.ea_t) -> bool
|
|
Is there a register variable definition?
|
|
|
|
@param pfn: function in question
|
|
@param ea: current address
|
|
|
|
ida_frame.is_anonymous_member_name(name: str) -> bool
|
|
Is member name prefixed with "anonymous"?
|
|
|
|
ida_frame.is_dummy_member_name(name: str) -> bool
|
|
Is member name an auto-generated name?
|
|
|
|
ida_frame.is_funcarg_off(pfn: "func_t const *", frameoff: int) -> bool
|
|
|
|
ida_frame.is_special_frame_member(tid: "tid_t") -> bool
|
|
Is stkvar with TID the return address slot or the saved registers slot ?
|
|
|
|
@param tid: frame member type id return address or saved registers member?
|
|
|
|
ida_frame.lvar_off(pfn: "func_t const *", frameoff: int) -> int
|
|
|
|
ida_frame.recalc_spd(cur_ea: ida_idaapi.ea_t) -> bool
|
|
Recalculate SP delta for an instruction that stops execution. The next instruction is not reached from the current instruction. We need to recalculate SP for the next instruction.
|
|
This function will create a new automatic SP register change point if necessary. It should be called from the emulator (emu.cpp) when auto_state == AU_USED if the current instruction doesn't pass the execution flow to the next instruction.
|
|
|
|
@param cur_ea: linear address of the current instruction
|
|
@retval 1: new stkpnt is added
|
|
@retval 0: nothing is changed
|
|
|
|
ida_frame.recalc_spd_for_basic_block(pfn: "func_t *", cur_ea: ida_idaapi.ea_t) -> bool
|
|
Recalculate SP delta for the current instruction. The typical code snippet to calculate SP delta in a proc module is:
|
|
|
|
if ( may_trace_sp() && pfn != nullptr )
|
|
if ( !recalc_spd_for_basic_block(pfn, insn.ea) )
|
|
trace_sp(pfn, insn);
|
|
|
|
where trace_sp() is a typical name for a function that emulates the SP change of an instruction.
|
|
|
|
@param pfn: pointer to the function
|
|
@param cur_ea: linear address of the current instruction
|
|
@retval true: the cumulative SP delta is set
|
|
@retval false: the instruction at CUR_EA passes flow to the next instruction. SP delta must be set as a result of emulating the current instruction.
|
|
|
|
ida_frame.regvar_t
|
|
|
|
ida_frame.regvar_t.__init__(self, *args)
|
|
|
|
ida_frame.regvar_t.canon
|
|
canonical register name (case-insensitive)
|
|
|
|
ida_frame.regvar_t.cmt
|
|
comment to appear near definition
|
|
|
|
ida_frame.regvar_t.swap(self, r: "regvar_t") -> None
|
|
|
|
ida_frame.regvar_t.user
|
|
user-defined register name
|
|
|
|
ida_frame.rename_regvar(pfn: "func_t *", v: "regvar_t", user: str) -> int
|
|
Rename a register variable.
|
|
|
|
@param pfn: function in question
|
|
@param v: variable to rename
|
|
@param user: new user-defined name for the register
|
|
@returns Register variable error codes
|
|
|
|
ida_frame.set_auto_spd(pfn: "func_t *", ea: ida_idaapi.ea_t, new_spd: int) -> bool
|
|
Add such an automatic SP register change point so that at EA the new cumulative SP delta (that is, the difference between the initial and current values of SP) would be equal to NEW_SPD.
|
|
|
|
@param pfn: pointer to the function. may be nullptr.
|
|
@param ea: linear address of the instruction
|
|
@param new_spd: new value of the cumulative SP delta
|
|
@returns success
|
|
|
|
ida_frame.set_frame_member_type(pfn: "func_t const *", offset: int, tif: "tinfo_t", repr: "value_repr_t" = None, etf_flags: "uint" = 0) -> bool
|
|
Change type of the frame member
|
|
|
|
@param pfn: pointer to function
|
|
@param offset: member offset in the frame structure, in bytes
|
|
@param tif: variable type
|
|
@param repr: variable representation
|
|
@returns success
|
|
|
|
ida_frame.set_frame_size(pfn: "func_t *", frsize: "asize_t", frregs: "ushort", argsize: "asize_t") -> bool
|
|
Set size of function frame. Note: The returned size may not include all stack arguments. It does so only for __stdcall and __fastcall calling conventions. To get the entire frame size for all cases use frame.get_func_frame(pfn).get_size()
|
|
|
|
@param pfn: pointer to function structure
|
|
@param frsize: size of function local variables
|
|
@param frregs: size of saved registers
|
|
@param argsize: size of function arguments that will be purged from the stack upon return
|
|
@returns success
|
|
|
|
ida_frame.set_purged(ea: ida_idaapi.ea_t, nbytes: int, override_old_value: bool) -> bool
|
|
Set the number of purged bytes for a function or data item (funcptr). This function will update the database and plan to reanalyze items referencing the specified address. It works only for processors with PR_PURGING bit in 16 and 32 bit modes.
|
|
|
|
@param ea: address of the function of item
|
|
@param nbytes: number of purged bytes
|
|
@param override_old_value: may overwrite old information about purged bytes
|
|
@returns success
|
|
|
|
ida_frame.set_regvar_cmt(pfn: "func_t *", v: "regvar_t", cmt: str) -> int
|
|
Set comment for a register variable.
|
|
|
|
@param pfn: function in question
|
|
@param v: variable to rename
|
|
@param cmt: new comment
|
|
@returns Register variable error codes
|
|
|
|
ida_frame.soff_to_fpoff(pfn: "func_t *", soff: int) -> int
|
|
Convert struct offsets into fp-relative offsets. This function converts the offsets inside the udt_type_data_t object into the frame pointer offsets (for example, EBP-relative).
|
|
|
|
|
|
ida_frame.stkpnt_t
|
|
|
|
ida_frame.stkpnt_t.__eq__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.__ge__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.__gt__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.__init__(self)
|
|
|
|
ida_frame.stkpnt_t.__le__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.__lt__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.__ne__(self, r: "stkpnt_t") -> bool
|
|
|
|
ida_frame.stkpnt_t.compare(self, r: "stkpnt_t") -> int
|
|
|
|
ida_frame.stkpnts_t
|
|
|
|
ida_frame.stkpnts_t.__eq__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.__ge__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.__gt__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.__init__(self)
|
|
|
|
ida_frame.stkpnts_t.__le__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.__lt__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.__ne__(self, r: "stkpnts_t") -> bool
|
|
|
|
ida_frame.stkpnts_t.compare(self, r: "stkpnts_t") -> int
|
|
|
|
ida_frame.update_fpd(pfn: "func_t *", fpd: "asize_t") -> bool
|
|
Update frame pointer delta.
|
|
|
|
@param pfn: pointer to function structure
|
|
@param fpd: new fpd value. cannot be bigger than the local variable range size.
|
|
@returns success
|
|
|
|
ida_frame.xreflist_entry_t
|
|
|
|
ida_frame.xreflist_entry_t.__eq__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.__ge__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.__gt__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.__init__(self)
|
|
|
|
ida_frame.xreflist_entry_t.__le__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.__lt__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.__ne__(self, r: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_entry_t.compare(self, r: "xreflist_entry_t") -> int
|
|
|
|
ida_frame.xreflist_entry_t.ea
|
|
Location of the insn referencing the stack frame member.
|
|
|
|
ida_frame.xreflist_entry_t.opnum
|
|
Number of the operand of that instruction.
|
|
|
|
ida_frame.xreflist_entry_t.type
|
|
The type of xref (cref_t & dref_t)
|
|
|
|
ida_frame.xreflist_t
|
|
|
|
ida_frame.xreflist_t.__eq__(self, r: "xreflist_t") -> bool
|
|
|
|
ida_frame.xreflist_t.__getitem__(self, i: "size_t") -> "xreflist_entry_t const &"
|
|
|
|
ida_frame.xreflist_t.__init__(self, *args)
|
|
|
|
ida_frame.xreflist_t.__len__(self) -> "size_t"
|
|
|
|
ida_frame.xreflist_t.__ne__(self, r: "xreflist_t") -> bool
|
|
|
|
ida_frame.xreflist_t.__setitem__(self, i: "size_t", v: "xreflist_entry_t") -> None
|
|
|
|
ida_frame.xreflist_t._del(self, x: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_t.add_unique(self, x: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_t.append(self, x: "xreflist_entry_t") -> None
|
|
|
|
ida_frame.xreflist_t.at(self, _idx: "size_t") -> "xreflist_entry_t const &"
|
|
|
|
ida_frame.xreflist_t.begin(self, *args) -> "qvector< xreflist_entry_t >::const_iterator"
|
|
|
|
ida_frame.xreflist_t.capacity(self) -> "size_t"
|
|
|
|
ida_frame.xreflist_t.clear(self) -> None
|
|
|
|
ida_frame.xreflist_t.empty(self) -> bool
|
|
|
|
ida_frame.xreflist_t.end(self, *args) -> "qvector< xreflist_entry_t >::const_iterator"
|
|
|
|
ida_frame.xreflist_t.erase(self, *args) -> "qvector< xreflist_entry_t >::iterator"
|
|
|
|
ida_frame.xreflist_t.extend(self, x: "xreflist_t") -> None
|
|
|
|
ida_frame.xreflist_t.extract(self) -> "xreflist_entry_t *"
|
|
|
|
ida_frame.xreflist_t.find(self, *args) -> "qvector< xreflist_entry_t >::const_iterator"
|
|
|
|
ida_frame.xreflist_t.grow(self, *args) -> None
|
|
|
|
ida_frame.xreflist_t.has(self, x: "xreflist_entry_t") -> bool
|
|
|
|
ida_frame.xreflist_t.inject(self, s: "xreflist_entry_t", len: "size_t") -> None
|
|
|
|
ida_frame.xreflist_t.insert(self, it: "xreflist_entry_t", x: "xreflist_entry_t") -> "qvector< xreflist_entry_t >::iterator"
|
|
|
|
ida_frame.xreflist_t.pop_back(self) -> None
|
|
|
|
ida_frame.xreflist_t.push_back(self, *args) -> "xreflist_entry_t &"
|
|
|
|
ida_frame.xreflist_t.qclear(self) -> None
|
|
|
|
ida_frame.xreflist_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_frame.xreflist_t.resize(self, *args) -> None
|
|
|
|
ida_frame.xreflist_t.size(self) -> "size_t"
|
|
|
|
ida_frame.xreflist_t.swap(self, r: "xreflist_t") -> None
|
|
|
|
ida_frame.xreflist_t.truncate(self) -> None
|
|
|
|
ida_funcs
|
|
Routines for working with functions within the disassembled program.
|
|
|
|
This file also contains routines for working with library signatures (e.g. FLIRT).
|
|
Each function consists of function chunks. At least one function chunk must be present in the function definition - the function entry chunk. Other chunks are called function tails. There may be several of them for a function.
|
|
A function tail is a continuous range of addresses. It can be used in the definition of one or more functions. One function using the tail is singled out and called the tail owner. This function is considered as 'possessing' the tail. get_func() on a tail address will return the function possessing the tail. You can enumerate the functions using the tail by using func_parent_iterator_t.
|
|
Each function chunk in the disassembly is represented as an "range" (a range of addresses, see range.hpp for details) with characteristics.
|
|
A function entry must start with an instruction (code) byte.
|
|
|
|
|
|
ida_funcs.FIND_FUNC_DEFINE
|
|
create instruction if undefined byte is encountered
|
|
|
|
ida_funcs.FIND_FUNC_EXIST
|
|
function exists already. its bounds are returned in 'nfn'.
|
|
|
|
|
|
ida_funcs.FIND_FUNC_IGNOREFN
|
|
ignore existing function boundaries. by default the function returns function boundaries if ea belongs to a function.
|
|
|
|
|
|
ida_funcs.FIND_FUNC_KEEPBD
|
|
do not modify incoming function boundaries, just create instructions inside the boundaries.
|
|
|
|
|
|
ida_funcs.FIND_FUNC_NORMAL
|
|
stop processing if undefined byte is encountered
|
|
|
|
ida_funcs.FIND_FUNC_OK
|
|
ok, 'nfn' is ready for add_func()
|
|
|
|
ida_funcs.FIND_FUNC_UNDEF
|
|
function has instructions that pass execution flow to unexplored bytes. nfn->end_ea will have the address of the unexplored byte.
|
|
|
|
|
|
ida_funcs.FUNC_BOTTOMBP
|
|
BP points to the bottom of the stack frame.
|
|
|
|
ida_funcs.FUNC_CATCH
|
|
function is an exception catch handler
|
|
|
|
ida_funcs.FUNC_FAR
|
|
Far function.
|
|
|
|
ida_funcs.FUNC_FRAME
|
|
Function uses frame pointer (BP)
|
|
|
|
ida_funcs.FUNC_FUZZY_SP
|
|
Function changes SP in untraceable way, for example: and esp, 0FFFFFFF0h
|
|
|
|
|
|
ida_funcs.FUNC_HIDDEN
|
|
A hidden function chunk.
|
|
|
|
ida_funcs.FUNC_LIB
|
|
Library function.
|
|
|
|
ida_funcs.FUNC_LUMINA
|
|
Function info is provided by Lumina.
|
|
|
|
ida_funcs.FUNC_NORET
|
|
Function doesn't return.
|
|
|
|
ida_funcs.FUNC_NORET_PENDING
|
|
Function 'non-return' analysis must be performed. This flag is verified upon func_does_return()
|
|
|
|
|
|
ida_funcs.FUNC_OUTLINE
|
|
Outlined code, not a real function.
|
|
|
|
ida_funcs.FUNC_PROLOG_OK
|
|
Prolog analysis has been performed by last SP-analysis
|
|
|
|
|
|
ida_funcs.FUNC_PURGED_OK
|
|
'argsize' field has been validated. If this bit is clear and 'argsize' is 0, then we do not known the real number of bytes removed from the stack. This bit is handled by the processor module.
|
|
|
|
|
|
ida_funcs.FUNC_REANALYZE
|
|
Function frame changed, request to reanalyze the function after the last insn is analyzed.
|
|
|
|
|
|
ida_funcs.FUNC_SP_READY
|
|
SP-analysis has been performed. If this flag is on, the stack change points should not be not modified anymore. Currently this analysis is performed only for PC
|
|
|
|
|
|
ida_funcs.FUNC_STATICDEF
|
|
Static function.
|
|
|
|
ida_funcs.FUNC_TAIL
|
|
This is a function tail. Other bits must be clear (except FUNC_HIDDEN).
|
|
|
|
|
|
ida_funcs.FUNC_THUNK
|
|
Thunk (jump) function.
|
|
|
|
ida_funcs.FUNC_UNWIND
|
|
function is an exception unwind handler
|
|
|
|
ida_funcs.FUNC_USERFAR
|
|
User has specified far-ness of the function
|
|
|
|
|
|
ida_funcs.IDASGN_APPLIED
|
|
signature is already applied
|
|
|
|
ida_funcs.IDASGN_BADARG
|
|
bad number of signature
|
|
|
|
ida_funcs.IDASGN_CURRENT
|
|
signature is currently being applied
|
|
|
|
ida_funcs.IDASGN_OK
|
|
ok
|
|
|
|
ida_funcs.IDASGN_PLANNED
|
|
signature is planned to be applied
|
|
|
|
ida_funcs.LIBFUNC_DELAY
|
|
no decision because of lack of information
|
|
|
|
ida_funcs.LIBFUNC_FOUND
|
|
ok, library function is found
|
|
|
|
ida_funcs.LIBFUNC_NONE
|
|
no, this is not a library function
|
|
|
|
ida_funcs.MOVE_FUNC_BADSTART
|
|
bad new start address
|
|
|
|
ida_funcs.MOVE_FUNC_NOCODE
|
|
no instruction at 'newstart'
|
|
|
|
ida_funcs.MOVE_FUNC_NOFUNC
|
|
no function at 'ea'
|
|
|
|
ida_funcs.MOVE_FUNC_OK
|
|
ok
|
|
|
|
ida_funcs.MOVE_FUNC_REFUSED
|
|
a plugin refused the action
|
|
|
|
ida_funcs.add_func(*args) -> bool
|
|
Add a new function. If the function end address is BADADDR, then IDA will try to determine the function bounds by calling find_func_bounds(..., FIND_FUNC_DEFINE).
|
|
|
|
@param ea1: start address
|
|
@param ea2: end address
|
|
@returns success
|
|
|
|
ida_funcs.add_func_ex(pfn: "func_t") -> bool
|
|
Add a new function. If the fn->end_ea is BADADDR, then IDA will try to determine the function bounds by calling find_func_bounds(..., FIND_FUNC_DEFINE).
|
|
|
|
@param pfn: ptr to filled function structure
|
|
@returns success
|
|
|
|
ida_funcs.add_regarg(pfn: "func_t", reg: int, tif: "tinfo_t", name: str) -> None
|
|
|
|
ida_funcs.append_func_tail(pfn: "func_t", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool
|
|
Append a new tail chunk to the function definition. If the tail already exists, then it will simply be added to the function tail list Otherwise a new tail will be created and its owner will be set to be our function If a new tail cannot be created, then this function will fail.
|
|
|
|
@param pfn: pointer to the function
|
|
@param ea1: start of the tail. If a tail already exists at the specified address it must start at 'ea1'
|
|
@param ea2: end of the tail. If a tail already exists at the specified address it must end at 'ea2'. If specified as BADADDR, IDA will determine the end address itself.
|
|
|
|
ida_funcs.apply_idasgn_to(signame: str, ea: ida_idaapi.ea_t, is_startup: bool) -> int
|
|
Apply a signature file to the specified address.
|
|
|
|
@param signame: short name of signature file (the file name without path)
|
|
@param ea: address to apply the signature
|
|
@param is_startup: if set, then the signature is treated as a startup one for startup signature ida doesn't rename the first function of the applied module.
|
|
@returns Library function codes
|
|
|
|
ida_funcs.apply_startup_sig(ea: ida_idaapi.ea_t, startup: str) -> bool
|
|
Apply a startup signature file to the specified address.
|
|
|
|
@param ea: address to apply the signature to; usually idainfo::start_ea
|
|
@param startup: the name of the signature file without path and extension
|
|
@returns true if successfully applied the signature
|
|
|
|
ida_funcs.calc_func_size(pfn: "func_t") -> "asize_t"
|
|
Calculate function size. This function takes into account all fragments of the function.
|
|
|
|
@param pfn: ptr to function structure
|
|
|
|
ida_funcs.calc_idasgn_state(n: int) -> int
|
|
Get state of a signature in the list of planned signatures
|
|
|
|
@param n: number of signature in the list (0..get_idasgn_qty()-1)
|
|
@returns state of signature or IDASGN_BADARG
|
|
|
|
ida_funcs.calc_thunk_func_target(pfn: "func_t") -> "ea_t *"
|
|
Calculate target of a thunk function.
|
|
|
|
@param pfn: pointer to function (may not be nullptr)
|
|
@returns the target function or BADADDR
|
|
|
|
ida_funcs.calc_thunk_func_target(*args)
|
|
Calculate target of a thunk function.
|
|
|
|
@param pfn: pointer to function (may not be nullptr)
|
|
@param fptr: out: will hold address of a function pointer (if indirect jump)
|
|
@returns the target function or BADADDR
|
|
|
|
ida_funcs.del_func(ea: ida_idaapi.ea_t) -> bool
|
|
Delete a function.
|
|
|
|
@param ea: any address in the function entry chunk
|
|
@returns success
|
|
|
|
ida_funcs.del_idasgn(n: int) -> int
|
|
Remove signature from the list of planned signatures.
|
|
|
|
@param n: number of signature in the list (0..get_idasgn_qty()-1)
|
|
@returns IDASGN_OK, IDASGN_BADARG, IDASGN_APPLIED
|
|
|
|
ida_funcs.dyn_ea_array
|
|
|
|
ida_funcs.dyn_ea_array.__getitem__(self, i: "size_t") -> "unsigned long long const &"
|
|
|
|
ida_funcs.dyn_ea_array.__init__(self, _data: "unsigned long long *", _count: "size_t")
|
|
|
|
ida_funcs.dyn_ea_array.__len__(self) -> "size_t"
|
|
|
|
ida_funcs.dyn_ea_array.__setitem__(self, i: "size_t", v: "unsigned long long const &") -> None
|
|
|
|
ida_funcs.dyn_range_array
|
|
|
|
ida_funcs.dyn_range_array.__getitem__(self, i: "size_t") -> "range_t const &"
|
|
|
|
ida_funcs.dyn_range_array.__init__(self, _data: "range_t", _count: "size_t")
|
|
|
|
ida_funcs.dyn_range_array.__len__(self) -> "size_t"
|
|
|
|
ida_funcs.dyn_range_array.__setitem__(self, i: "size_t", v: "range_t") -> None
|
|
|
|
ida_funcs.dyn_regarg_array
|
|
|
|
ida_funcs.dyn_regarg_array.__getitem__(self, i: "size_t") -> "regarg_t const &"
|
|
|
|
ida_funcs.dyn_regarg_array.__init__(self, _data: "regarg_t", _count: "size_t")
|
|
|
|
ida_funcs.dyn_regarg_array.__len__(self) -> "size_t"
|
|
|
|
ida_funcs.dyn_regarg_array.__setitem__(self, i: "size_t", v: "regarg_t") -> None
|
|
|
|
ida_funcs.dyn_regvar_array
|
|
|
|
ida_funcs.dyn_regvar_array.__getitem__(self, i: "size_t") -> "regvar_t const &"
|
|
|
|
ida_funcs.dyn_regvar_array.__init__(self, _data: "regvar_t *", _count: "size_t")
|
|
|
|
ida_funcs.dyn_regvar_array.__len__(self) -> "size_t"
|
|
|
|
ida_funcs.dyn_regvar_array.__setitem__(self, i: "size_t", v: "regvar_t const &") -> None
|
|
|
|
ida_funcs.dyn_stkpnt_array
|
|
|
|
ida_funcs.dyn_stkpnt_array.__getitem__(self, i: "size_t") -> "stkpnt_t const &"
|
|
|
|
ida_funcs.dyn_stkpnt_array.__init__(self, _data: "stkpnt_t *", _count: "size_t")
|
|
|
|
ida_funcs.dyn_stkpnt_array.__len__(self) -> "size_t"
|
|
|
|
ida_funcs.dyn_stkpnt_array.__setitem__(self, i: "size_t", v: "stkpnt_t const &") -> None
|
|
|
|
ida_funcs.f_any(arg1: "flags64_t", arg2: "void *") -> bool
|
|
Helper function to accept any address.
|
|
|
|
ida_funcs.find_func_bounds(nfn: "func_t", flags: int) -> int
|
|
Determine the boundaries of a new function. This function tries to find the start and end addresses of a new function. It calls the module with processor_t::func_bounds in order to fine tune the function boundaries.
|
|
|
|
@param nfn: structure to fill with information \ nfn->start_ea points to the start address of the new function.
|
|
@param flags: Find function bounds flags
|
|
@returns Find function bounds result codes
|
|
|
|
ida_funcs.free_regarg(v: "regarg_t") -> None
|
|
|
|
ida_funcs.func_contains(pfn: "func_t", ea: ida_idaapi.ea_t) -> bool
|
|
Does the given function contain the given address?
|
|
|
|
ida_funcs.func_does_return(callee: ida_idaapi.ea_t) -> bool
|
|
Does the function return?. To calculate the answer, FUNC_NORET flag and is_noret() are consulted The latter is required for imported functions in the .idata section. Since in .idata we have only function pointers but not functions, we have to introduce a special flag for them.
|
|
|
|
|
|
ida_funcs.func_item_iterator_t
|
|
|
|
ida_funcs.func_item_iterator_t.__init__(self, *args)
|
|
|
|
ida_funcs.func_item_iterator_t.__iter__(self)
|
|
Provide an iterator on code items
|
|
|
|
ida_funcs.func_item_iterator_t.__next__(self, func: "testf_t *") -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.addresses(self)
|
|
Provide an iterator on addresses contained within the function
|
|
|
|
ida_funcs.func_item_iterator_t.chunk(self) -> "range_t const &"
|
|
|
|
ida_funcs.func_item_iterator_t.code_items(self)
|
|
Provide an iterator on code items contained within the function
|
|
|
|
ida_funcs.func_item_iterator_t.current(self) -> ida_idaapi.ea_t
|
|
|
|
ida_funcs.func_item_iterator_t.data_items(self)
|
|
Provide an iterator on data items contained within the function
|
|
|
|
ida_funcs.func_item_iterator_t.decode_preceding_insn(self, visited: "eavec_t *", p_farref: "bool *", out: "insn_t *") -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.decode_prev_insn(self, out: "insn_t *") -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.first(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.head_items(self)
|
|
Provide an iterator on item heads contained within the function
|
|
|
|
ida_funcs.func_item_iterator_t.last(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.next_addr(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.next_code(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.next_data(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.next_head(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.next_not_tail(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.not_tails(self)
|
|
Provide an iterator on non-tail addresses contained within the function
|
|
|
|
ida_funcs.func_item_iterator_t.prev(self, func: "testf_t *") -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.prev_addr(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.prev_code(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.prev_data(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.prev_head(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.prev_not_tail(self) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.set(self, *args) -> bool
|
|
Set a function range. if pfn == nullptr then a segment range will be set.
|
|
|
|
ida_funcs.func_item_iterator_t.set_ea(self, _ea: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_funcs.func_item_iterator_t.set_range(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool
|
|
Set an arbitrary range.
|
|
|
|
ida_funcs.func_item_iterator_t.succ(self, func: "testf_t *") -> bool
|
|
Similar to next(), but succ() iterates the chunks from low to high addresses, while next() iterates through chunks starting at the function entry chunk
|
|
|
|
|
|
ida_funcs.func_item_iterator_t.succ_code(self) -> bool
|
|
|
|
ida_funcs.func_parent_iterator_set(fpi: "func_parent_iterator_t", pfn: "func_t") -> bool
|
|
|
|
ida_funcs.func_parent_iterator_t
|
|
|
|
ida_funcs.func_parent_iterator_t.__init__(self, *args)
|
|
|
|
ida_funcs.func_parent_iterator_t.__iter__(self)
|
|
Provide an iterator on function parents
|
|
|
|
ida_funcs.func_parent_iterator_t.__next__(self) -> bool
|
|
|
|
ida_funcs.func_parent_iterator_t.first(self) -> bool
|
|
|
|
ida_funcs.func_parent_iterator_t.last(self) -> bool
|
|
|
|
ida_funcs.func_parent_iterator_t.parent(self) -> ida_idaapi.ea_t
|
|
|
|
ida_funcs.func_parent_iterator_t.prev(self) -> bool
|
|
|
|
ida_funcs.func_parent_iterator_t.reset_fnt(self, _fnt: "func_t") -> None
|
|
|
|
ida_funcs.func_parent_iterator_t.set(self, _fnt: "func_t") -> bool
|
|
|
|
ida_funcs.func_t
|
|
|
|
ida_funcs.func_t.__get_points__(self) -> "dynamic_wrapped_array_t< stkpnt_t >"
|
|
|
|
ida_funcs.func_t.__get_referers__(self) -> "dynamic_wrapped_array_t< ea_t >"
|
|
|
|
ida_funcs.func_t.__get_regargs__(self) -> "dynamic_wrapped_array_t< regarg_t >"
|
|
|
|
ida_funcs.func_t.__get_regvars__(self) -> "dynamic_wrapped_array_t< regvar_t >"
|
|
|
|
ida_funcs.func_t.__get_tails__(self) -> "dynamic_wrapped_array_t< range_t >"
|
|
|
|
ida_funcs.func_t.__init__(self, start: ida_idaapi.ea_t = 0, end: ida_idaapi.ea_t = 0, f: "flags64_t" = 0)
|
|
|
|
ida_funcs.func_t.__iter__(self)
|
|
Alias for func_item_iterator_t(self).__iter__()
|
|
|
|
ida_funcs.func_t.addresses(self)
|
|
Alias for func_item_iterator_t(self).addresses()
|
|
|
|
ida_funcs.func_t.analyzed_sp(self) -> bool
|
|
Has SP-analysis been performed?
|
|
|
|
ida_funcs.func_t.argsize
|
|
number of bytes purged from the stack upon returning
|
|
|
|
|
|
ida_funcs.func_t.code_items(self)
|
|
Alias for func_item_iterator_t(self).code_items()
|
|
|
|
ida_funcs.func_t.color
|
|
user defined function color
|
|
|
|
ida_funcs.func_t.data_items(self)
|
|
Alias for func_item_iterator_t(self).data_items()
|
|
|
|
ida_funcs.func_t.does_return(self) -> bool
|
|
Does function return?
|
|
|
|
ida_funcs.func_t.flags
|
|
Function flags
|
|
|
|
|
|
ida_funcs.func_t.fpd
|
|
frame pointer delta. (usually 0, i.e. realBP==typicalBP) use update_fpd() to modify it.
|
|
|
|
|
|
ida_funcs.func_t.frame
|
|
netnode id of frame structure - see frame.hpp
|
|
|
|
ida_funcs.func_t.frregs
|
|
size of saved registers in frame. This range is immediately above the local variables range.
|
|
|
|
|
|
ida_funcs.func_t.frsize
|
|
size of local variables part of frame in bytes. If FUNC_FRAME is set and fpd==0, the frame pointer (EBP) is assumed to point to the top of the local variables range.
|
|
|
|
|
|
ida_funcs.func_t.get_frame_object(self)
|
|
Retrieve the function frame, in the form of a structure
|
|
where frame offsets that are accessed by the program, as well
|
|
as areas for "saved registers" and "return address", are
|
|
represented by structure members.
|
|
|
|
If the function has no associated frame, return None
|
|
|
|
@return a ida_typeinf.tinfo_t object representing the frame, or None
|
|
|
|
ida_funcs.func_t.get_name(self)
|
|
Get the function name
|
|
|
|
@return the function name
|
|
|
|
ida_funcs.func_t.get_prototype(self)
|
|
Retrieve the function prototype.
|
|
|
|
Once you have obtained the prototype, you can:
|
|
|
|
* retrieve the return type through ida_typeinf.tinfo_t.get_rettype()
|
|
* iterate on the arguments using ida_typeinf.tinfo_t.iter_func()
|
|
|
|
If the function has no associated prototype, return None
|
|
|
|
@return a ida_typeinf.tinfo_t object representing the prototype, or None
|
|
|
|
ida_funcs.func_t.head_items(self)
|
|
Alias for func_item_iterator_t(self).head_items()
|
|
|
|
ida_funcs.func_t.is_far(self) -> bool
|
|
Is a far function?
|
|
|
|
ida_funcs.func_t.need_prolog_analysis(self) -> bool
|
|
Needs prolog analysis?
|
|
|
|
ida_funcs.func_t.not_tails(self)
|
|
Alias for func_item_iterator_t(self).not_tails()
|
|
|
|
ida_funcs.func_t.owner
|
|
the address of the main function possessing this tail
|
|
|
|
ida_funcs.func_t.pntqty
|
|
number of SP change points
|
|
|
|
ida_funcs.func_t.points
|
|
array of SP change points. use ...stkpnt...() functions to access this array.
|
|
|
|
|
|
ida_funcs.func_t.points
|
|
array of SP change points. use ...stkpnt...() functions to access this array.
|
|
|
|
|
|
ida_funcs.func_t.referers
|
|
array of referers (function start addresses). use func_parent_iterator_t to access the referers.
|
|
|
|
|
|
ida_funcs.func_t.referers
|
|
array of referers (function start addresses). use func_parent_iterator_t to access the referers.
|
|
|
|
|
|
ida_funcs.func_t.refqty
|
|
number of referers
|
|
|
|
ida_funcs.func_t.regargqty
|
|
number of register arguments. During analysis IDA tries to guess the register arguments. It stores store the guessing outcome in this field. As soon as it determines the final function prototype, regargqty is set to zero.
|
|
|
|
|
|
ida_funcs.func_t.regargs
|
|
unsorted array of register arguments. use ...regarg...() functions to access this array. regargs are destroyed when the full function type is determined.
|
|
|
|
|
|
ida_funcs.func_t.regargs
|
|
unsorted array of register arguments. use ...regarg...() functions to access this array. regargs are destroyed when the full function type is determined.
|
|
|
|
|
|
ida_funcs.func_t.regvarqty
|
|
number of register variables (-1-not read in yet) use find_regvar() to read register variables
|
|
|
|
|
|
ida_funcs.func_t.regvars
|
|
array of register variables. this array is sorted by: start_ea. use ...regvar...() functions to access this array.
|
|
|
|
|
|
ida_funcs.func_t.regvars
|
|
array of register variables. this array is sorted by: start_ea. use ...regvar...() functions to access this array.
|
|
|
|
|
|
ida_funcs.func_t.tailqty
|
|
number of function tails
|
|
|
|
ida_funcs.func_t.tails
|
|
array of tails, sorted by ea. use func_tail_iterator_t to access function tails.
|
|
|
|
|
|
ida_funcs.func_t.tails
|
|
array of tails, sorted by ea. use func_tail_iterator_t to access function tails.
|
|
|
|
|
|
ida_funcs.func_t__from_ptrval__(ptrval: "size_t") -> "func_t *"
|
|
|
|
ida_funcs.func_tail_iterator_set(fti: "func_tail_iterator_t", pfn: "func_t", ea: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_set_ea(fti: "func_tail_iterator_t", ea: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t
|
|
|
|
ida_funcs.func_tail_iterator_t.__init__(self, *args)
|
|
|
|
ida_funcs.func_tail_iterator_t.__iter__(self)
|
|
Provide an iterator on function tails
|
|
|
|
ida_funcs.func_tail_iterator_t.__next__(self) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.chunk(self) -> "range_t const &"
|
|
|
|
ida_funcs.func_tail_iterator_t.first(self) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.last(self) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.main(self) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.prev(self) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.set(self, *args) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.set_ea(self, ea: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_funcs.func_tail_iterator_t.set_range(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_funcs.get_current_idasgn() -> int
|
|
Get number of the the current signature.
|
|
|
|
@returns 0..n-1
|
|
|
|
ida_funcs.get_fchunk(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to function chunk structure by address.
|
|
|
|
@param ea: any address in a function chunk
|
|
@returns ptr to a function chunk or nullptr. This function may return a function entry as well as a function tail.
|
|
|
|
ida_funcs.get_fchunk_num(ea: ida_idaapi.ea_t) -> int
|
|
Get ordinal number of a function chunk in the global list of function chunks.
|
|
|
|
@param ea: any address in the function chunk
|
|
@returns number of function chunk (0..get_fchunk_qty()-1). -1 means 'no function chunk at the specified address'.
|
|
|
|
ida_funcs.get_fchunk_qty() -> "size_t"
|
|
Get total number of function chunks in the program.
|
|
|
|
ida_funcs.get_fchunk_referer(ea: int, idx)
|
|
|
|
ida_funcs.get_func(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to function structure by address.
|
|
|
|
@param ea: any address in a function
|
|
@returns ptr to a function or nullptr. This function returns a function entry chunk.
|
|
|
|
ida_funcs.get_func_bitness(pfn: "func_t") -> int
|
|
Get function bitness (which is equal to the function segment bitness). pfn==nullptr => returns 0
|
|
|
|
@retval 0: 16
|
|
@retval 1: 32
|
|
@retval 2: 64
|
|
|
|
ida_funcs.get_func_bits(pfn: "func_t") -> int
|
|
Get number of bits in the function addressing.
|
|
|
|
ida_funcs.get_func_bytes(pfn: "func_t") -> int
|
|
Get number of bytes in the function addressing.
|
|
|
|
ida_funcs.get_func_chunknum(pfn: "func_t", ea: ida_idaapi.ea_t) -> int
|
|
Get the containing tail chunk of 'ea'.
|
|
|
|
@retval -1: means 'does not contain ea'
|
|
@retval 0: means the 'pfn' itself contains ea
|
|
@retval >0: the number of the containing function tail chunk
|
|
|
|
ida_funcs.get_func_cmt(pfn: "func_t", repeatable: bool) -> str
|
|
Get function comment.
|
|
|
|
@param pfn: ptr to function structure
|
|
@param repeatable: get repeatable comment?
|
|
@returns size of comment or -1 In fact this function works with function chunks too.
|
|
|
|
ida_funcs.get_func_name(ea: ida_idaapi.ea_t) -> str
|
|
Get function name.
|
|
|
|
@param ea: any address in the function
|
|
@returns length of the function name
|
|
|
|
ida_funcs.get_func_num(ea: ida_idaapi.ea_t) -> int
|
|
Get ordinal number of a function.
|
|
|
|
@param ea: any address in the function
|
|
@returns number of function (0..get_func_qty()-1). -1 means 'no function at the specified address'.
|
|
|
|
ida_funcs.get_func_qty() -> "size_t"
|
|
Get total number of functions in the program.
|
|
|
|
ida_funcs.get_func_ranges(ranges: "rangeset_t", pfn: "func_t") -> ida_idaapi.ea_t
|
|
Get function ranges.
|
|
|
|
@param ranges: buffer to receive the range info
|
|
@param pfn: ptr to function structure
|
|
@returns end address of the last function range (BADADDR-error)
|
|
|
|
ida_funcs.get_idasgn_desc(n)
|
|
Get information about a signature in the list.
|
|
It returns: (name of signature, names of optional libraries)
|
|
|
|
See also: get_idasgn_desc_with_matches
|
|
|
|
@param n: number of signature in the list (0..get_idasgn_qty()-1)
|
|
@return: None on failure or tuple(signame, optlibs)
|
|
|
|
ida_funcs.get_idasgn_desc_with_matches(n)
|
|
Get information about a signature in the list.
|
|
It returns: (name of signature, names of optional libraries, number of matches)
|
|
|
|
@param n: number of signature in the list (0..get_idasgn_qty()-1)
|
|
@return: None on failure or tuple(signame, optlibs, nmatches)
|
|
|
|
ida_funcs.get_idasgn_qty() -> int
|
|
Get number of signatures in the list of planned and applied signatures.
|
|
|
|
@returns 0..n
|
|
|
|
ida_funcs.get_idasgn_title(name: str) -> str
|
|
Get full description of the signature by its short name.
|
|
|
|
@param name: short name of a signature
|
|
@returns size of signature description or -1
|
|
|
|
ida_funcs.get_next_fchunk(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to the next function chunk in the global list.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to function chunk or nullptr if next function chunk doesn't exist
|
|
|
|
ida_funcs.get_next_func(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to the next function.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to function or nullptr if next function doesn't exist
|
|
|
|
ida_funcs.get_next_func_addr(pfn: "func_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
|
|
ida_funcs.get_prev_fchunk(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to the previous function chunk in the global list.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to function chunk or nullptr if previous function chunk doesn't exist
|
|
|
|
ida_funcs.get_prev_func(ea: ida_idaapi.ea_t) -> "func_t *"
|
|
Get pointer to the previous function.
|
|
|
|
@param ea: any address in the program
|
|
@returns ptr to function or nullptr if previous function doesn't exist
|
|
|
|
ida_funcs.get_prev_func_addr(pfn: "func_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t
|
|
|
|
ida_funcs.getn_fchunk(n: int) -> "func_t *"
|
|
Get pointer to function chunk structure by number.
|
|
|
|
@param n: number of function chunk, is in range 0..get_fchunk_qty()-1
|
|
@returns ptr to a function chunk or nullptr. This function may return a function entry as well as a function tail.
|
|
|
|
ida_funcs.getn_func(n: "size_t") -> "func_t *"
|
|
Get pointer to function structure by number.
|
|
|
|
@param n: number of function, is in range 0..get_func_qty()-1
|
|
@returns ptr to a function or nullptr. This function returns a function entry chunk.
|
|
|
|
ida_funcs.is_finally_visible_func(pfn: "func_t") -> bool
|
|
Is the function visible (event after considering SCF_SHHID_FUNC)?
|
|
|
|
ida_funcs.is_func_entry(pfn: "func_t") -> bool
|
|
Does function describe a function entry chunk?
|
|
|
|
ida_funcs.is_func_locked(pfn: "func_t") -> bool
|
|
Is the function pointer locked?
|
|
|
|
ida_funcs.is_func_tail(pfn: "func_t") -> bool
|
|
Does function describe a function tail chunk?
|
|
|
|
ida_funcs.is_same_func(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool
|
|
Do two addresses belong to the same function?
|
|
|
|
ida_funcs.is_visible_func(pfn: "func_t") -> bool
|
|
Is the function visible (not hidden)?
|
|
|
|
ida_funcs.lock_func
|
|
|
|
ida_funcs.lock_func.__init__(self, _pfn: "func_t")
|
|
|
|
ida_funcs.lock_func_range(pfn: "func_t", lock: bool) -> None
|
|
Lock function pointer Locked pointers are guaranteed to remain valid until they are unlocked. Ranges with locked pointers cannot be deleted or moved.
|
|
|
|
|
|
ida_funcs.lock_func_with_tails_t
|
|
|
|
ida_funcs.lock_func_with_tails_t.__init__(self, pfn: "func_t")
|
|
|
|
ida_funcs.plan_to_apply_idasgn(fname: str) -> int
|
|
Add a signature file to the list of planned signature files.
|
|
|
|
@param fname: file name. should not contain directory part.
|
|
@returns 0 if failed, otherwise number of planned (and applied) signatures
|
|
|
|
ida_funcs.read_regargs(pfn: "func_t") -> None
|
|
|
|
ida_funcs.reanalyze_function(*args) -> None
|
|
Reanalyze a function. This function plans to analyzes all chunks of the given function. Optional parameters (ea1, ea2) may be used to narrow the analyzed range.
|
|
|
|
@param pfn: pointer to a function
|
|
@param ea1: start of the range to analyze
|
|
@param ea2: end of range to analyze
|
|
@param analyze_parents: meaningful only if pfn points to a function tail. if true, all tail parents will be reanalyzed. if false, only the given tail will be reanalyzed.
|
|
|
|
ida_funcs.reanalyze_noret_flag(ea: ida_idaapi.ea_t) -> bool
|
|
Plan to reanalyze noret flag. This function does not remove FUNC_NORET if it is already present. It just plans to reanalysis.
|
|
|
|
|
|
ida_funcs.regarg_t
|
|
|
|
ida_funcs.regarg_t.__init__(self, *args)
|
|
|
|
ida_funcs.regarg_t.swap(self, r: "regarg_t") -> None
|
|
|
|
ida_funcs.remove_func_tail(pfn: "func_t", tail_ea: ida_idaapi.ea_t) -> bool
|
|
Remove a function tail. If the tail belongs only to one function, it will be completely removed. Otherwise if the function was the tail owner, the first function using this tail becomes the owner of the tail.
|
|
|
|
@param pfn: pointer to the function
|
|
@param tail_ea: any address inside the tail to remove
|
|
|
|
ida_funcs.set_func_cmt(pfn: "func_t", cmt: str, repeatable: bool) -> bool
|
|
Set function comment. This function works with function chunks too.
|
|
|
|
@param pfn: ptr to function structure
|
|
@param cmt: comment string, may be multiline (with '
|
|
'). Use empty str ("") to delete comment
|
|
@param repeatable: set repeatable comment?
|
|
|
|
ida_funcs.set_func_end(ea: ida_idaapi.ea_t, newend: ida_idaapi.ea_t) -> bool
|
|
Move function chunk end address.
|
|
|
|
@param ea: any address in the function
|
|
@param newend: new end address of the function
|
|
@returns success
|
|
|
|
ida_funcs.set_func_name_if_jumpfunc(pfn: "func_t", oldname: str) -> int
|
|
Give a meaningful name to function if it consists of only 'jump' instruction.
|
|
|
|
@param pfn: pointer to function (may be nullptr)
|
|
@param oldname: old name of function. if old name was in "j_..." form, then we may discard it and set a new name. if oldname is not known, you may pass nullptr.
|
|
@returns success
|
|
|
|
ida_funcs.set_func_start(ea: ida_idaapi.ea_t, newstart: ida_idaapi.ea_t) -> int
|
|
Move function chunk start address.
|
|
|
|
@param ea: any address in the function
|
|
@param newstart: new end address of the function
|
|
@returns Function move result codes
|
|
|
|
ida_funcs.set_noret_insn(insn_ea: ida_idaapi.ea_t, noret: bool) -> bool
|
|
Signal a non-returning instruction. This function can be used by the processor module to tell the kernel about non-returning instructions (like call exit). The kernel will perform the global function analysis and find out if the function returns at all. This analysis will be done at the first call to func_does_return()
|
|
|
|
@returns true if the instruction 'noret' flag has been changed
|
|
|
|
ida_funcs.set_tail_owner(fnt: "func_t", new_owner: ida_idaapi.ea_t) -> bool
|
|
Set a new owner of a function tail. The new owner function must be already referring to the tail (after append_func_tail).
|
|
|
|
@param fnt: pointer to the function tail
|
|
@param new_owner: the entry point of the new owner function
|
|
|
|
ida_funcs.set_visible_func(pfn: "func_t", visible: bool) -> None
|
|
Set visibility of function.
|
|
|
|
ida_funcs.try_to_add_libfunc(ea: ida_idaapi.ea_t) -> int
|
|
Apply the currently loaded signature file to the specified address. If a library function is found, then create a function and name it accordingly.
|
|
|
|
@param ea: any address in the program
|
|
@returns Library function codes
|
|
|
|
ida_funcs.update_func(pfn: "func_t") -> bool
|
|
Update information about a function in the database (func_t). You must not change the function start and end addresses using this function. Use set_func_start() and set_func_end() for it.
|
|
|
|
@param pfn: ptr to function structure
|
|
@returns success
|
|
|
|
ida_gdl
|
|
Low level graph drawing operations.
|
|
|
|
ida_gdl.BasicBlock
|
|
Basic block class. It is returned by the Flowchart class
|
|
|
|
ida_gdl.BasicBlock.__init__(self, id, bb, fc)
|
|
Block type (check fc_block_type_t enum)
|
|
|
|
ida_gdl.BasicBlock.preds(self)
|
|
Iterates the predecessors list
|
|
|
|
ida_gdl.BasicBlock.succs(self)
|
|
Iterates the successors list
|
|
|
|
ida_gdl.CHART_FOLLOW_DIRECTION
|
|
analyze references to added blocks only in the direction of the reference who discovered the current block
|
|
|
|
ida_gdl.CHART_GEN_DOT
|
|
generate .dot file (file extension is forced to .dot)
|
|
|
|
ida_gdl.CHART_GEN_GDL
|
|
generate .gdl file (file extension is forced to .gdl)
|
|
|
|
ida_gdl.CHART_IGNORE_LIB_FROM
|
|
ignore references from library functions
|
|
|
|
ida_gdl.CHART_IGNORE_LIB_TO
|
|
ignore references to library functions
|
|
|
|
ida_gdl.CHART_NOLIBFUNCS
|
|
don't include library functions in the graph
|
|
|
|
ida_gdl.CHART_PRINT_DOTS
|
|
print dots if xrefs exist outside of the range recursion depth
|
|
|
|
ida_gdl.CHART_PRINT_NAMES
|
|
print labels for each block?
|
|
|
|
ida_gdl.CHART_RECURSIVE
|
|
analyze added blocks
|
|
|
|
ida_gdl.CHART_REFERENCED
|
|
references from the addresses in the list
|
|
|
|
ida_gdl.CHART_REFERENCING
|
|
references to the addresses in the list
|
|
|
|
ida_gdl.CHART_WINGRAPH
|
|
call grapher to display the graph
|
|
|
|
ida_gdl.FC_APPND
|
|
multirange flowchart (set by append_to_flowchart)
|
|
|
|
ida_gdl.FC_CALL_ENDS
|
|
call instructions terminate basic blocks
|
|
|
|
ida_gdl.FC_CHKBREAK
|
|
build_qflow_chart() may be aborted by user
|
|
|
|
ida_gdl.FC_NOEXT
|
|
do not compute external blocks. Use this to prevent jumps leaving the function from appearing in the flow chart. Unless specified, the targets of those outgoing jumps will be present in the flow chart under the form of one-instruction blocks
|
|
|
|
|
|
ida_gdl.FC_NOPREDS
|
|
do not compute predecessor lists
|
|
|
|
ida_gdl.FC_OUTLINES
|
|
include outlined code (with FUNC_OUTLINE)
|
|
|
|
ida_gdl.FC_PRINT
|
|
print names (used only by display_flow_chart())
|
|
|
|
ida_gdl.FC_RESERVED
|
|
former FC_PREDS
|
|
|
|
ida_gdl.FlowChart
|
|
Flowchart class used to determine basic blocks.
|
|
Check ex_gdl_qflow_chart.py for sample usage.
|
|
|
|
ida_gdl.FlowChart.__getitem__(self, index)
|
|
Returns a basic block
|
|
|
|
@return: BasicBlock
|
|
|
|
ida_gdl.FlowChart.__init__(self, f = None, bounds = None, flags = 0)
|
|
Constructor
|
|
@param f: A func_t type, use get_func(ea) to get a reference
|
|
@param bounds: A tuple of the form (start, end). Used if "f" is None
|
|
@param flags: one of the FC_xxxx flags.
|
|
|
|
ida_gdl.FlowChart.__iter__(self)
|
|
|
|
ida_gdl.FlowChart._getitem(self, index)
|
|
|
|
ida_gdl.FlowChart.refresh(self)
|
|
Refreshes the flow chart
|
|
|
|
ida_gdl.FlowChart.size
|
|
Number of blocks in the flow chart
|
|
|
|
ida_gdl.cancellable_graph_t
|
|
|
|
ida_gdl.cancellable_graph_t.__disown__(self)
|
|
|
|
ida_gdl.cancellable_graph_t.__init__(self)
|
|
|
|
ida_gdl.display_gdl(fname: str) -> int
|
|
Display GDL file by calling wingraph32. The exact name of the grapher is taken from the configuration file and set up by setup_graph_subsystem(). The path should point to a temporary file: when wingraph32 succeeds showing the graph, the input file will be deleted.
|
|
|
|
@returns error code from os, 0 if ok
|
|
|
|
ida_gdl.edge_t
|
|
|
|
ida_gdl.edge_t.__eq__(self, y: "edge_t") -> bool
|
|
|
|
ida_gdl.edge_t.__init__(self, x: int = 0, y: int = 0)
|
|
|
|
ida_gdl.edge_t.__lt__(self, y: "edge_t") -> bool
|
|
|
|
ida_gdl.edge_t.__ne__(self, y: "edge_t") -> bool
|
|
|
|
ida_gdl.edge_t.dst
|
|
destination node number
|
|
|
|
ida_gdl.edge_t.src
|
|
source node number
|
|
|
|
ida_gdl.edgevec_t
|
|
|
|
ida_gdl.edgevec_t.__init__(self)
|
|
|
|
ida_gdl.fcb_cndret
|
|
conditional return block
|
|
|
|
ida_gdl.fcb_enoret
|
|
external noreturn block (does not belong to the function)
|
|
|
|
ida_gdl.fcb_error
|
|
block passes execution past the function end
|
|
|
|
ida_gdl.fcb_extern
|
|
external normal block
|
|
|
|
ida_gdl.fcb_indjump
|
|
block ends with indirect jump
|
|
|
|
ida_gdl.fcb_noret
|
|
noreturn block
|
|
|
|
ida_gdl.fcb_normal
|
|
normal block
|
|
|
|
ida_gdl.fcb_ret
|
|
return block
|
|
|
|
ida_gdl.gdl_graph_t
|
|
|
|
ida_gdl.gdl_graph_t.__disown__(self)
|
|
|
|
ida_gdl.gdl_graph_t.__init__(self)
|
|
|
|
ida_gdl.gdl_graph_t.begin(self) -> "node_iterator"
|
|
|
|
ida_gdl.gdl_graph_t.edge(self, node: int, i: int, ispred: bool) -> int
|
|
|
|
ida_gdl.gdl_graph_t.empty(self) -> bool
|
|
|
|
ida_gdl.gdl_graph_t.end(self) -> "node_iterator"
|
|
|
|
ida_gdl.gdl_graph_t.entry(self) -> int
|
|
|
|
ida_gdl.gdl_graph_t.exists(self, node: int) -> bool
|
|
|
|
ida_gdl.gdl_graph_t.exit(self) -> int
|
|
|
|
ida_gdl.gdl_graph_t.front(self) -> int
|
|
|
|
ida_gdl.gdl_graph_t.get_edge_color(self, i: int, j: int) -> "bgcolor_t"
|
|
|
|
ida_gdl.gdl_graph_t.get_node_color(self, n: int) -> "bgcolor_t"
|
|
|
|
ida_gdl.gdl_graph_t.get_node_label(self, n: int) -> "char *"
|
|
|
|
ida_gdl.gdl_graph_t.nedge(self, node: int, ispred: bool) -> "size_t"
|
|
|
|
ida_gdl.gdl_graph_t.node_qty(self) -> int
|
|
|
|
ida_gdl.gdl_graph_t.npred(self, node: int) -> int
|
|
|
|
ida_gdl.gdl_graph_t.nsucc(self, node: int) -> int
|
|
|
|
ida_gdl.gdl_graph_t.pred(self, node: int, i: int) -> int
|
|
|
|
ida_gdl.gdl_graph_t.print_edge(self, fp: "FILE *", i: int, j: int) -> bool
|
|
|
|
ida_gdl.gdl_graph_t.print_graph_attributes(self, fp: "FILE *") -> None
|
|
|
|
ida_gdl.gdl_graph_t.print_node(self, fp: "FILE *", n: int) -> bool
|
|
|
|
ida_gdl.gdl_graph_t.print_node_attributes(self, fp: "FILE *", n: int) -> None
|
|
|
|
ida_gdl.gdl_graph_t.size(self) -> int
|
|
|
|
ida_gdl.gdl_graph_t.succ(self, node: int, i: int) -> int
|
|
|
|
ida_gdl.gen_complex_call_chart(filename: str, wait: str, title: str, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, flags: int, recursion_depth: int = -1) -> bool
|
|
Build and display a complex xref graph.
|
|
|
|
@param filename: output file name. the file extension is not used. maybe nullptr.
|
|
@param wait: message to display during graph building
|
|
@param title: graph title
|
|
@param ea1: address range
|
|
@param ea2: address range
|
|
@param flags: combination of Call chart building flags and Flow graph building flags. if none of CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the function will return false.
|
|
@param recursion_depth: optional limit of recursion
|
|
@returns success. if fails, a warning message is displayed on the screen
|
|
|
|
ida_gdl.gen_flow_graph(filename: str, title: str, pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, gflags: int) -> bool
|
|
Build and display a flow graph.
|
|
|
|
@param filename: output file name. the file extension is not used. maybe nullptr.
|
|
@param title: graph title
|
|
@param pfn: function to graph
|
|
@param ea1: if pfn == nullptr, then the address range
|
|
@param ea2: if pfn == nullptr, then the address range
|
|
@param gflags: combination of Flow graph building flags. if none of CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the function will return false
|
|
@returns success. if fails, a warning message is displayed on the screen
|
|
|
|
ida_gdl.gen_gdl(g: "gdl_graph_t", fname: str) -> None
|
|
Create GDL file for graph.
|
|
|
|
ida_gdl.gen_simple_call_chart(filename: str, wait: str, title: str, gflags: int) -> bool
|
|
Build and display a simple function call graph.
|
|
|
|
@param filename: output file name. the file extension is not used. maybe nullptr.
|
|
@param wait: message to display during graph building
|
|
@param title: graph title
|
|
@param gflags: combination of CHART_NOLIBFUNCS and Flow graph building flags. if none of CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the function will return false.
|
|
@returns success. if fails, a warning message is displayed on the screen
|
|
|
|
ida_gdl.is_noret_block(btype: "fc_block_type_t") -> bool
|
|
Does this block never return?
|
|
|
|
ida_gdl.is_ret_block(btype: "fc_block_type_t") -> bool
|
|
Does this block return?
|
|
|
|
ida_gdl.node_iterator
|
|
|
|
ida_gdl.node_iterator.__eq__(self, n: "node_iterator") -> bool
|
|
|
|
ida_gdl.node_iterator.__init__(self, _g: "gdl_graph_t", n: int)
|
|
|
|
ida_gdl.node_iterator.__ne__(self, n: "node_iterator") -> bool
|
|
|
|
ida_gdl.node_iterator.__ref__(self) -> int
|
|
|
|
ida_gdl.node_ordering_t
|
|
|
|
ida_gdl.node_ordering_t.__init__(self)
|
|
|
|
ida_gdl.node_ordering_t.clear(self) -> None
|
|
|
|
ida_gdl.node_ordering_t.clr(self, _node: int) -> bool
|
|
|
|
ida_gdl.node_ordering_t.node(self, _order: "size_t") -> int
|
|
|
|
ida_gdl.node_ordering_t.order(self, _node: int) -> int
|
|
|
|
ida_gdl.node_ordering_t.resize(self, n: int) -> None
|
|
|
|
ida_gdl.node_ordering_t.set(self, _node: int, num: int) -> None
|
|
|
|
ida_gdl.node_ordering_t.size(self) -> "size_t"
|
|
|
|
ida_gdl.qbasic_block_t
|
|
|
|
ida_gdl.qbasic_block_t.__init__(self)
|
|
|
|
ida_gdl.qflow_chart_t
|
|
|
|
ida_gdl.qflow_chart_t.__getitem__(self, n: int) -> "qbasic_block_t *"
|
|
|
|
ida_gdl.qflow_chart_t.__init__(self, *args)
|
|
|
|
ida_gdl.qflow_chart_t.append_to_flowchart(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None
|
|
|
|
ida_gdl.qflow_chart_t.bounds
|
|
overall bounds of the qflow_chart_t instance
|
|
|
|
ida_gdl.qflow_chart_t.calc_block_type(self, blknum: "size_t") -> "fc_block_type_t"
|
|
|
|
ida_gdl.qflow_chart_t.create(self, *args) -> None
|
|
This function has the following signatures:
|
|
|
|
0. create(_title: str, _pfn: func_t *, _ea1: ida_idaapi.ea_t, _ea2: ida_idaapi.ea_t, _flags: int) -> None
|
|
1. create(_title: str, ranges: const rangevec_t &, _flags: int) -> None
|
|
|
|
# 0: create(_title: str, _pfn: func_t *, _ea1: ida_idaapi.ea_t, _ea2: ida_idaapi.ea_t, _flags: int) -> None
|
|
|
|
|
|
# 1: create(_title: str, ranges: const rangevec_t &, _flags: int) -> None
|
|
|
|
ida_gdl.qflow_chart_t.flags
|
|
flags. See Flow chart flags
|
|
|
|
ida_gdl.qflow_chart_t.get_node_label(self, *args) -> "char *"
|
|
|
|
ida_gdl.qflow_chart_t.is_noret_block(self, blknum: "size_t") -> bool
|
|
|
|
ida_gdl.qflow_chart_t.is_ret_block(self, blknum: "size_t") -> bool
|
|
|
|
ida_gdl.qflow_chart_t.npred(self, node: int) -> int
|
|
|
|
ida_gdl.qflow_chart_t.nproper
|
|
number of basic blocks belonging to the specified range
|
|
|
|
ida_gdl.qflow_chart_t.nsucc(self, node: int) -> int
|
|
|
|
ida_gdl.qflow_chart_t.pfn
|
|
the function this instance was built upon
|
|
|
|
ida_gdl.qflow_chart_t.pred(self, node: int, i: int) -> int
|
|
|
|
ida_gdl.qflow_chart_t.print_names(self) -> bool
|
|
|
|
ida_gdl.qflow_chart_t.print_node_attributes(self, fp: "FILE *", n: int) -> None
|
|
|
|
ida_gdl.qflow_chart_t.refresh(self) -> None
|
|
|
|
ida_gdl.qflow_chart_t.size(self) -> int
|
|
|
|
ida_gdl.qflow_chart_t.succ(self, node: int, i: int) -> int
|
|
|
|
ida_graph
|
|
Graph view management.
|
|
|
|
ida_graph.GLICTL_CENTER
|
|
the gli should be set/get as center
|
|
|
|
ida_graph.GraphViewer
|
|
This class wraps the user graphing facility provided by the graph.hpp file
|
|
|
|
ida_graph.GraphViewer.AddCommand(self, title, shortcut)
|
|
|
|
ida_graph.GraphViewer.AddEdge(self, src_node, dest_node)
|
|
Creates an edge between two given node ids
|
|
|
|
ida_graph.GraphViewer.AddNode(self, obj)
|
|
Creates a node associated with the given object and returns the node id
|
|
|
|
ida_graph.GraphViewer.Clear(self)
|
|
Clears all the nodes and edges
|
|
|
|
ida_graph.GraphViewer.Close(self)
|
|
Closes the graph.
|
|
It is possible to call Show() again (which will recreate the graph)
|
|
|
|
ida_graph.GraphViewer.Count(self)
|
|
Returns the node count
|
|
|
|
ida_graph.GraphViewer.OnCommand(self, cmd_id)
|
|
|
|
ida_graph.GraphViewer.OnPopup(self, widget, popup_handle)
|
|
|
|
ida_graph.GraphViewer.OnRefresh(self)
|
|
Event called when the graph is refreshed or first created.
|
|
From this event you are supposed to create nodes and edges.
|
|
This callback is mandatory.
|
|
|
|
@note: ***It is important to clear previous nodes before adding nodes.***
|
|
@return: Returning True tells the graph viewer to use the items. Otherwise old items will be used.
|
|
|
|
ida_graph.GraphViewer.Select(self, node_id)
|
|
Selects a node on the graph
|
|
|
|
ida_graph.GraphViewer.Show(self)
|
|
Shows an existing graph or creates a new one
|
|
|
|
@return: Boolean
|
|
|
|
ida_graph.GraphViewer.UI_Hooks_Trampoline
|
|
|
|
ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__(self, v)
|
|
|
|
ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup(self, w, popup_handle)
|
|
|
|
ida_graph.GraphViewer._OnBind(self, hook)
|
|
|
|
ida_graph.GraphViewer.__getitem__(self, idx)
|
|
Returns a reference to the object associated with this node id
|
|
|
|
ida_graph.GraphViewer.__init__(self, title, close_open = False)
|
|
Constructs the GraphView object.
|
|
Please do not remove or rename the private fields
|
|
|
|
@param title: The title of the graph window
|
|
@param close_open: Should it attempt to close an existing graph (with same title) before creating this graph?
|
|
|
|
ida_graph.GraphViewer.__init__._qccb(ctx, cmd_id)
|
|
|
|
ida_graph.GraphViewer.__iter__(self)
|
|
|
|
ida_graph.MTG_DOT_NODE
|
|
is dot node?
|
|
|
|
ida_graph.MTG_GROUP_NODE
|
|
is group node?
|
|
|
|
ida_graph.MTG_NON_DISPLAYABLE_NODE
|
|
for disassembly graphs - non-displayable nodes have a visible area that is too large to generate disassembly lines for without IDA slowing down significantly (see MAX_VISIBLE_NODE_AREA)
|
|
|
|
|
|
ida_graph.NIF_BG_COLOR
|
|
node_info_t::bg_color
|
|
|
|
ida_graph.NIF_EA
|
|
node_info_t::ea
|
|
|
|
ida_graph.NIF_FLAGS
|
|
node_info_t::flags
|
|
|
|
ida_graph.NIF_FRAME_COLOR
|
|
node_info_t::frame_color
|
|
|
|
ida_graph.NIF_TEXT
|
|
node_info_t::text
|
|
|
|
ida_graph.TPointDouble
|
|
|
|
ida_graph.TPointDouble.__eq__(self, r: "TPointDouble") -> bool
|
|
|
|
ida_graph.TPointDouble.__init__(self, *args)
|
|
|
|
ida_graph.TPointDouble.__ne__(self, r: "TPointDouble") -> bool
|
|
|
|
ida_graph.TPointDouble.add(self, r: "TPointDouble") -> None
|
|
|
|
ida_graph.TPointDouble.negate(self) -> None
|
|
|
|
ida_graph.TPointDouble.sub(self, r: "TPointDouble") -> None
|
|
|
|
ida_graph.calc_dist(p: "point_t", q: "point_t") -> "double"
|
|
Calculate distance between p and q.
|
|
|
|
ida_graph.clr_node_info(gid: "graph_id_t", node: int, flags: int) -> None
|
|
Clear node info for the given node.
|
|
|
|
@param gid: id of desired graph
|
|
@param node: node number
|
|
@param flags: combination of Node info flags, identifying which fields of node_info_t will be cleared
|
|
|
|
ida_graph.create_disasm_graph(*args) -> "interactive_graph_t *"
|
|
This function has the following signatures:
|
|
|
|
0. create_disasm_graph(ea: ida_idaapi.ea_t) -> interactive_graph_t *
|
|
1. create_disasm_graph(ranges: const rangevec_t &) -> interactive_graph_t *
|
|
|
|
# 0: create_disasm_graph(ea: ida_idaapi.ea_t) -> interactive_graph_t *
|
|
|
|
Create a graph for the function that contains 'ea'.
|
|
|
|
|
|
# 1: create_disasm_graph(ranges: const rangevec_t &) -> interactive_graph_t *
|
|
|
|
Create a graph using an arbitrary set of ranges.
|
|
|
|
ida_graph.create_graph_viewer(title: str, id: int, callback: "hook_cb_t *", ud: "void *", title_height: int, parent: "TWidget *" = None) -> "graph_viewer_t *"
|
|
Create a custom graph viewer.
|
|
|
|
@param title: the widget title
|
|
@param id: graph id
|
|
@param callback: callback to handle graph notifications (graph_notification_t)
|
|
@param ud: user data passed to callback
|
|
@param title_height: node title height
|
|
@param parent: the parent widget of the graph viewer
|
|
@returns new viewer
|
|
|
|
ida_graph.create_interactive_graph(id: int) -> "interactive_graph_t *"
|
|
Create a new empty graph with given id.
|
|
|
|
ida_graph.create_user_graph_place(node: int, lnnum: int) -> "user_graph_place_t *"
|
|
Get a copy of a user_graph_place_t (returns a pointer to static storage)
|
|
|
|
ida_graph.del_node_info(gid: "graph_id_t", node: int) -> None
|
|
Delete the node_info_t for the given node.
|
|
|
|
ida_graph.delete_interactive_graph(g: "interactive_graph_t") -> None
|
|
Delete graph object.
|
|
|
|
|
|
ida_graph.drawable_graph_t
|
|
|
|
ida_graph.drawable_graph_t.__disown__(self)
|
|
|
|
ida_graph.drawable_graph_t.__init__(self)
|
|
|
|
ida_graph.drawable_graph_t.callback_ud
|
|
user data for callback
|
|
|
|
ida_graph.drawable_graph_t.circle_center
|
|
for layout_circle
|
|
|
|
ida_graph.drawable_graph_t.circle_radius
|
|
for layout_circle
|
|
|
|
ida_graph.drawable_graph_t.create_circle_layout(self, p: "point_t", radius: int) -> bool
|
|
|
|
ida_graph.drawable_graph_t.create_tree_layout(self) -> bool
|
|
|
|
ida_graph.drawable_graph_t.current_layout
|
|
see Proximity view layouts
|
|
|
|
ida_graph.drawable_graph_t.get_edge(self, e: "edge_t") -> "edge_info_t *"
|
|
|
|
ida_graph.drawable_graph_t.grcall(self, code: int) -> "ssize_t"
|
|
|
|
ida_graph.drawable_graph_t.nrect(self, n: int) -> "rect_t"
|
|
|
|
ida_graph.drawable_graph_t.rect_edges_made
|
|
have create rectangular edges?
|
|
|
|
ida_graph.drawable_graph_t.set_callback(self, _callback: "hook_cb_t *", _ud: "void *") -> None
|
|
|
|
ida_graph.drawable_graph_t.title
|
|
graph title
|
|
|
|
ida_graph.edge_info_t
|
|
|
|
ida_graph.edge_info_t.__init__(self)
|
|
|
|
ida_graph.edge_info_t.color
|
|
edge color
|
|
|
|
ida_graph.edge_info_t.dstoff
|
|
destination: edge port offset from the left
|
|
|
|
ida_graph.edge_info_t.layout
|
|
describes geometry of edge
|
|
|
|
ida_graph.edge_info_t.reverse_layout(self) -> None
|
|
|
|
ida_graph.edge_info_t.srcoff
|
|
source: edge port offset from the left
|
|
|
|
ida_graph.edge_info_t.width
|
|
edge width
|
|
|
|
ida_graph.edge_infos_wrapper_t
|
|
|
|
ida_graph.edge_infos_wrapper_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_graph.edge_infos_wrapper_t.clear(self) -> None
|
|
|
|
ida_graph.edge_layout_point_t
|
|
|
|
ida_graph.edge_layout_point_t.__eq__(self, r: "edge_layout_point_t") -> bool
|
|
|
|
ida_graph.edge_layout_point_t.__init__(self, *args)
|
|
|
|
ida_graph.edge_layout_point_t.__ne__(self, r: "edge_layout_point_t") -> bool
|
|
|
|
ida_graph.edge_layout_point_t.compare(self, r: "edge_layout_point_t") -> int
|
|
|
|
ida_graph.edge_layout_point_t.e
|
|
parent edge
|
|
|
|
ida_graph.edge_layout_point_t.pidx
|
|
index into edge_info_t::layout
|
|
|
|
ida_graph.edge_segment_t
|
|
|
|
ida_graph.edge_segment_t.__init__(self)
|
|
|
|
ida_graph.edge_segment_t.__lt__(self, r: "edge_segment_t") -> bool
|
|
|
|
ida_graph.edge_segment_t.length(self) -> "size_t"
|
|
|
|
ida_graph.edge_segment_t.toright(self) -> bool
|
|
|
|
ida_graph.get_graph_viewer(parent: "TWidget *") -> "graph_viewer_t *"
|
|
Get custom graph viewer for given form.
|
|
|
|
ida_graph.get_node_info(out: "node_info_t", gid: "graph_id_t", node: int) -> bool
|
|
Get node info.
|
|
|
|
@param out: result
|
|
@param gid: id of desired graph
|
|
@param node: node number
|
|
@returns success
|
|
|
|
ida_graph.get_viewer_graph(gv: "graph_viewer_t *") -> "interactive_graph_t *"
|
|
Get graph object for given custom graph viewer.
|
|
|
|
ida_graph.git_edge
|
|
edge (graph_item_t::e, graph_item_t::n. n is farthest edge endpoint)
|
|
|
|
ida_graph.git_elp
|
|
edge layout point (graph_item_t::elp)
|
|
|
|
ida_graph.git_node
|
|
node title (graph_item_t::n)
|
|
|
|
ida_graph.git_none
|
|
nothing
|
|
|
|
ida_graph.git_text
|
|
node text (graph_item_t::n, graph_item_t::p)
|
|
|
|
ida_graph.git_tool
|
|
node title button (graph_item_t::n, graph_item_t::b)
|
|
|
|
ida_graph.graph_item_t
|
|
|
|
ida_graph.graph_item_t.__init__(self)
|
|
|
|
ida_graph.graph_item_t.b
|
|
button number
|
|
|
|
ida_graph.graph_item_t.e
|
|
edge source and destination
|
|
|
|
ida_graph.graph_item_t.elp
|
|
edge layout point
|
|
|
|
ida_graph.graph_item_t.is_edge(self) -> bool
|
|
|
|
ida_graph.graph_item_t.is_node(self) -> bool
|
|
|
|
ida_graph.graph_item_t.n
|
|
node number
|
|
|
|
ida_graph.graph_item_t.p
|
|
text coordinates in the node
|
|
|
|
ida_graph.graph_item_t.type
|
|
type
|
|
|
|
ida_graph.graph_node_visitor_t
|
|
|
|
ida_graph.graph_node_visitor_t.__disown__(self)
|
|
|
|
ida_graph.graph_node_visitor_t.__init__(self)
|
|
|
|
ida_graph.graph_node_visitor_t.is_forbidden_edge(self, arg0: int, arg1: int) -> bool
|
|
Should the edge between 'n' and 'm' be ignored?
|
|
|
|
ida_graph.graph_node_visitor_t.is_visited(self, n: int) -> bool
|
|
Have we already visited the given node?
|
|
|
|
ida_graph.graph_node_visitor_t.reinit(self) -> None
|
|
Reset visited nodes.
|
|
|
|
ida_graph.graph_node_visitor_t.set_visited(self, n: int) -> None
|
|
Mark node as visited.
|
|
|
|
ida_graph.graph_node_visitor_t.visit_node(self, arg0: int) -> int
|
|
Implements action to take when a node is visited.
|
|
|
|
ida_graph.graph_path_visitor_t
|
|
|
|
ida_graph.graph_path_visitor_t.__disown__(self)
|
|
|
|
ida_graph.graph_path_visitor_t.__init__(self)
|
|
|
|
ida_graph.graph_path_visitor_t.path
|
|
current path
|
|
|
|
ida_graph.graph_path_visitor_t.prune
|
|
walk_forward(): prune := true means to stop the current path
|
|
|
|
|
|
ida_graph.graph_path_visitor_t.walk_backward(self, arg0: int) -> int
|
|
|
|
ida_graph.graph_path_visitor_t.walk_forward(self, arg0: int) -> int
|
|
|
|
ida_graph.graph_visitor_t
|
|
|
|
ida_graph.graph_visitor_t.__disown__(self)
|
|
|
|
ida_graph.graph_visitor_t.__init__(self)
|
|
|
|
ida_graph.graph_visitor_t.visit_edge(self, arg2: "edge_t", arg3: "edge_info_t") -> int
|
|
|
|
ida_graph.graph_visitor_t.visit_node(self, arg2: int, arg3: "rect_t") -> int
|
|
|
|
ida_graph.grcode_calculating_layout
|
|
calculating user-defined graph layout.
|
|
|
|
|
|
ida_graph.grcode_center_on
|
|
use viewer_center_on()
|
|
|
|
ida_graph.grcode_change_group_visibility
|
|
use interactive_graph_t::change_group_visibility()
|
|
|
|
ida_graph.grcode_changed_graph
|
|
new graph has been set.
|
|
|
|
|
|
ida_graph.grcode_clear
|
|
use interactive_graph_t::clear()
|
|
|
|
ida_graph.grcode_clicked
|
|
graph is being clicked. this callback allows you to ignore some clicks. it occurs too early, internal graph variables are not updated yet. current_item1, current_item2 point to the same thing. item2 has more information. see also: custom_viewer_click_t
|
|
|
|
|
|
ida_graph.grcode_create_circle_layout
|
|
use drawable_graph_t::create_circle_layout()
|
|
|
|
ida_graph.grcode_create_digraph_layout
|
|
use interactive_graph_t::create_digraph_layout()
|
|
|
|
ida_graph.grcode_create_disasm_graph1
|
|
use create_disasm_graph(ea_t ea)
|
|
|
|
ida_graph.grcode_create_disasm_graph2
|
|
use create_disasm_graph(const rangevec_t &ranges)
|
|
|
|
ida_graph.grcode_create_graph_viewer
|
|
use create_graph_viewer()
|
|
|
|
ida_graph.grcode_create_group
|
|
use interactive_graph_t::create_group()
|
|
|
|
ida_graph.grcode_create_interactive_graph
|
|
use create_interactive_graph()
|
|
|
|
ida_graph.grcode_create_tree_layout
|
|
use drawable_graph_t::create_tree_layout()
|
|
|
|
ida_graph.grcode_create_user_graph_place
|
|
use create_user_graph_place()
|
|
|
|
ida_graph.grcode_creating_group
|
|
a group is being created. this provides an opportunity for the graph to forbid creation of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback.
|
|
|
|
|
|
ida_graph.grcode_dblclicked
|
|
a graph node has been double clicked.
|
|
|
|
|
|
ida_graph.grcode_del_custom_layout
|
|
use interactive_graph_t::del_custom_layout()
|
|
|
|
ida_graph.grcode_del_node_info
|
|
use viewer_del_node_info()
|
|
|
|
ida_graph.grcode_delete_group
|
|
use interactive_graph_t::delete_group()
|
|
|
|
ida_graph.grcode_delete_interactive_graph
|
|
use delete_interactive_graph()
|
|
|
|
ida_graph.grcode_deleting_group
|
|
a group is being deleted. this provides an opportunity for the graph to forbid deletion of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback.
|
|
|
|
|
|
ida_graph.grcode_destroyed
|
|
graph is being destroyed. Note that this doesn't mean the graph viewer is being destroyed; this only means that the graph that is being displayed by it is being destroyed, and that, e.g., any possibly cached data should be invalidated (this event can happen when, for example, the user decides to group nodes together: that operation will effectively create a new graph, that will replace the old one.) To be notified when the graph viewer itself is being destroyed, please see notification 'view_close', in kernwin.hpp
|
|
|
|
|
|
ida_graph.grcode_edge_infos_wrapper_clear
|
|
use edge_infos_wrapper_t::clear()
|
|
|
|
ida_graph.grcode_edge_infos_wrapper_copy
|
|
use edge_infos_wrapper_t::operator=()
|
|
|
|
ida_graph.grcode_empty
|
|
use interactive_graph_t::empty()
|
|
|
|
ida_graph.grcode_find_subgraph_node
|
|
use interactive_graph_t::_find_subgraph_node()
|
|
|
|
ida_graph.grcode_fit_window
|
|
use viewer_fit_window()
|
|
|
|
ida_graph.grcode_get_curnode
|
|
use viewer_get_curnode()
|
|
|
|
ida_graph.grcode_get_custom_layout
|
|
use interactive_graph_t::get_custom_layout()
|
|
|
|
ida_graph.grcode_get_gli
|
|
use viewer_get_gli()
|
|
|
|
ida_graph.grcode_get_graph_groups
|
|
use interactive_graph_t::get_graph_groups()
|
|
|
|
ida_graph.grcode_get_graph_viewer
|
|
use get_graph_viewer()
|
|
|
|
ida_graph.grcode_get_node_info
|
|
use viewer_get_node_info()
|
|
|
|
ida_graph.grcode_get_node_representative
|
|
use interactive_graph_t::get_node_representative()
|
|
|
|
ida_graph.grcode_get_selection
|
|
use viewer_get_selection()
|
|
|
|
ida_graph.grcode_get_viewer_graph
|
|
use get_viewer_graph()
|
|
|
|
ida_graph.grcode_gotfocus
|
|
a graph viewer got focus.
|
|
|
|
|
|
ida_graph.grcode_group_visibility
|
|
a group is being collapsed/uncollapsed this provides an opportunity for the graph to forbid changing the visibility of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback.
|
|
|
|
|
|
ida_graph.grcode_is_visible_node
|
|
use interactive_graph_t::is_visible_node()
|
|
|
|
ida_graph.grcode_layout_calculated
|
|
graph layout calculated.
|
|
|
|
|
|
ida_graph.grcode_lostfocus
|
|
a graph viewer lost focus.
|
|
|
|
|
|
ida_graph.grcode_node_qty
|
|
use interactive_graph_t::node_qty()
|
|
|
|
ida_graph.grcode_nrect
|
|
use interactive_graph_t::nrect()
|
|
|
|
ida_graph.grcode_refresh_viewer
|
|
use refresh_viewer()
|
|
|
|
ida_graph.grcode_set_custom_layout
|
|
use interactive_graph_t::set_custom_layout()
|
|
|
|
ida_graph.grcode_set_edge
|
|
use interactive_graph_t::set_edge()
|
|
|
|
ida_graph.grcode_set_gli
|
|
use viewer_set_gli()
|
|
|
|
ida_graph.grcode_set_graph_groups
|
|
use interactive_graph_t::set_graph_groups()
|
|
|
|
ida_graph.grcode_set_node_info
|
|
use viewer_set_node_info()
|
|
|
|
ida_graph.grcode_set_titlebar_height
|
|
use viewer_set_titlebar_height()
|
|
|
|
ida_graph.grcode_set_viewer_graph
|
|
use set_viewer_graph()
|
|
|
|
ida_graph.grcode_user_draw
|
|
render node of a user-defined graph. NB: draw only on the specified DC and nowhere else!
|
|
|
|
|
|
ida_graph.grcode_user_hint
|
|
retrieve hint for the user-defined graph.
|
|
|
|
|
|
ida_graph.grcode_user_refresh
|
|
refresh user-defined graph nodes and edges This is called when the UI considers that it is necessary to recreate the graph layout, and thus has to ensure that the 'interactive_graph_t' instance it is using, is up-to-date. For example:
|
|
* at graph creation-time
|
|
* if a refresh_viewer() call was made
|
|
|
|
ida_graph.grcode_user_size
|
|
calculate node size for user-defined graph.
|
|
|
|
|
|
ida_graph.grcode_user_text
|
|
retrieve text for user-defined graph node. NB: do not use anything calling GDI!
|
|
|
|
|
|
ida_graph.grcode_user_title
|
|
render node title of a user-defined graph.
|
|
|
|
|
|
ida_graph.grcode_viewer_create_groups_vec
|
|
use viewer_create_groups()
|
|
|
|
ida_graph.grcode_viewer_delete_groups_vec
|
|
use viewer_delete_groups()
|
|
|
|
ida_graph.grcode_viewer_groups_visibility_vec
|
|
use viewer_set_groups_visibility()
|
|
|
|
ida_graph.group_crinfo_t
|
|
|
|
ida_graph.group_crinfo_t.__init__(self)
|
|
|
|
ida_graph.interactive_graph_t
|
|
|
|
ida_graph.interactive_graph_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_graph.interactive_graph_t.add_edge(self, i: int, j: int, ei: "edge_info_t") -> bool
|
|
|
|
ida_graph.interactive_graph_t.add_node(self, r: "rect_t") -> int
|
|
Add a node, possibly with a specific geometry
|
|
|
|
@param r: the node geometry (can be nullptr)
|
|
@returns the new node
|
|
|
|
ida_graph.interactive_graph_t.belongs
|
|
the subgraph the node belongs to INT_MAX means that the node doesn't exist sign bit means collapsed node
|
|
|
|
|
|
ida_graph.interactive_graph_t.calc_group_ea(self, arg2: "intvec_t const &") -> ida_idaapi.ea_t
|
|
|
|
ida_graph.interactive_graph_t.change_group_visibility(self, group: int, expand: bool) -> bool
|
|
Expand/collapse a group node
|
|
|
|
@param group: the group node
|
|
@param expand: whether to expand or collapse
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.create_digraph_layout(self) -> bool
|
|
|
|
ida_graph.interactive_graph_t.create_group(self, nodes: "intvec_t const &") -> int
|
|
Create a new group node, that will contain all the nodes in 'nodes'.
|
|
|
|
@param nodes: the nodes that will be part of the group
|
|
@returns the group node, or -1 in case of error
|
|
|
|
ida_graph.interactive_graph_t.del_custom_layout(self) -> None
|
|
|
|
ida_graph.interactive_graph_t.del_edge(self, i: int, j: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.del_node(self, n: int) -> "ssize_t"
|
|
Delete a node
|
|
|
|
@param n: the node to delete
|
|
@returns the number of deleted edges
|
|
|
|
ida_graph.interactive_graph_t.delete_group(self, group: int) -> bool
|
|
Delete a group node.
|
|
This deletes the group node only; it does not delete nodes that are part of the group.
|
|
|
|
@param group: the group node
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.empty(self) -> bool
|
|
Is the graph (visually) empty?
|
|
|
|
@returns true if there are no visible nodes
|
|
|
|
ida_graph.interactive_graph_t.exists(self, node: int) -> bool
|
|
Is the node visible?
|
|
|
|
@param node: the node number
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.get_custom_layout(self) -> bool
|
|
|
|
ida_graph.interactive_graph_t.get_first_subgraph_node(self, group: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.get_graph_groups(self) -> bool
|
|
|
|
ida_graph.interactive_graph_t.get_next_subgraph_node(self, group: int, current: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.get_node_group(self, node: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.get_node_representative(self, node: int) -> int
|
|
Get the node that currently visually represents 'node'. This will find the "closest" parent group node that's visible, by attempting to walk up the group nodes that contain 'node', and will stop when it finds a node that is currently visible.
|
|
See also get_group_node()
|
|
|
|
@param node: the node
|
|
@returns the node that represents 'node', or 'node' if it's not part of any group
|
|
|
|
ida_graph.interactive_graph_t.gid
|
|
graph id - unique for the database for flowcharts it is equal to the function start_ea
|
|
|
|
|
|
ida_graph.interactive_graph_t.is_collapsed_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_deleted_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_displayable_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_dot_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_group_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_simple_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_subgraph_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_uncollapsed_node(self, node: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_user_graph(self) -> bool
|
|
|
|
ida_graph.interactive_graph_t.is_visible_node(self, node: int) -> bool
|
|
Is the node currently visible?
|
|
An invisible node is a node that's part of a group that's currently collapsed.
|
|
|
|
@param node: the node
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.node_flags
|
|
node flags
|
|
|
|
ida_graph.interactive_graph_t.node_qty(self) -> int
|
|
Get the number of visible nodes (the list can be retrieved using gdl.hpp's node_iterator)
|
|
See also size()
|
|
|
|
@returns the number of visible nodes
|
|
|
|
ida_graph.interactive_graph_t.npred(self, b: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.nsucc(self, b: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.pred(self, b: int, i: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.predset(self, b: int) -> "intvec_t const &"
|
|
|
|
ida_graph.interactive_graph_t.redo_layout(self) -> bool
|
|
Recompute the layout, according to the value of 'current_layout'.
|
|
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.refresh(self) -> bool
|
|
Refresh the graph
|
|
A graph needs refreshing when it's "backing data". E.g., if the number (or contents) of the objects in the above example, change.
|
|
Let's say the user's plugin ends up finding a 5th piece of scattered data. It should then add it to its internal list of known objects, and tell IDA that the graph needs to be refreshed, using refresh_viewer(). This will cause IDA to:
|
|
* discard all its internal rendering information,
|
|
* call interactive_graph_t::refresh() on the graph so that the user's plugin has a chance to "sync" the number of nodes & edges that this graph contains, to the information that the plugin has collected so far
|
|
* re-create internal rendering information, and
|
|
* repaint the view
|
|
|
|
|
|
|
|
@returns success
|
|
|
|
ida_graph.interactive_graph_t.replace_edge(self, i: int, j: int, x: int, y: int) -> bool
|
|
|
|
ida_graph.interactive_graph_t.reset(self) -> None
|
|
|
|
ida_graph.interactive_graph_t.resize(self, n: int) -> None
|
|
Resize the graph to 'n' nodes
|
|
|
|
@param n: the new size
|
|
|
|
ida_graph.interactive_graph_t.set_custom_layout(self) -> None
|
|
|
|
ida_graph.interactive_graph_t.set_deleted_node(self, node: int) -> None
|
|
|
|
ida_graph.interactive_graph_t.set_edge(self, e: "edge_t", ei: "edge_info_t") -> bool
|
|
|
|
ida_graph.interactive_graph_t.set_graph_groups(self) -> None
|
|
|
|
ida_graph.interactive_graph_t.set_node_group(self, node: int, group: int) -> None
|
|
|
|
ida_graph.interactive_graph_t.set_nrect(self, n: int, r: "rect_t") -> bool
|
|
|
|
ida_graph.interactive_graph_t.size(self) -> int
|
|
Get the total number of nodes (including group nodes, and including hidden nodes.)
|
|
See also node_qty()
|
|
|
|
@returns the total number of nodes in the graph
|
|
|
|
ida_graph.interactive_graph_t.succ(self, b: int, i: int) -> int
|
|
|
|
ida_graph.interactive_graph_t.succset(self, b: int) -> "intvec_t const &"
|
|
|
|
ida_graph.interval_t
|
|
|
|
ida_graph.interval_t.__eq__(self, r: "interval_t") -> bool
|
|
|
|
ida_graph.interval_t.__init__(self, *args)
|
|
|
|
ida_graph.interval_t.__ne__(self, r: "interval_t") -> bool
|
|
|
|
ida_graph.interval_t.contains(self, x: int) -> bool
|
|
|
|
ida_graph.interval_t.empty(self) -> bool
|
|
|
|
ida_graph.interval_t.intersect(self, r: "interval_t") -> None
|
|
|
|
ida_graph.interval_t.length(self) -> int
|
|
|
|
ida_graph.interval_t.make_union(self, r: "interval_t") -> None
|
|
|
|
ida_graph.interval_t.move_by(self, shift: int) -> None
|
|
|
|
ida_graph.node_info_t
|
|
|
|
ida_graph.node_info_t.__init__(self)
|
|
|
|
ida_graph.node_info_t.bg_color
|
|
background color
|
|
|
|
ida_graph.node_info_t.ea
|
|
address
|
|
|
|
ida_graph.node_info_t.flags
|
|
flags
|
|
|
|
ida_graph.node_info_t.frame_color
|
|
color of enclosing frame
|
|
|
|
ida_graph.node_info_t.get_flags_for_valid(self) -> int
|
|
Get combination of Node info flags describing which attributes are valid.
|
|
|
|
ida_graph.node_info_t.text
|
|
node contents
|
|
|
|
ida_graph.node_info_t.valid_bg_color(self) -> bool
|
|
Has valid bg_color?
|
|
|
|
ida_graph.node_info_t.valid_ea(self) -> bool
|
|
Has valid ea?
|
|
|
|
ida_graph.node_info_t.valid_flags(self) -> bool
|
|
Has valid flags?
|
|
|
|
ida_graph.node_info_t.valid_frame_color(self) -> bool
|
|
Has valid frame_color?
|
|
|
|
ida_graph.node_info_t.valid_text(self) -> bool
|
|
Has non-empty text?
|
|
|
|
ida_graph.node_layout_t
|
|
|
|
ida_graph.node_layout_t.__eq__(self, r: "node_layout_t") -> bool
|
|
|
|
ida_graph.node_layout_t.__getitem__(self, i: "size_t") -> "rect_t const &"
|
|
|
|
ida_graph.node_layout_t.__init__(self, *args)
|
|
|
|
ida_graph.node_layout_t.__len__(self) -> "size_t"
|
|
|
|
ida_graph.node_layout_t.__ne__(self, r: "node_layout_t") -> bool
|
|
|
|
ida_graph.node_layout_t.__setitem__(self, i: "size_t", v: "rect_t") -> None
|
|
|
|
ida_graph.node_layout_t._del(self, x: "rect_t") -> bool
|
|
|
|
ida_graph.node_layout_t.add_unique(self, x: "rect_t") -> bool
|
|
|
|
ida_graph.node_layout_t.append(self, x: "rect_t") -> None
|
|
|
|
ida_graph.node_layout_t.at(self, _idx: "size_t") -> "rect_t const &"
|
|
|
|
ida_graph.node_layout_t.begin(self, *args) -> "qvector< rect_t >::const_iterator"
|
|
|
|
ida_graph.node_layout_t.capacity(self) -> "size_t"
|
|
|
|
ida_graph.node_layout_t.clear(self) -> None
|
|
|
|
ida_graph.node_layout_t.empty(self) -> bool
|
|
|
|
ida_graph.node_layout_t.end(self, *args) -> "qvector< rect_t >::const_iterator"
|
|
|
|
ida_graph.node_layout_t.erase(self, *args) -> "qvector< rect_t >::iterator"
|
|
|
|
ida_graph.node_layout_t.extend(self, x: "node_layout_t") -> None
|
|
|
|
ida_graph.node_layout_t.extract(self) -> "rect_t *"
|
|
|
|
ida_graph.node_layout_t.find(self, *args) -> "qvector< rect_t >::const_iterator"
|
|
|
|
ida_graph.node_layout_t.grow(self, *args) -> None
|
|
|
|
ida_graph.node_layout_t.has(self, x: "rect_t") -> bool
|
|
|
|
ida_graph.node_layout_t.inject(self, s: "rect_t", len: "size_t") -> None
|
|
|
|
ida_graph.node_layout_t.insert(self, it: "rect_t", x: "rect_t") -> "qvector< rect_t >::iterator"
|
|
|
|
ida_graph.node_layout_t.pop_back(self) -> None
|
|
|
|
ida_graph.node_layout_t.push_back(self, *args) -> "rect_t &"
|
|
|
|
ida_graph.node_layout_t.qclear(self) -> None
|
|
|
|
ida_graph.node_layout_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_graph.node_layout_t.resize(self, *args) -> None
|
|
|
|
ida_graph.node_layout_t.size(self) -> "size_t"
|
|
|
|
ida_graph.node_layout_t.swap(self, r: "node_layout_t") -> None
|
|
|
|
ida_graph.node_layout_t.truncate(self) -> None
|
|
|
|
ida_graph.point_t
|
|
|
|
ida_graph.point_t.__eq__(self, r: "point_t") -> bool
|
|
|
|
ida_graph.point_t.__init__(self, *args)
|
|
|
|
ida_graph.point_t.__ne__(self, r: "point_t") -> bool
|
|
|
|
ida_graph.point_t.add(self, r: "point_t") -> "point_t &"
|
|
|
|
ida_graph.point_t.negate(self) -> None
|
|
|
|
ida_graph.point_t.sub(self, r: "point_t") -> "point_t &"
|
|
|
|
ida_graph.pointseq_t
|
|
|
|
ida_graph.pointseq_t.__init__(self)
|
|
|
|
ida_graph.pointvec_t
|
|
|
|
ida_graph.pointvec_t.__eq__(self, r: "pointvec_t") -> bool
|
|
|
|
ida_graph.pointvec_t.__getitem__(self, i: "size_t") -> "point_t const &"
|
|
|
|
ida_graph.pointvec_t.__init__(self, *args)
|
|
|
|
ida_graph.pointvec_t.__len__(self) -> "size_t"
|
|
|
|
ida_graph.pointvec_t.__ne__(self, r: "pointvec_t") -> bool
|
|
|
|
ida_graph.pointvec_t.__setitem__(self, i: "size_t", v: "point_t") -> None
|
|
|
|
ida_graph.pointvec_t._del(self, x: "point_t") -> bool
|
|
|
|
ida_graph.pointvec_t.add_unique(self, x: "point_t") -> bool
|
|
|
|
ida_graph.pointvec_t.append(self, x: "point_t") -> None
|
|
|
|
ida_graph.pointvec_t.at(self, _idx: "size_t") -> "point_t const &"
|
|
|
|
ida_graph.pointvec_t.begin(self, *args) -> "qvector< point_t >::const_iterator"
|
|
|
|
ida_graph.pointvec_t.capacity(self) -> "size_t"
|
|
|
|
ida_graph.pointvec_t.clear(self) -> None
|
|
|
|
ida_graph.pointvec_t.empty(self) -> bool
|
|
|
|
ida_graph.pointvec_t.end(self, *args) -> "qvector< point_t >::const_iterator"
|
|
|
|
ida_graph.pointvec_t.erase(self, *args) -> "qvector< point_t >::iterator"
|
|
|
|
ida_graph.pointvec_t.extend(self, x: "pointvec_t") -> None
|
|
|
|
ida_graph.pointvec_t.extract(self) -> "point_t *"
|
|
|
|
ida_graph.pointvec_t.find(self, *args) -> "qvector< point_t >::const_iterator"
|
|
|
|
ida_graph.pointvec_t.grow(self, *args) -> None
|
|
|
|
ida_graph.pointvec_t.has(self, x: "point_t") -> bool
|
|
|
|
ida_graph.pointvec_t.inject(self, s: "point_t", len: "size_t") -> None
|
|
|
|
ida_graph.pointvec_t.insert(self, it: "point_t", x: "point_t") -> "qvector< point_t >::iterator"
|
|
|
|
ida_graph.pointvec_t.pop_back(self) -> None
|
|
|
|
ida_graph.pointvec_t.push_back(self, *args) -> "point_t &"
|
|
|
|
ida_graph.pointvec_t.qclear(self) -> None
|
|
|
|
ida_graph.pointvec_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_graph.pointvec_t.resize(self, *args) -> None
|
|
|
|
ida_graph.pointvec_t.size(self) -> "size_t"
|
|
|
|
ida_graph.pointvec_t.swap(self, r: "pointvec_t") -> None
|
|
|
|
ida_graph.pointvec_t.truncate(self) -> None
|
|
|
|
ida_graph.pyg_close(_self: "PyObject *") -> None
|
|
|
|
ida_graph.pyg_select_node(_self: "PyObject *", nid: int) -> None
|
|
|
|
ida_graph.pyg_show(_self: "PyObject *") -> bool
|
|
|
|
ida_graph.rect_t
|
|
|
|
ida_graph.rect_t.__eq__(self, r: "rect_t") -> bool
|
|
|
|
ida_graph.rect_t.__init__(self, *args)
|
|
|
|
ida_graph.rect_t.__ne__(self, r: "rect_t") -> bool
|
|
|
|
ida_graph.rect_t.area(self) -> int
|
|
|
|
ida_graph.rect_t.bottomright(self) -> "point_t"
|
|
|
|
ida_graph.rect_t.center(self) -> "point_t"
|
|
|
|
ida_graph.rect_t.contains(self, p: "point_t") -> bool
|
|
|
|
ida_graph.rect_t.empty(self) -> bool
|
|
|
|
ida_graph.rect_t.grow(self, delta: int) -> None
|
|
|
|
ida_graph.rect_t.height(self) -> int
|
|
|
|
ida_graph.rect_t.intersect(self, r: "rect_t") -> None
|
|
|
|
ida_graph.rect_t.is_intersection_empty(self, r: "rect_t") -> bool
|
|
|
|
ida_graph.rect_t.make_union(self, r: "rect_t") -> None
|
|
|
|
ida_graph.rect_t.move_by(self, p: "point_t") -> None
|
|
|
|
ida_graph.rect_t.move_to(self, p: "point_t") -> None
|
|
|
|
ida_graph.rect_t.topleft(self) -> "point_t"
|
|
|
|
ida_graph.rect_t.verify(self) -> None
|
|
|
|
ida_graph.rect_t.width(self) -> int
|
|
|
|
ida_graph.refresh_viewer(gv: "graph_viewer_t *") -> None
|
|
Redraw the graph in the given view.
|
|
|
|
ida_graph.row_info_t
|
|
|
|
ida_graph.row_info_t.__init__(self)
|
|
|
|
ida_graph.row_info_t.bottom
|
|
bottom y coord of the row
|
|
|
|
ida_graph.row_info_t.height(self) -> int
|
|
|
|
ida_graph.row_info_t.nodes
|
|
list of nodes at the row
|
|
|
|
ida_graph.row_info_t.top
|
|
top y coord of the row
|
|
|
|
ida_graph.screen_graph_selection_base_t
|
|
|
|
ida_graph.screen_graph_selection_base_t.__eq__(self, r: "screen_graph_selection_base_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.__getitem__(self, i: "size_t") -> "selection_item_t const &"
|
|
|
|
ida_graph.screen_graph_selection_base_t.__init__(self, *args)
|
|
|
|
ida_graph.screen_graph_selection_base_t.__len__(self) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_base_t.__ne__(self, r: "screen_graph_selection_base_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.__setitem__(self, i: "size_t", v: "selection_item_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t._del(self, x: "selection_item_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.add_unique(self, x: "selection_item_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.append(self, x: "selection_item_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.at(self, _idx: "size_t") -> "selection_item_t const &"
|
|
|
|
ida_graph.screen_graph_selection_base_t.begin(self, *args) -> "qvector< selection_item_t >::const_iterator"
|
|
|
|
ida_graph.screen_graph_selection_base_t.capacity(self) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_base_t.clear(self) -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.empty(self) -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.end(self, *args) -> "qvector< selection_item_t >::const_iterator"
|
|
|
|
ida_graph.screen_graph_selection_base_t.erase(self, *args) -> "qvector< selection_item_t >::iterator"
|
|
|
|
ida_graph.screen_graph_selection_base_t.extend(self, x: "screen_graph_selection_base_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.extract(self) -> "selection_item_t *"
|
|
|
|
ida_graph.screen_graph_selection_base_t.find(self, *args) -> "qvector< selection_item_t >::const_iterator"
|
|
|
|
ida_graph.screen_graph_selection_base_t.grow(self, *args) -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.has(self, x: "selection_item_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_base_t.inject(self, s: "selection_item_t", len: "size_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.insert(self, it: "selection_item_t", x: "selection_item_t") -> "qvector< selection_item_t >::iterator"
|
|
|
|
ida_graph.screen_graph_selection_base_t.pop_back(self) -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.push_back(self, *args) -> "selection_item_t &"
|
|
|
|
ida_graph.screen_graph_selection_base_t.qclear(self) -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.reserve(self, cnt: "size_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.resize(self, *args) -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.size(self) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_base_t.swap(self, r: "screen_graph_selection_base_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_base_t.truncate(self) -> None
|
|
|
|
ida_graph.screen_graph_selection_t
|
|
|
|
ida_graph.screen_graph_selection_t.__init__(self)
|
|
|
|
ida_graph.screen_graph_selection_t.add(self, s: "screen_graph_selection_t") -> None
|
|
|
|
ida_graph.screen_graph_selection_t.add_node(self, node: int) -> None
|
|
|
|
ida_graph.screen_graph_selection_t.add_point(self, e: "edge_t", idx: int) -> None
|
|
|
|
ida_graph.screen_graph_selection_t.del_node(self, node: int) -> None
|
|
|
|
ida_graph.screen_graph_selection_t.del_point(self, e: "edge_t", idx: int) -> None
|
|
|
|
ida_graph.screen_graph_selection_t.has(self, item: "selection_item_t") -> bool
|
|
|
|
ida_graph.screen_graph_selection_t.items_count(self, look_for_nodes: bool) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_t.nodes_count(self) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_t.points_count(self) -> "size_t"
|
|
|
|
ida_graph.screen_graph_selection_t.sub(self, s: "screen_graph_selection_t") -> None
|
|
|
|
ida_graph.selection_item_t
|
|
|
|
ida_graph.selection_item_t.__eq__(self, r: "selection_item_t") -> bool
|
|
|
|
ida_graph.selection_item_t.__init__(self, *args)
|
|
|
|
ida_graph.selection_item_t.__lt__(self, r: "selection_item_t") -> bool
|
|
|
|
ida_graph.selection_item_t.__ne__(self, r: "selection_item_t") -> bool
|
|
|
|
ida_graph.selection_item_t.compare(self, r: "selection_item_t") -> int
|
|
|
|
ida_graph.selection_item_t.elp
|
|
edge layout point (is_node = false)
|
|
|
|
ida_graph.selection_item_t.is_node
|
|
represents a selected node?
|
|
|
|
ida_graph.selection_item_t.node
|
|
node number (is_node = true)
|
|
|
|
ida_graph.set_node_info(gid: "graph_id_t", node: int, ni: "node_info_t", flags: int) -> None
|
|
Set node info.
|
|
|
|
@param gid: id of desired graph
|
|
@param node: node number
|
|
@param ni: node info to use
|
|
@param flags: combination of Node info flags, identifying which fields of 'ni' will be used
|
|
|
|
ida_graph.set_viewer_graph(gv: "graph_viewer_t *", g: "interactive_graph_t") -> None
|
|
Set the underlying graph object for the given viewer.
|
|
|
|
ida_graph.user_graph_place_t
|
|
|
|
ida_graph.user_graph_place_t.__init__(self, *args, **kwargs)
|
|
|
|
ida_graph.viewer_attach_menu_item(g: "graph_viewer_t *", name: str) -> bool
|
|
Attach a previously-registered action to the view's context menu. See kernwin.hpp for how to register actions.
|
|
|
|
@param g: graph viewer
|
|
@param name: action name
|
|
@returns success
|
|
|
|
ida_graph.viewer_center_on(gv: "graph_viewer_t *", node: int) -> None
|
|
Center the graph view on the given node.
|
|
|
|
ida_graph.viewer_create_groups(gv: "graph_viewer_t *", out_group_nodes: "intvec_t *", gi: "groups_crinfos_t const &") -> bool
|
|
This will perform an operation similar to what happens when a user manually selects a set of nodes, right-clicks and selects "Create group". This is a wrapper around interactive_graph_t::create_group that will, in essence:
|
|
* clone the current graph
|
|
* for each group_crinfo_t, attempt creating group in that new graph
|
|
* if all were successful, animate to that new graph.
|
|
|
|
ida_graph.viewer_del_node_info(gv: "graph_viewer_t *", n: int) -> None
|
|
Delete node info for node in given viewer (see del_node_info())
|
|
|
|
ida_graph.viewer_delete_groups(gv: "graph_viewer_t *", groups: "intvec_t const &", new_current: int = -1) -> bool
|
|
Wrapper around interactive_graph_t::delete_group. This function will:
|
|
* clone the current graph
|
|
* attempt deleting the groups in that new graph
|
|
* if successful, animate to that new graph.
|
|
|
|
|
|
|
|
|
|
ida_graph.viewer_fit_window(gv: "graph_viewer_t *") -> None
|
|
Fit graph viewer to its parent form.
|
|
|
|
ida_graph.viewer_get_curnode(gv: "graph_viewer_t *") -> int
|
|
Get number of currently selected node (-1 if none)
|
|
|
|
ida_graph.viewer_get_gli(out: "graph_location_info_t *", gv: "graph_viewer_t *", flags: int = 0) -> bool
|
|
Get location info for given graph view If flags contains GLICTL_CENTER, then the gli that will be retrieved, will be the one at the center of the view. Otherwise it will be the top-left.
|
|
|
|
|
|
ida_graph.viewer_get_node_info(gv: "graph_viewer_t *", out: "node_info_t", n: int) -> bool
|
|
Get node info for node in given viewer (see get_node_info())
|
|
|
|
ida_graph.viewer_get_selection(gv: "graph_viewer_t *", sgs: "screen_graph_selection_t") -> bool
|
|
Get currently selected items for graph viewer.
|
|
|
|
ida_graph.viewer_set_gli(gv: "graph_viewer_t *", gli: "graph_location_info_t const *", flags: int = 0) -> None
|
|
Set location info for given graph view If flags contains GLICTL_CENTER, then the gli will be set to be the center of the view. Otherwise it will be the top-left.
|
|
|
|
|
|
ida_graph.viewer_set_groups_visibility(gv: "graph_viewer_t *", groups: "intvec_t const &", expand: bool, new_current: int = -1) -> bool
|
|
Wrapper around interactive_graph_t::change_visibility. This function will:
|
|
* clone the current graph
|
|
* attempt changing visibility of the groups in that new graph
|
|
* if successful, animate to that new graph.
|
|
|
|
|
|
|
|
|
|
ida_graph.viewer_set_node_info(gv: "graph_viewer_t *", n: int, ni: "node_info_t", flags: int) -> None
|
|
Set node info for node in given viewer (see set_node_info())
|
|
|
|
ida_graph.viewer_set_titlebar_height(gv: "graph_viewer_t *", height: int) -> int
|
|
Set height of node title bars (grcode_set_titlebar_height)
|
|
|
|
ida_ida
|
|
Contains the ::inf structure definition and some functions common to the whole IDA project.
|
|
|
|
The ::inf structure is saved in the database and contains information specific to the current program being disassembled. Initially it is filled with values from ida.cfg.
|
|
Although it is not a good idea to change values in ::inf structure (because you will overwrite values taken from ida.cfg), you are allowed to do it if you feel it necessary.
|
|
|
|
|
|
ida_ida.ABI_8ALIGN4
|
|
4 byte alignment for 8byte scalars (__int64/double) inside structures?
|
|
|
|
ida_ida.ABI_BIGARG_ALIGN
|
|
use natural type alignment for argument if the alignment exceeds native word size. (e.g. __int64 argument should be 8byte aligned on some 32bit platforms)
|
|
|
|
|
|
ida_ida.ABI_GCC_LAYOUT
|
|
use gcc layout for udts (used for mingw)
|
|
|
|
ida_ida.ABI_HARD_FLOAT
|
|
use the floating-point register set
|
|
|
|
ida_ida.ABI_HUGEARG_ALIGN
|
|
use natural type alignment for an argument even if its alignment exceeds double native word size (the default is to use double word max). e.g. if this bit is set, __int128 has 16-byte alignment. this bit is not used by ida yet
|
|
|
|
|
|
ida_ida.ABI_MAP_STKARGS
|
|
register arguments are mapped to stack area (and consume stack slots)
|
|
|
|
ida_ida.ABI_PACK_STKARGS
|
|
do not align stack arguments to stack slots
|
|
|
|
ida_ida.ABI_SET_BY_USER
|
|
compiler/abi were set by user flag and require SETCOMP_BY_USER flag to be changed
|
|
|
|
ida_ida.ABI_STACK_LDBL
|
|
long double arguments are passed on stack
|
|
|
|
ida_ida.ABI_STACK_VARARGS
|
|
varargs are always passed on stack (even when there are free registers)
|
|
|
|
ida_ida.AF2_DOEH
|
|
Handle EH information.
|
|
|
|
ida_ida.AF2_DORTTI
|
|
Handle RTTI information.
|
|
|
|
ida_ida.AF2_MACRO
|
|
Try to combine several instructions into a macro instruction
|
|
|
|
|
|
ida_ida.AF2_MERGESTR
|
|
Merge string literals created using data xrefs
|
|
|
|
|
|
ida_ida.AF_ANORET
|
|
Perform 'no-return' analysis.
|
|
|
|
ida_ida.AF_CHKUNI
|
|
Check for unicode strings.
|
|
|
|
ida_ida.AF_CODE
|
|
Trace execution flow.
|
|
|
|
ida_ida.AF_DATOFF
|
|
Automatically convert data to offsets.
|
|
|
|
ida_ida.AF_DOCODE
|
|
Coagulate code segs at the final pass.
|
|
|
|
ida_ida.AF_DODATA
|
|
Coagulate data segs at the final pass.
|
|
|
|
ida_ida.AF_DREFOFF
|
|
Create offset if data xref to seg32 exists.
|
|
|
|
ida_ida.AF_FINAL
|
|
Final pass of analysis.
|
|
|
|
ida_ida.AF_FIXUP
|
|
Create offsets and segments using fixup info.
|
|
|
|
ida_ida.AF_FLIRT
|
|
Use flirt signatures.
|
|
|
|
ida_ida.AF_FTAIL
|
|
Create function tails.
|
|
|
|
ida_ida.AF_HFLIRT
|
|
Automatically hide library functions.
|
|
|
|
ida_ida.AF_IMMOFF
|
|
Convert 32bit instruction operand to offset.
|
|
|
|
ida_ida.AF_JFUNC
|
|
Rename jump functions as j_...
|
|
|
|
ida_ida.AF_JUMPTBL
|
|
Locate and create jump tables.
|
|
|
|
ida_ida.AF_LVAR
|
|
Create stack variables.
|
|
|
|
ida_ida.AF_MARKCODE
|
|
Mark typical code sequences as code.
|
|
|
|
ida_ida.AF_MEMFUNC
|
|
Try to guess member function types.
|
|
|
|
ida_ida.AF_NULLSUB
|
|
Rename empty functions as nullsub_...
|
|
|
|
ida_ida.AF_PROC
|
|
Create functions if call is present.
|
|
|
|
ida_ida.AF_PROCPTR
|
|
Create function if data xref data->code32 exists.
|
|
|
|
ida_ida.AF_PURDAT
|
|
Control flow to data segment is ignored.
|
|
|
|
ida_ida.AF_REGARG
|
|
Propagate register argument information.
|
|
|
|
ida_ida.AF_SIGCMT
|
|
Append a signature name comment for recognized anonymous library functions.
|
|
|
|
ida_ida.AF_SIGMLT
|
|
Allow recognition of several copies of the same function.
|
|
|
|
ida_ida.AF_STKARG
|
|
Propagate stack argument information.
|
|
|
|
ida_ida.AF_STRLIT
|
|
Create string literal if data xref exists.
|
|
|
|
ida_ida.AF_TRACE
|
|
Trace stack pointer.
|
|
|
|
ida_ida.AF_TRFUNC
|
|
Truncate functions upon code deletion.
|
|
|
|
ida_ida.AF_UNK
|
|
Delete instructions with no xrefs.
|
|
|
|
ida_ida.AF_USED
|
|
Analyze and create all xrefs.
|
|
|
|
ida_ida.AF_VERSP
|
|
Perform full SP-analysis. ( processor_t::verify_sp)
|
|
|
|
ida_ida.DEMNAM_CMNT
|
|
display demangled names as comments
|
|
|
|
ida_ida.DEMNAM_FIRST
|
|
override type info
|
|
|
|
ida_ida.DEMNAM_GCC3
|
|
assume gcc3 names (valid for gnu compiler)
|
|
|
|
ida_ida.DEMNAM_MASK
|
|
mask for name form
|
|
|
|
ida_ida.DEMNAM_NAME
|
|
display demangled names as regular names
|
|
|
|
ida_ida.DEMNAM_NONE
|
|
don't display demangled names
|
|
|
|
ida_ida.IDAINFO_TAG_SIZE
|
|
The database parameters. This structure is kept in the ida database. It contains the essential parameters for the current program
|
|
|
|
|
|
ida_ida.IDB_COMPRESSED
|
|
compress & pack database components
|
|
|
|
ida_ida.IDB_PACKED
|
|
pack database components into .idb
|
|
|
|
ida_ida.IDB_UNPACKED
|
|
leave database components unpacked
|
|
|
|
ida_ida.IDI_ALTVAL
|
|
netnode: altval
|
|
|
|
ida_ida.IDI_BITMAP
|
|
bitmap field: interpret bitmask as bit number
|
|
|
|
ida_ida.IDI_BLOB
|
|
netnode: blob
|
|
|
|
ida_ida.IDI_BYTEARRAY
|
|
byte array: binary representation
|
|
|
|
ida_ida.IDI_CSTR
|
|
string
|
|
|
|
ida_ida.IDI_DEC
|
|
show as decimal
|
|
|
|
ida_ida.IDI_EA_HEX
|
|
default representation: hex or "BADADDR"
|
|
|
|
ida_ida.IDI_HASH
|
|
hashed node field, hash name in offset
|
|
|
|
ida_ida.IDI_HEX
|
|
show as hexadecimal
|
|
|
|
ida_ida.IDI_HLPSTRUC
|
|
call helper for pointer to structure
|
|
|
|
ida_ida.IDI_INC
|
|
stored value is incremented (scalars only)
|
|
|
|
ida_ida.IDI_MAP_VAL
|
|
apply ea2node() to value
|
|
|
|
ida_ida.IDI_NOMERGE
|
|
field should not be merged as part of INF
|
|
|
|
ida_ida.IDI_ONOFF
|
|
show boolean as on/off (not true/false)
|
|
|
|
ida_ida.IDI_QSTRING
|
|
qstring
|
|
|
|
ida_ida.IDI_READONLY
|
|
read-only field (cannot be modified)
|
|
|
|
ida_ida.IDI_SCALAR
|
|
scalar value (default)
|
|
|
|
ida_ida.IDI_STRUCFLD
|
|
structure field (opposite to IDI_NODEVAL)
|
|
|
|
ida_ida.IDI_SUPVAL
|
|
netnode: supval
|
|
|
|
ida_ida.IDI_VALOBJ
|
|
netnode: valobj
|
|
|
|
ida_ida.INFFL_ALLASM
|
|
may use constructs not supported by the target assembler
|
|
|
|
|
|
ida_ida.INFFL_AUTO
|
|
Autoanalysis is enabled?
|
|
|
|
ida_ida.INFFL_CHKOPS
|
|
check manual operands? (unused)
|
|
|
|
ida_ida.INFFL_GRAPH_VIEW
|
|
currently using graph options ( text_options_t::graph)
|
|
|
|
ida_ida.INFFL_LOADIDC
|
|
loading an idc file that contains database info
|
|
|
|
ida_ida.INFFL_NMOPS
|
|
allow non-matched operands? (unused)
|
|
|
|
ida_ida.INFFL_NOUSER
|
|
do not store user info in the database
|
|
|
|
ida_ida.INFFL_READONLY
|
|
(internal) temporary interdiction to modify the database
|
|
|
|
ida_ida.INF_ABINAME
|
|
ABI name (processor specific)
|
|
|
|
ida_ida.INF_ARCHIVE_PATH
|
|
archive file path
|
|
|
|
ida_ida.INF_CRC32
|
|
input file crc32
|
|
|
|
ida_ida.INF_CTIME
|
|
database creation timestamp
|
|
|
|
ida_ida.INF_C_MACROS
|
|
C predefined macros.
|
|
|
|
ida_ida.INF_DBG_BINPATHS
|
|
unused (20 indexes)
|
|
|
|
ida_ida.INF_DUALOP_GRAPH
|
|
Graph text representation options.
|
|
|
|
ida_ida.INF_DUALOP_TEXT
|
|
Text text representation options.
|
|
|
|
ida_ida.INF_ELAPSED
|
|
seconds database stayed open
|
|
|
|
ida_ida.INF_FILE_FORMAT_NAME
|
|
file format name for loader modules
|
|
|
|
ida_ida.INF_FSIZE
|
|
input file size
|
|
|
|
ida_ida.INF_GROUPS
|
|
segment group information (see init_groups())
|
|
|
|
ida_ida.INF_H_PATH
|
|
C header path.
|
|
|
|
ida_ida.INF_IDA_VERSION
|
|
version of ida which created the database
|
|
|
|
ida_ida.INF_IDSNODE
|
|
ids modnode id (for import_module)
|
|
|
|
ida_ida.INF_IMAGEBASE
|
|
image base
|
|
|
|
ida_ida.INF_INCLUDE
|
|
assembler include file name
|
|
|
|
ida_ida.INF_INITIAL_VERSION
|
|
initial version of database
|
|
|
|
ida_ida.INF_MD5
|
|
MD5 of the input file.
|
|
|
|
ida_ida.INF_NOPENS
|
|
how many times the database is opened
|
|
|
|
ida_ida.INF_NOTEPAD
|
|
notepad blob, occupies 1000 indexes (1MB of text)
|
|
|
|
ida_ida.INF_OUTFILEENC
|
|
output file encoding index
|
|
|
|
ida_ida.INF_PROBLEMS
|
|
problem lists
|
|
|
|
ida_ida.INF_SELECTORS
|
|
2..63 are for selector_t blob (see init_selectors())
|
|
|
|
ida_ida.INF_SHA256
|
|
SHA256 of the input file.
|
|
|
|
ida_ida.INF_SRCDBG_PATHS
|
|
source debug paths, occupies 20 indexes
|
|
|
|
ida_ida.INF_SRCDBG_UNDESIRED
|
|
user-closed source files, occupies 20 indexes
|
|
|
|
ida_ida.INF_STR_ENCODINGS
|
|
a list of encodings for the program strings
|
|
|
|
ida_ida.LFLG_64BIT
|
|
64-bit program?
|
|
|
|
ida_ida.LFLG_COMPRESS
|
|
compress the database?
|
|
|
|
ida_ida.LFLG_DBG_NOPATH
|
|
do not store input full path in debugger process options
|
|
|
|
ida_ida.LFLG_FLAT_OFF32
|
|
treat REF_OFF32 as 32-bit offset for 16bit segments (otherwise try SEG16:OFF16)
|
|
|
|
ida_ida.LFLG_ILP32
|
|
64-bit instructions with 64-bit registers, but 32-bit pointers and address space. this bit is mutually exclusive with LFLG_64BIT
|
|
|
|
|
|
ida_ida.LFLG_IS_DLL
|
|
Is dynamic library?
|
|
|
|
ida_ida.LFLG_KERNMODE
|
|
is kernel mode binary?
|
|
|
|
ida_ida.LFLG_MSF
|
|
Byte order: is MSB first?
|
|
|
|
ida_ida.LFLG_PACK
|
|
pack the database?
|
|
|
|
ida_ida.LFLG_PC_FLAT
|
|
32-bit program (or higher)?
|
|
|
|
ida_ida.LFLG_PC_FPP
|
|
decode floating point processor instructions?
|
|
|
|
ida_ida.LFLG_SNAPSHOT
|
|
memory snapshot was taken?
|
|
|
|
ida_ida.LFLG_WIDE_HBF
|
|
Bit order of wide bytes: high byte first? (wide bytes: processor_t::dnbits > 8)
|
|
|
|
|
|
ida_ida.LMT_EMPTY
|
|
empty lines at the end of basic blocks
|
|
|
|
ida_ida.LMT_THICK
|
|
thick borders
|
|
|
|
ida_ida.LMT_THIN
|
|
thin borders
|
|
|
|
ida_ida.LN_AUTO
|
|
include autogenerated names
|
|
|
|
ida_ida.LN_NORMAL
|
|
include normal names
|
|
|
|
ida_ida.LN_PUBLIC
|
|
include public names
|
|
|
|
ida_ida.LN_WEAK
|
|
include weak names
|
|
|
|
ida_ida.OFLG_GEN_ASSUME
|
|
Generate 'assume' directives?
|
|
|
|
ida_ida.OFLG_GEN_NULL
|
|
Generate empty lines?
|
|
|
|
ida_ida.OFLG_GEN_ORG
|
|
Generate 'org' directives?
|
|
|
|
ida_ida.OFLG_GEN_TRYBLKS
|
|
Generate try/catch directives?
|
|
|
|
ida_ida.OFLG_LZERO
|
|
generate leading zeroes in numbers
|
|
|
|
ida_ida.OFLG_PREF_SEG
|
|
line prefixes with segment name?
|
|
|
|
ida_ida.OFLG_SHOW_AUTO
|
|
Display autoanalysis indicator?
|
|
|
|
ida_ida.OFLG_SHOW_PREF
|
|
Show line prefixes?
|
|
|
|
ida_ida.OFLG_SHOW_VOID
|
|
Display void marks?
|
|
|
|
ida_ida.PREF_FNCOFF
|
|
show function offsets?
|
|
|
|
ida_ida.PREF_PFXTRUNC
|
|
truncate instruction bytes if they would need more than 1 line
|
|
|
|
ida_ida.PREF_SEGADR
|
|
show segment addresses?
|
|
|
|
ida_ida.PREF_STACK
|
|
show stack pointer?
|
|
|
|
ida_ida.SCF_ALLCMT
|
|
comment all lines?
|
|
|
|
ida_ida.SCF_LINNUM
|
|
show source line numbers
|
|
|
|
ida_ida.SCF_NOCMT
|
|
no comments at all
|
|
|
|
ida_ida.SCF_RPTCMT
|
|
show repeatable comments?
|
|
|
|
ida_ida.SCF_SHHID_FUNC
|
|
show hidden functions
|
|
|
|
ida_ida.SCF_SHHID_ITEM
|
|
show hidden instructions
|
|
|
|
ida_ida.SCF_SHHID_SEGM
|
|
show hidden segments
|
|
|
|
ida_ida.SCF_TESTMODE
|
|
testida.idc is running
|
|
|
|
ida_ida.STRF_AUTO
|
|
names have 'autogenerated' bit?
|
|
|
|
ida_ida.STRF_COMMENT
|
|
generate auto comment for string references?
|
|
|
|
ida_ida.STRF_GEN
|
|
generate names?
|
|
|
|
ida_ida.STRF_SAVECASE
|
|
preserve case of strings for identifiers
|
|
|
|
ida_ida.STRF_SERIAL
|
|
generate serial names?
|
|
|
|
ida_ida.STRF_UNICODE
|
|
unicode strings are present?
|
|
|
|
ida_ida.STT_CUR
|
|
use current storage type (may be used only as a function argument)
|
|
|
|
ida_ida.STT_DBG
|
|
memory map: temporary debugger storage. used internally
|
|
|
|
ida_ida.STT_MM
|
|
memory map: sparse storage. useful for huge objects
|
|
|
|
ida_ida.STT_VA
|
|
regular storage: virtual arrays, an explicit flag for each byte
|
|
|
|
ida_ida.SW_SEGXRF
|
|
show segments in xrefs?
|
|
|
|
ida_ida.SW_XRFFNC
|
|
show function offsets?
|
|
|
|
ida_ida.SW_XRFMRK
|
|
show xref type marks?
|
|
|
|
ida_ida.SW_XRFVAL
|
|
show xref values? (otherwise-"...")
|
|
|
|
ida_ida.UA_MAXOP
|
|
max number of operands allowed for an instruction
|
|
|
|
ida_ida.VLD_AUTO_REPAIR
|
|
automatically repair the database
|
|
|
|
ida_ida.VLD_DIALOG
|
|
ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR)
|
|
|
|
ida_ida.VLD_SILENT
|
|
no messages to the output window
|
|
|
|
ida_ida.__make_idainfo_accessors(attr, getter_name = None, setter_name = None)
|
|
|
|
ida_ida.__make_idainfo_bound(func, attr)
|
|
|
|
ida_ida.__make_idainfo_bound.__func(self, *args)
|
|
|
|
ida_ida.__make_idainfo_getter(name)
|
|
|
|
ida_ida.__set_module_dynattrs(modname, pdict)
|
|
|
|
ida_ida.__wrap_hooks_callback(klass, new_name, old_name, do_call)
|
|
|
|
ida_ida.__wrap_hooks_callback.__wrapper(self, *args)
|
|
|
|
ida_ida.calc_default_idaplace_flags() -> int
|
|
Get default disassembly line options.
|
|
|
|
ida_ida.compiler_info_t
|
|
|
|
ida_ida.compiler_info_t.__init__(self)
|
|
|
|
ida_ida.compiler_info_t.cm
|
|
memory model and calling convention (see CM)
|
|
|
|
ida_ida.compiler_info_t.defalign
|
|
default alignment for structures
|
|
|
|
ida_ida.compiler_info_t.id
|
|
compiler id (see Compiler IDs)
|
|
|
|
ida_ida.compiler_info_t.size_b
|
|
sizeof(bool)
|
|
|
|
ida_ida.compiler_info_t.size_e
|
|
sizeof(enum)
|
|
|
|
ida_ida.compiler_info_t.size_i
|
|
sizeof(int)
|
|
|
|
ida_ida.compiler_info_t.size_l
|
|
long
|
|
|
|
ida_ida.compiler_info_t.size_ldbl
|
|
longdouble (if different from processor_t::tbyte_size)
|
|
|
|
ida_ida.compiler_info_t.size_ll
|
|
longlong
|
|
|
|
ida_ida.compiler_info_t.size_s
|
|
short
|
|
|
|
ida_ida.delinf(tag: "inftag_t") -> bool
|
|
Undefine a program specific information
|
|
|
|
@param tag: one of inftag_t constants
|
|
@returns success
|
|
|
|
ida_ida.f_AIXAR
|
|
AIX ar library.
|
|
|
|
ida_ida.f_AOUT
|
|
Linux a.out (AOUT)
|
|
|
|
ida_ida.f_AR
|
|
ar library
|
|
|
|
ida_ida.f_BIN
|
|
Binary File.
|
|
|
|
ida_ida.f_COFF
|
|
Common Object File Format (COFF)
|
|
|
|
ida_ida.f_COM
|
|
MS DOS COM File.
|
|
|
|
ida_ida.f_COM_old
|
|
MS DOS COM File.
|
|
|
|
ida_ida.f_DRV
|
|
MS DOS Driver.
|
|
|
|
ida_ida.f_ELF
|
|
Executable and Linkable Format (ELF)
|
|
|
|
ida_ida.f_EXE
|
|
MS DOS EXE File.
|
|
|
|
ida_ida.f_EXE_old
|
|
MS DOS EXE File.
|
|
|
|
ida_ida.f_HEX
|
|
Intel Hex Object File.
|
|
|
|
ida_ida.f_LE
|
|
Linear Executable (LE)
|
|
|
|
ida_ida.f_LOADER
|
|
file is loaded using LOADER DLL
|
|
|
|
ida_ida.f_LX
|
|
Linear Executable (LX)
|
|
|
|
ida_ida.f_MACHO
|
|
Mac OS X Mach-O.
|
|
|
|
ida_ida.f_MD1IMG
|
|
Mediatek Firmware Image.
|
|
|
|
ida_ida.f_MEX
|
|
MOS Technology Hex Object File.
|
|
|
|
ida_ida.f_NLM
|
|
Netware Loadable Module (NLM)
|
|
|
|
ida_ida.f_OMF
|
|
Object Module Format.
|
|
|
|
ida_ida.f_OMFLIB
|
|
Library of OMF Modules.
|
|
|
|
ida_ida.f_PE
|
|
Portable Executable (PE)
|
|
|
|
ida_ida.f_PRC
|
|
PalmPilot program file.
|
|
|
|
ida_ida.f_PSXOBJ
|
|
Sony Playstation PSX object file.
|
|
|
|
ida_ida.f_SREC
|
|
Motorola SREC (S-record)
|
|
|
|
ida_ida.f_W32RUN
|
|
Watcom DOS32 Extender (W32RUN)
|
|
|
|
ida_ida.f_WIN
|
|
New Executable (NE)
|
|
|
|
ida_ida.f_ZIP
|
|
ZIP file (this file is never loaded to IDA database)
|
|
|
|
ida_ida.get_dbctx_id() -> "ssize_t"
|
|
Get the current database context ID
|
|
|
|
@returns the database context ID, or -1 if no current database
|
|
|
|
ida_ida.get_dbctx_qty() -> "size_t"
|
|
Get number of database contexts
|
|
|
|
@returns number of database contexts
|
|
|
|
ida_ida.getinf_str(tag: "inftag_t") -> str
|
|
Get program specific information (a non-scalar value)
|
|
|
|
@param tag: one of inftag_t constants
|
|
@returns number of bytes stored in the buffer (<0 - not defined)
|
|
|
|
ida_ida.idainfo
|
|
|
|
ida_ida.idainfo.__init__(self, *args, **kwargs)
|
|
|
|
ida_ida.idainfo._get_lflags(self) -> int
|
|
|
|
ida_ida.idainfo._set_lflags(self, _f: int) -> None
|
|
|
|
ida_ida.idainfo.abibits
|
|
ABI features. Depends on info returned by get_abi_name() Processor modules may modify them in set_compiler
|
|
|
|
|
|
ida_ida.idainfo.af
|
|
Analysis flags
|
|
|
|
|
|
ida_ida.idainfo.af2
|
|
Analysis flags 2
|
|
|
|
|
|
ida_ida.idainfo.appcall_options
|
|
appcall options, see idd.hpp
|
|
|
|
ida_ida.idainfo.apptype
|
|
Application type bit definitions in libfuncs.hpp
|
|
|
|
|
|
ida_ida.idainfo.asmtype
|
|
target assembler number
|
|
|
|
ida_ida.idainfo.baseaddr
|
|
remaining 28 bits are reserved
|
|
|
|
base address of the program (paragraphs)
|
|
|
|
|
|
ida_ida.idainfo.bin_prefix_size
|
|
Number of instruction bytes (opcodes) to show in line prefix.
|
|
|
|
ida_ida.idainfo.cc
|
|
COMPILER.
|
|
|
|
Target compiler
|
|
|
|
|
|
ida_ida.idainfo.cmt_indent
|
|
Indentation for comments.
|
|
|
|
ida_ida.idainfo.database_change_count
|
|
incremented after each byte and regular segment modifications
|
|
|
|
|
|
ida_ida.idainfo.datatypes
|
|
data types allowed in data carousel
|
|
|
|
ida_ida.idainfo.demnames
|
|
Demangled name flags
|
|
|
|
|
|
ida_ida.idainfo.filetype
|
|
The input file type.
|
|
|
|
ida_ida.idainfo.get_abiname(self) -> str
|
|
|
|
ida_ida.idainfo.highoff
|
|
High limit for offsets (used in calculation of 'void' operands)
|
|
|
|
|
|
ida_ida.idainfo.indent
|
|
DISASSEMBLY LISTING DETAILS.
|
|
|
|
Indentation for instructions
|
|
|
|
|
|
ida_ida.idainfo.lenxref
|
|
max length of line with xrefs
|
|
|
|
ida_ida.idainfo.lflags
|
|
Misc. database flags
|
|
|
|
|
|
ida_ida.idainfo.listnames
|
|
Name list options
|
|
|
|
|
|
ida_ida.idainfo.long_demnames
|
|
long form of demangled names see demangle.h for definitions
|
|
|
|
|
|
ida_ida.idainfo.lowoff
|
|
Low limit for offsets (used in calculation of 'void' operands)
|
|
|
|
|
|
ida_ida.idainfo.main
|
|
address of main()
|
|
|
|
ida_ida.idainfo.margin
|
|
max length of data lines
|
|
|
|
ida_ida.idainfo.max_autoname_len
|
|
NAMES.
|
|
|
|
max autogenerated name length (without zero byte)
|
|
|
|
|
|
ida_ida.idainfo.max_ea
|
|
maxEA is excluded
|
|
|
|
ida_ida.idainfo.maxref
|
|
Max tail for references.
|
|
|
|
ida_ida.idainfo.min_ea
|
|
current limits of program
|
|
|
|
ida_ida.idainfo.nametype
|
|
Dummy names representation types
|
|
|
|
|
|
ida_ida.idainfo.omax_ea
|
|
original maxEA (is set after loading the input file)
|
|
|
|
ida_ida.idainfo.omin_ea
|
|
original minEA (is set after loading the input file)
|
|
|
|
ida_ida.idainfo.ostype
|
|
OS type the program is for bit definitions in libfuncs.hpp
|
|
|
|
|
|
ida_ida.idainfo.outflags
|
|
output flags
|
|
|
|
|
|
ida_ida.idainfo.procname
|
|
Name of the current processor (with \0)
|
|
|
|
ida_ida.idainfo.refcmtnum
|
|
Number of comment lines to generate for refs to string literals or demangled names 0 - such comments won't be generated at all
|
|
|
|
|
|
ida_ida.idainfo.s_cmtflg
|
|
Comment options
|
|
|
|
|
|
ida_ida.idainfo.s_genflags
|
|
General idainfo flags
|
|
|
|
|
|
ida_ida.idainfo.s_limiter
|
|
Delimiter options
|
|
|
|
|
|
ida_ida.idainfo.s_prefflag
|
|
Line prefix options
|
|
|
|
|
|
ida_ida.idainfo.s_xrefflag
|
|
Xref options
|
|
|
|
|
|
ida_ida.idainfo.short_demnames
|
|
short form of demangled names
|
|
|
|
ida_ida.idainfo.specsegs
|
|
What format do special segments use? 0-unspecified, 4-entries are 4 bytes, 8- entries are 8 bytes.
|
|
|
|
ida_ida.idainfo.start_cs
|
|
selector of the segment with the main entry point
|
|
|
|
ida_ida.idainfo.start_ea
|
|
Linear address of program entry point.
|
|
|
|
ida_ida.idainfo.start_ip
|
|
IP register value at the start of program execution
|
|
|
|
|
|
ida_ida.idainfo.start_sp
|
|
SP register value at the start of program execution
|
|
|
|
|
|
ida_ida.idainfo.start_ss
|
|
selector of the initial stack segment
|
|
|
|
ida_ida.idainfo.strlit_break
|
|
string literal line break symbol
|
|
|
|
ida_ida.idainfo.strlit_flags
|
|
STRING LITERALS.
|
|
|
|
string literal flags
|
|
|
|
|
|
ida_ida.idainfo.strlit_pref
|
|
prefix for string literal names
|
|
|
|
ida_ida.idainfo.strlit_sernum
|
|
serial number
|
|
|
|
ida_ida.idainfo.strlit_zeroes
|
|
leading zeroes
|
|
|
|
ida_ida.idainfo.strtype
|
|
current ascii string type see nalt.hpp for string types
|
|
|
|
|
|
ida_ida.idainfo.tag
|
|
'IDA'
|
|
|
|
ida_ida.idainfo.type_xrefnum
|
|
Number of references to generate in the struct & enum windows 0 - xrefs won't be generated at all
|
|
|
|
|
|
ida_ida.idainfo.version
|
|
Version of database.
|
|
|
|
ida_ida.idainfo.xrefnum
|
|
CROSS REFERENCES.
|
|
|
|
Number of references to generate in the disassembly listing 0 - xrefs won't be generated at all
|
|
|
|
|
|
ida_ida.idainfo_is_32bit()
|
|
|
|
ida_ida.idbattr_info_t
|
|
|
|
ida_ida.idbattr_info_t.__init__(self, name: str, offset: "uintptr_t", width: "size_t", bitmask: "uint64" = 0, tag: "uchar" = 0, idi_flags: "uint" = 0)
|
|
|
|
ida_ida.idbattr_info_t.__lt__(self, r: "idbattr_info_t") -> bool
|
|
|
|
ida_ida.idbattr_info_t.bitmask
|
|
mask for bitfields (0-not bitfield)
|
|
|
|
ida_ida.idbattr_info_t.has_individual_node(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.hashname(self) -> str
|
|
|
|
ida_ida.idbattr_info_t.individual_node
|
|
individual node name (nullptr - use default)
|
|
|
|
ida_ida.idbattr_info_t.is_bitfield(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_bitmap(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_boolean(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_buf_var(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_bytearray(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_cstr(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_decimal(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_hash(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_hexadecimal(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_incremented(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_node_altval(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_node_blob(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_node_supval(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_node_valobj(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_node_var(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_onoff(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_qstring(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_readonly_var(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_scalar_var(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_struc_field(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.is_val_mapped(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.maxsize
|
|
max bytes reserved for storage in netnode
|
|
|
|
ida_ida.idbattr_info_t.name
|
|
human-readable name
|
|
|
|
ida_ida.idbattr_info_t.offset
|
|
field position: offset within a structure (IDI_STRUCFLD) altval or supval index (IDI_NODEVAL) hashval name (IDI_ALTVAL/IDI_SUPVAL+IDI_HASH)
|
|
|
|
|
|
ida_ida.idbattr_info_t.ridx(self) -> "size_t"
|
|
|
|
ida_ida.idbattr_info_t.str_false(self) -> str
|
|
|
|
ida_ida.idbattr_info_t.str_true(self) -> str
|
|
|
|
ida_ida.idbattr_info_t.tag
|
|
tag of node value (if IDI_NODEVAL is set)
|
|
|
|
ida_ida.idbattr_info_t.use_hlpstruc(self) -> bool
|
|
|
|
ida_ida.idbattr_info_t.vmap
|
|
array value=>name (terminated by empty element)
|
|
|
|
ida_ida.idbattr_info_t.width
|
|
field width in bytes
|
|
|
|
ida_ida.idbattr_valmap_t
|
|
|
|
ida_ida.idbattr_valmap_t.__init__(self)
|
|
|
|
ida_ida.inf_abi_set_by_user() -> bool
|
|
|
|
ida_ida.inf_allow_non_matched_ops() -> bool
|
|
|
|
ida_ida.inf_allow_sigmulti() -> bool
|
|
|
|
ida_ida.inf_append_sigcmt() -> bool
|
|
|
|
ida_ida.inf_big_arg_align(*args) -> bool
|
|
|
|
ida_ida.inf_check_manual_ops() -> bool
|
|
|
|
ida_ida.inf_check_unicode_strlits() -> bool
|
|
|
|
ida_ida.inf_coagulate_code() -> bool
|
|
|
|
ida_ida.inf_coagulate_data() -> bool
|
|
|
|
ida_ida.inf_compress_idb() -> bool
|
|
|
|
ida_ida.inf_create_all_xrefs() -> bool
|
|
|
|
ida_ida.inf_create_func_from_call() -> bool
|
|
|
|
ida_ida.inf_create_func_from_ptr() -> bool
|
|
|
|
ida_ida.inf_create_func_tails() -> bool
|
|
|
|
ida_ida.inf_create_jump_tables() -> bool
|
|
|
|
ida_ida.inf_create_off_on_dref() -> bool
|
|
|
|
ida_ida.inf_create_off_using_fixup() -> bool
|
|
|
|
ida_ida.inf_create_strlit_on_xref() -> bool
|
|
|
|
ida_ida.inf_data_offset() -> bool
|
|
|
|
ida_ida.inf_dbg_no_store_path() -> bool
|
|
|
|
ida_ida.inf_decode_fpp() -> bool
|
|
|
|
ida_ida.inf_del_no_xref_insns() -> bool
|
|
|
|
ida_ida.inf_final_pass() -> bool
|
|
|
|
ida_ida.inf_full_sp_ana() -> bool
|
|
|
|
ida_ida.inf_gen_assume() -> bool
|
|
|
|
ida_ida.inf_gen_lzero() -> bool
|
|
|
|
ida_ida.inf_gen_null() -> bool
|
|
|
|
ida_ida.inf_gen_org() -> bool
|
|
|
|
ida_ida.inf_gen_tryblks() -> bool
|
|
|
|
ida_ida.inf_get_abibits() -> int
|
|
|
|
ida_ida.inf_get_af() -> int
|
|
|
|
ida_ida.inf_get_af2() -> int
|
|
|
|
ida_ida.inf_get_af2_low() -> "ushort"
|
|
Get/set low 16bit half of inf.af2.
|
|
|
|
ida_ida.inf_get_af_high() -> "ushort"
|
|
|
|
ida_ida.inf_get_af_low() -> "ushort"
|
|
Get/set low/high 16bit halves of inf.af.
|
|
|
|
ida_ida.inf_get_app_bitness() -> "uint"
|
|
|
|
ida_ida.inf_get_appcall_options() -> int
|
|
|
|
ida_ida.inf_get_apptype() -> "ushort"
|
|
|
|
ida_ida.inf_get_asmtype() -> "uchar"
|
|
|
|
ida_ida.inf_get_baseaddr() -> int
|
|
|
|
ida_ida.inf_get_bin_prefix_size() -> "short"
|
|
|
|
ida_ida.inf_get_cc(out: "compiler_info_t") -> bool
|
|
|
|
ida_ida.inf_get_cc_cm() -> "cm_t"
|
|
|
|
ida_ida.inf_get_cc_defalign() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_id() -> "comp_t"
|
|
|
|
ida_ida.inf_get_cc_size_b() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_e() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_i() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_l() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_ldbl() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_ll() -> "uchar"
|
|
|
|
ida_ida.inf_get_cc_size_s() -> "uchar"
|
|
|
|
ida_ida.inf_get_cmt_indent() -> "uchar"
|
|
|
|
ida_ida.inf_get_cmtflg() -> "uchar"
|
|
|
|
ida_ida.inf_get_database_change_count() -> int
|
|
|
|
ida_ida.inf_get_datatypes() -> int
|
|
|
|
ida_ida.inf_get_demname_form() -> "uchar"
|
|
Get DEMNAM_MASK bits of #demnames.
|
|
|
|
ida_ida.inf_get_demnames() -> "uchar"
|
|
|
|
ida_ida.inf_get_filetype() -> "filetype_t"
|
|
|
|
ida_ida.inf_get_genflags() -> "ushort"
|
|
|
|
ida_ida.inf_get_highoff() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_indent() -> "uchar"
|
|
|
|
ida_ida.inf_get_lenxref() -> "ushort"
|
|
|
|
ida_ida.inf_get_lflags() -> int
|
|
|
|
ida_ida.inf_get_limiter() -> "uchar"
|
|
|
|
ida_ida.inf_get_listnames() -> "uchar"
|
|
|
|
ida_ida.inf_get_long_demnames() -> int
|
|
|
|
ida_ida.inf_get_lowoff() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_main() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_margin() -> "ushort"
|
|
|
|
ida_ida.inf_get_max_autoname_len() -> "ushort"
|
|
|
|
ida_ida.inf_get_max_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_maxref() -> int
|
|
|
|
ida_ida.inf_get_min_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_nametype() -> "char"
|
|
|
|
ida_ida.inf_get_netdelta() -> int
|
|
|
|
ida_ida.inf_get_omax_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_omin_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_ostype() -> "ushort"
|
|
|
|
ida_ida.inf_get_outflags() -> int
|
|
|
|
ida_ida.inf_get_pack_mode() -> int
|
|
|
|
ida_ida.inf_get_prefflag() -> "uchar"
|
|
|
|
ida_ida.inf_get_privrange(*args) -> "range_t"
|
|
This function has the following signatures:
|
|
|
|
0. inf_get_privrange(out: range_t *) -> bool
|
|
1. inf_get_privrange() -> range_t
|
|
|
|
# 0: inf_get_privrange(out: range_t *) -> bool
|
|
|
|
|
|
# 1: inf_get_privrange() -> range_t
|
|
|
|
ida_ida.inf_get_privrange_end_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_privrange_start_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_procname() -> str
|
|
|
|
ida_ida.inf_get_refcmtnum() -> "uchar"
|
|
|
|
ida_ida.inf_get_short_demnames() -> int
|
|
|
|
ida_ida.inf_get_specsegs() -> "uchar"
|
|
|
|
ida_ida.inf_get_start_cs() -> "sel_t"
|
|
|
|
ida_ida.inf_get_start_ea() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_start_ip() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_start_sp() -> ida_idaapi.ea_t
|
|
|
|
ida_ida.inf_get_start_ss() -> "sel_t"
|
|
|
|
ida_ida.inf_get_strlit_break() -> "uchar"
|
|
|
|
ida_ida.inf_get_strlit_flags() -> "uchar"
|
|
|
|
ida_ida.inf_get_strlit_pref() -> str
|
|
|
|
ida_ida.inf_get_strlit_sernum() -> int
|
|
|
|
ida_ida.inf_get_strlit_zeroes() -> "char"
|
|
|
|
ida_ida.inf_get_strtype() -> int
|
|
|
|
ida_ida.inf_get_type_xrefnum() -> "uchar"
|
|
|
|
ida_ida.inf_get_version() -> "ushort"
|
|
|
|
ida_ida.inf_get_xrefflag() -> "uchar"
|
|
|
|
ida_ida.inf_get_xrefnum() -> "uchar"
|
|
|
|
ida_ida.inf_guess_func_type() -> bool
|
|
|
|
ida_ida.inf_handle_eh() -> bool
|
|
|
|
ida_ida.inf_handle_rtti() -> bool
|
|
|
|
ida_ida.inf_hide_comments() -> bool
|
|
|
|
ida_ida.inf_hide_libfuncs() -> bool
|
|
|
|
ida_ida.inf_huge_arg_align(*args) -> bool
|
|
|
|
ida_ida.inf_inc_database_change_count(cnt: int = 1) -> None
|
|
|
|
ida_ida.inf_is_16bit() -> bool
|
|
|
|
ida_ida.inf_is_32bit_exactly() -> bool
|
|
|
|
ida_ida.inf_is_32bit_or_higher() -> bool
|
|
|
|
ida_ida.inf_is_64bit() -> bool
|
|
|
|
ida_ida.inf_is_auto_enabled() -> bool
|
|
|
|
ida_ida.inf_is_be() -> bool
|
|
|
|
ida_ida.inf_is_dll() -> bool
|
|
|
|
ida_ida.inf_is_flat_off32() -> bool
|
|
|
|
ida_ida.inf_is_graph_view() -> bool
|
|
|
|
ida_ida.inf_is_hard_float() -> bool
|
|
|
|
ida_ida.inf_is_ilp32() -> bool
|
|
|
|
ida_ida.inf_is_kernel_mode() -> bool
|
|
|
|
ida_ida.inf_is_limiter_empty() -> bool
|
|
|
|
ida_ida.inf_is_limiter_thick() -> bool
|
|
|
|
ida_ida.inf_is_limiter_thin() -> bool
|
|
|
|
ida_ida.inf_is_mem_aligned4() -> bool
|
|
|
|
ida_ida.inf_is_snapshot() -> bool
|
|
|
|
ida_ida.inf_is_wide_high_byte_first() -> bool
|
|
|
|
ida_ida.inf_like_binary() -> bool
|
|
|
|
ida_ida.inf_line_pref_with_seg() -> bool
|
|
|
|
ida_ida.inf_loading_idc() -> bool
|
|
|
|
ida_ida.inf_macros_enabled() -> bool
|
|
|
|
ida_ida.inf_map_stkargs() -> bool
|
|
|
|
ida_ida.inf_mark_code() -> bool
|
|
|
|
ida_ida.inf_merge_strlits() -> bool
|
|
|
|
ida_ida.inf_no_store_user_info() -> bool
|
|
|
|
ida_ida.inf_noflow_to_data() -> bool
|
|
|
|
ida_ida.inf_noret_ana() -> bool
|
|
|
|
ida_ida.inf_op_offset() -> bool
|
|
|
|
ida_ida.inf_pack_idb() -> bool
|
|
|
|
ida_ida.inf_pack_stkargs(*args) -> bool
|
|
|
|
ida_ida.inf_postinc_strlit_sernum(cnt: int = 1) -> int
|
|
|
|
ida_ida.inf_prefix_show_funcoff() -> bool
|
|
|
|
ida_ida.inf_prefix_show_segaddr() -> bool
|
|
|
|
ida_ida.inf_prefix_show_stack() -> bool
|
|
|
|
ida_ida.inf_prefix_truncate_opcode_bytes() -> bool
|
|
|
|
ida_ida.inf_propagate_regargs() -> bool
|
|
|
|
ida_ida.inf_propagate_stkargs() -> bool
|
|
|
|
ida_ida.inf_readonly_idb() -> bool
|
|
|
|
ida_ida.inf_rename_jumpfunc() -> bool
|
|
|
|
ida_ida.inf_rename_nullsub() -> bool
|
|
|
|
ida_ida.inf_set_32bit(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_64bit(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_abi_set_by_user(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_abibits(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_af(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_af2(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_af2_low(saf: "ushort") -> None
|
|
|
|
ida_ida.inf_set_af_high(saf2: "ushort") -> None
|
|
|
|
ida_ida.inf_set_af_low(saf: "ushort") -> None
|
|
|
|
ida_ida.inf_set_allow_non_matched_ops(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_allow_sigmulti(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_app_bitness(bitness: "uint") -> None
|
|
|
|
ida_ida.inf_set_appcall_options(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_append_sigcmt(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_apptype(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_asmtype(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_auto_enabled(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_baseaddr(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_be(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_big_arg_align(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_bin_prefix_size(_v: "short") -> bool
|
|
|
|
ida_ida.inf_set_cc(_v: "compiler_info_t") -> bool
|
|
|
|
ida_ida.inf_set_cc_cm(_v: "cm_t") -> bool
|
|
|
|
ida_ida.inf_set_cc_defalign(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_id(_v: "comp_t") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_b(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_e(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_i(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_l(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_ldbl(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_ll(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cc_size_s(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_check_manual_ops(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_check_unicode_strlits(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_cmt_indent(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_cmtflg(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_coagulate_code(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_coagulate_data(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_compress_idb(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_all_xrefs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_func_from_call(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_func_from_ptr(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_func_tails(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_jump_tables(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_off_on_dref(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_off_using_fixup(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_create_strlit_on_xref(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_data_offset(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_database_change_count(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_datatypes(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_dbg_no_store_path(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_decode_fpp(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_del_no_xref_insns(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_demnames(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_dll(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_filetype(_v: "filetype_t") -> bool
|
|
|
|
ida_ida.inf_set_final_pass(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_flat_off32(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_full_sp_ana(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_gen_assume(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_gen_lzero(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_gen_null(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_gen_org(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_gen_tryblks(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_genflags(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_graph_view(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_guess_func_type(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_handle_eh(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_handle_rtti(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_hard_float(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_hide_comments(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_hide_libfuncs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_highoff(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_huge_arg_align(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_ilp32(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_indent(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_kernel_mode(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_lenxref(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_lflags(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_limiter(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_limiter_empty(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_limiter_thick(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_limiter_thin(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_line_pref_with_seg(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_listnames(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_loading_idc(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_long_demnames(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_lowoff(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_macros_enabled(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_main(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_map_stkargs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_margin(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_mark_code(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_max_autoname_len(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_max_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_maxref(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_mem_aligned4(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_merge_strlits(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_min_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_nametype(_v: "char") -> bool
|
|
|
|
ida_ida.inf_set_netdelta(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_no_store_user_info(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_noflow_to_data(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_noret_ana(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_omax_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_omin_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_op_offset(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_ostype(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_outflags(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_pack_idb(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_pack_mode(pack_mode: int) -> int
|
|
|
|
ida_ida.inf_set_pack_stkargs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_prefflag(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_prefix_show_funcoff(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_prefix_show_segaddr(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_prefix_show_stack(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_prefix_truncate_opcode_bytes(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_privrange(_v: "range_t") -> bool
|
|
|
|
ida_ida.inf_set_privrange_end_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_privrange_start_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_procname(*args) -> bool
|
|
|
|
ida_ida.inf_set_propagate_regargs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_propagate_stkargs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_readonly_idb(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_refcmtnum(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_rename_jumpfunc(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_rename_nullsub(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_short_demnames(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_should_create_stkvars(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_should_trace_sp(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_all_comments(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_auto(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_hidden_funcs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_hidden_insns(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_hidden_segms(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_line_pref(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_repeatables(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_src_linnum(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_void(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_xref_fncoff(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_xref_seg(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_xref_tmarks(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_show_xref_val(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_snapshot(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_specsegs(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_stack_ldbl(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_stack_varargs(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_start_cs(_v: "sel_t") -> bool
|
|
|
|
ida_ida.inf_set_start_ea(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_start_ip(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_start_sp(_v: ida_idaapi.ea_t) -> bool
|
|
|
|
ida_ida.inf_set_start_ss(_v: "sel_t") -> bool
|
|
|
|
ida_ida.inf_set_strlit_autocmt(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_strlit_break(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_strlit_flags(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_strlit_name_bit(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_strlit_names(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_strlit_pref(*args) -> bool
|
|
|
|
ida_ida.inf_set_strlit_savecase(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_strlit_serial_names(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_strlit_sernum(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_strlit_zeroes(_v: "char") -> bool
|
|
|
|
ida_ida.inf_set_strtype(_v: int) -> bool
|
|
|
|
ida_ida.inf_set_trace_flow(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_truncate_on_del(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_type_xrefnum(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_unicode_strlits(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_use_allasm(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_use_flirt(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_use_gcc_layout(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_version(_v: "ushort") -> bool
|
|
|
|
ida_ida.inf_set_wide_high_byte_first(_v: bool = True) -> bool
|
|
|
|
ida_ida.inf_set_xrefflag(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_set_xrefnum(_v: "uchar") -> bool
|
|
|
|
ida_ida.inf_should_create_stkvars() -> bool
|
|
|
|
ida_ida.inf_should_trace_sp() -> bool
|
|
|
|
ida_ida.inf_show_all_comments() -> bool
|
|
|
|
ida_ida.inf_show_auto() -> bool
|
|
|
|
ida_ida.inf_show_hidden_funcs() -> bool
|
|
|
|
ida_ida.inf_show_hidden_insns() -> bool
|
|
|
|
ida_ida.inf_show_hidden_segms() -> bool
|
|
|
|
ida_ida.inf_show_line_pref() -> bool
|
|
|
|
ida_ida.inf_show_repeatables() -> bool
|
|
|
|
ida_ida.inf_show_src_linnum() -> bool
|
|
|
|
ida_ida.inf_show_void() -> bool
|
|
|
|
ida_ida.inf_show_xref_fncoff() -> bool
|
|
|
|
ida_ida.inf_show_xref_seg() -> bool
|
|
|
|
ida_ida.inf_show_xref_tmarks() -> bool
|
|
|
|
ida_ida.inf_show_xref_val() -> bool
|
|
|
|
ida_ida.inf_stack_ldbl() -> bool
|
|
|
|
ida_ida.inf_stack_varargs() -> bool
|
|
|
|
ida_ida.inf_strlit_autocmt() -> bool
|
|
|
|
ida_ida.inf_strlit_name_bit() -> bool
|
|
|
|
ida_ida.inf_strlit_names() -> bool
|
|
|
|
ida_ida.inf_strlit_savecase() -> bool
|
|
|
|
ida_ida.inf_strlit_serial_names() -> bool
|
|
|
|
ida_ida.inf_test_mode() -> bool
|
|
|
|
ida_ida.inf_trace_flow() -> bool
|
|
|
|
ida_ida.inf_truncate_on_del() -> bool
|
|
|
|
ida_ida.inf_unicode_strlits() -> bool
|
|
|
|
ida_ida.inf_use_allasm() -> bool
|
|
|
|
ida_ida.inf_use_flirt() -> bool
|
|
|
|
ida_ida.inf_use_gcc_layout() -> bool
|
|
|
|
ida_ida.is_database_busy() -> bool
|
|
Check if the database is busy (e.g. performing some critical operations and cannot be safely accessed)
|
|
|
|
|
|
ida_ida.is_filetype_like_binary(ft: "filetype_t") -> bool
|
|
Is unstructured input file?
|
|
|
|
ida_ida.move_privrange(new_privrange_start: ida_idaapi.ea_t) -> bool
|
|
Move privrange to the specified address
|
|
|
|
@param new_privrange_start: new start address of the privrange
|
|
@returns success
|
|
|
|
ida_ida.switch_dbctx(idx: "size_t") -> "dbctx_t *"
|
|
Switch to the database with the provided context ID
|
|
|
|
@param idx: the index of the database to switch to
|
|
@returns the current dbctx_t instance or nullptr
|
|
|
|
ida_ida.to_ea(reg_cs: "sel_t", reg_ip: int) -> ida_idaapi.ea_t
|
|
Convert (sel,off) value to a linear address.
|
|
|
|
ida_ida.validate_idb(vld_flags: int = 0) -> "size_t"
|
|
Validate the database
|
|
|
|
@param vld_flags: combination of VLD_.. constants
|
|
@returns number of corrupted/fixed records
|
|
|
|
ida_idaapi
|
|
|
|
ida_idaapi.IDAPython_ExecScript(path, g, print_error = True)
|
|
Run the specified script.
|
|
|
|
This function is used by the low-level plugin code.
|
|
|
|
ida_idaapi.IDAPython_ExecSystem(cmd)
|
|
Executes a command with popen().
|
|
|
|
ida_idaapi.IDAPython_FormatExc(etype, value = None, tb = None, limit = None)
|
|
This function is used to format an exception given the
|
|
values returned by a PyErr_Fetch()
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings(obj)
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings._dedent(source: str) -> str
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings._nodes(tree)
|
|
Returns the list of all nodes in tree's body.
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings._nodes_iter(tree)
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings._pairwise_longest(iterable)
|
|
s -> (s0,s1), (s1,s2), (s2, s3), ..., (sN, None)
|
|
|
|
ida_idaapi.IDAPython_GetDocstrings._walk_tree(tree)
|
|
|
|
ida_idaapi.IDAPython_LoadProcMod(path, g, print_error = True)
|
|
Load processor module.
|
|
|
|
ida_idaapi.IDAPython_UnLoadProcMod(script, g, print_error = True)
|
|
Unload processor module.
|
|
|
|
ida_idaapi.IDAPython_displayhook
|
|
|
|
ida_idaapi.IDAPython_displayhook.__init__(self)
|
|
|
|
ida_idaapi.IDAPython_displayhook._print_hex(self, x)
|
|
|
|
ida_idaapi.IDAPython_displayhook.displayhook(self, item)
|
|
|
|
ida_idaapi.IDAPython_displayhook.displayhook_format(self, item)
|
|
|
|
ida_idaapi.IDAPython_displayhook.format_item(self, num_printer, storage, item)
|
|
|
|
ida_idaapi.IDAPython_displayhook.format_seq(self, num_printer, storage, item, opn, cls)
|
|
|
|
ida_idaapi.NW_CLOSEIDB
|
|
Notify when the database is closed. Its callback is of the form: def notify_when_callback(nw_code)
|
|
|
|
ida_idaapi.NW_INITIDA
|
|
Notify when the IDA starts. Its callback is of the form: def notify_when_callback(nw_code)
|
|
|
|
ida_idaapi.NW_OPENIDB
|
|
Notify when the database is opened. Its callback is of the form: def notify_when_callback(nw_code, is_old_database)
|
|
|
|
ida_idaapi.NW_REMOVE
|
|
Use this flag with other flags to uninstall a notifywhen callback
|
|
|
|
ida_idaapi.NW_TERMIDA
|
|
Notify when the IDA terminates. Its callback is of the form: def notify_when_callback(nw_code)
|
|
|
|
ida_idaapi.PY_ICID_BYREF
|
|
byref object
|
|
|
|
ida_idaapi.PY_ICID_INT64
|
|
int64 object
|
|
|
|
ida_idaapi.PY_ICID_OPAQUE
|
|
opaque object
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__
|
|
Helper class for explicitly representing VT_INT64 values
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__add__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__div__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__init__(self, v)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__mul__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__op(self, op_n, other, rev = False)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__radd__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__rdiv__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__rmul__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__rsub__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_int64__.__sub__(self, other)
|
|
|
|
ida_idaapi.PyIdc_cvt_refclass__
|
|
Helper class for representing references to immutable objects
|
|
|
|
ida_idaapi.PyIdc_cvt_refclass__.__init__(self, v)
|
|
|
|
ida_idaapi.PyIdc_cvt_refclass__.cstr(self)
|
|
Returns the string as a C string (up to the zero termination)
|
|
|
|
ida_idaapi.ST_OVER_DEBUG_SEG
|
|
step tracing will be disabled when IP is in a debugger segment
|
|
|
|
ida_idaapi.ST_OVER_LIB_FUNC
|
|
step tracing will be disabled when IP is in a library function
|
|
|
|
ida_idaapi.TRUNC(ea)
|
|
Truncate EA for the current application bitness
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util
|
|
Internal utility class for auto-completion support
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__call__(self, line, x)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__init__(self)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__parse_arg(self, arg)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec(self, name, args, defaults, annotations)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec.__repr_type(typ)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__proto_from_docstring(self, name, doc, altname = None)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_args(self, args, types, defaults)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_constant(self, name, attr)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_default(self, name)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_docstr(self, doc, name, proto)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_int_member(self, name, typ, val)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_proto(self, name, args, types, defaults, rets, is_ctor = False)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__render_rets(self, rets)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.__resolve_type(self, tname)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.build_hints(self, names, ns)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.debug(self, *args)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.dir_namespace(self, m, prefix)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.get_candidates(self, qname, line, match_syntax_char)
|
|
|
|
ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically(self, ns, name, line, syntax_char)
|
|
|
|
ida_idaapi.__install_excepthook()
|
|
|
|
ida_idaapi._bounded_getitem_iterator(self)
|
|
Helper function, to be set as __iter__ method for qvector-, or array-based classes.
|
|
|
|
ida_idaapi._listify_types(*classes)
|
|
|
|
ida_idaapi._make_missed_695bwcompat_property(bad_attr, new_attr, has_setter)
|
|
|
|
ida_idaapi._make_missed_695bwcompat_property._getter(self)
|
|
|
|
ida_idaapi._make_missed_695bwcompat_property._setter(self, v)
|
|
|
|
ida_idaapi._make_one_time_warning_message(bad_attr, new_attr)
|
|
|
|
ida_idaapi._make_one_time_warning_message.f()
|
|
|
|
ida_idaapi._qvector_back(self)
|
|
|
|
ida_idaapi._qvector_front(self)
|
|
|
|
ida_idaapi._replace_module_function(replacement)
|
|
|
|
ida_idaapi.as_UTF16(s)
|
|
Convenience function to convert a string into appropriate unicode format
|
|
|
|
ida_idaapi.as_cstr(val)
|
|
Returns a C str from the passed value. The passed value can be of type refclass (returned by a call to buffer() or byref())
|
|
It scans for the first \x00 and returns the string value up to that point.
|
|
|
|
ida_idaapi.as_int32(v)
|
|
Returns a number as a signed int32 number
|
|
|
|
ida_idaapi.as_signed(v, nbits = 32)
|
|
Returns a number as signed. The number of bits are specified by the user.
|
|
The MSB holds the sign.
|
|
|
|
ida_idaapi.as_uint32(v)
|
|
Returns a number as an unsigned int32 number
|
|
|
|
ida_idaapi.copy_bits(v, s, e = -1)
|
|
Copy bits from a value
|
|
@param v: the value
|
|
@param s: starting bit (0-based)
|
|
@param e: ending bit
|
|
|
|
ida_idaapi.disable_script_timeout()
|
|
Disables the script timeout and hides the script wait box.
|
|
Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again
|
|
|
|
@return: None
|
|
|
|
ida_idaapi.enable_extlang_python(enable)
|
|
Enables or disables Python extlang.
|
|
When enabled, all expressions will be evaluated by Python.
|
|
|
|
@param enable: Set to True to enable, False otherwise
|
|
|
|
ida_idaapi.enable_python_cli(enable: bool) -> None
|
|
|
|
ida_idaapi.format_basestring(_in: "PyObject *") -> str
|
|
|
|
ida_idaapi.loader_input_t
|
|
A helper class to work with linput_t related functions.
|
|
This class is also used by file loaders scripts.
|
|
|
|
ida_idaapi.loader_input_t.__init__(self, pycapsule = None)
|
|
|
|
ida_idaapi.loader_input_t.close(self)
|
|
Closes the file
|
|
|
|
ida_idaapi.loader_input_t.file2base(self, pos: int, ea1: ea_t, ea2: ea_t, patchable: bool)
|
|
Load portion of file into the database
|
|
This function will include (ea1..ea2) into the addressing space of the
|
|
program (make it enabled)
|
|
|
|
@param li: pointer ot input source
|
|
@param pos: position in the file
|
|
@param (ea1..ea2): range of destination linear addresses
|
|
@param patchable: should the kernel remember correspondance of
|
|
file offsets to linear addresses.
|
|
@return: 1-ok,0-read error, a warning is displayed
|
|
|
|
ida_idaapi.loader_input_t.filename(self) -> "PyObject *"
|
|
|
|
ida_idaapi.loader_input_t.from_capsule(pycapsule: "PyObject *") -> "loader_input_t *"
|
|
|
|
ida_idaapi.loader_input_t.from_fp(fp)
|
|
A static method to construct an instance from a FILE*
|
|
|
|
@param fp: a FILE pointer
|
|
@return: a new instance, or None
|
|
|
|
ida_idaapi.loader_input_t.from_linput(linput: "linput_t *") -> "loader_input_t *"
|
|
|
|
ida_idaapi.loader_input_t.get_byte(self)
|
|
Reads a single byte from the file. Returns None if EOF or the read byte
|
|
|
|
ida_idaapi.loader_input_t.get_linput(self) -> "linput_t *"
|
|
|
|
ida_idaapi.loader_input_t.gets(self, len: int)
|
|
Reads a line from the input file. Returns the read line or None
|
|
|
|
@param len: the maximum line length
|
|
@return: a str, or None
|
|
|
|
ida_idaapi.loader_input_t.getz(self, size: int, fpos: int = -1)
|
|
Returns a zero terminated string at the given position
|
|
|
|
@param size: maximum size of the string
|
|
@param fpos: if != -1 then seek will be performed before reading
|
|
@return: The string or None on failure.
|
|
|
|
ida_idaapi.loader_input_t.open(self, filename, remote = False)
|
|
Opens a file (or a remote file)
|
|
|
|
@param filename: the file name
|
|
@param remote: whether the file is local, or remote
|
|
@return: Boolean
|
|
|
|
ida_idaapi.loader_input_t.open_memory(self, start: ea_t, size: int)
|
|
Create a linput for process memory (By internally calling idaapi.create_memory_linput())
|
|
This linput will use dbg->read_memory() to read data
|
|
|
|
@param start: starting address of the input
|
|
@param size: size of the memory range to represent as linput
|
|
if unknown, may be passed as 0
|
|
|
|
ida_idaapi.loader_input_t.opened(self)
|
|
Checks if the file is opened or not
|
|
|
|
ida_idaapi.loader_input_t.read(self, size: int = -1)
|
|
Read up to size bytes (all data if size is negative). Return an empty bytes object on EOF.
|
|
|
|
@param size: the maximum number of bytes to read
|
|
@return a bytes object
|
|
|
|
ida_idaapi.loader_input_t.readbytes(self, size: int, big_endian: bool)
|
|
Similar to read() but it respect the endianness
|
|
|
|
@param size: the maximum number of bytes to read
|
|
@param big_endian: endianness
|
|
@return a str, or None
|
|
|
|
ida_idaapi.loader_input_t.seek(self, offset: int, whence = SEEK_SET)
|
|
Set input source position
|
|
|
|
@param offset: the seek offset
|
|
@param whence: the position to seek from
|
|
@return: the new position (not 0 as fseek!)
|
|
|
|
ida_idaapi.loader_input_t.set_linput(self, linput)
|
|
Links the current loader_input_t instance to a linput_t instance
|
|
|
|
@param linput: the linput_t to link to
|
|
|
|
ida_idaapi.loader_input_t.size(self) -> "int64"
|
|
|
|
ida_idaapi.loader_input_t.tell(self)
|
|
Returns the current position
|
|
|
|
ida_idaapi.notify_when(when, callback)
|
|
Register a callback that will be called when an event happens.
|
|
@param when: one of NW_XXXX constants
|
|
@param callback: This callback prototype varies depending on the 'when' parameter:
|
|
The general callback format:
|
|
def notify_when_callback(nw_code)
|
|
In the case of NW_OPENIDB:
|
|
def notify_when_callback(nw_code, is_old_database)
|
|
@return: Boolean
|
|
|
|
ida_idaapi.object_t
|
|
Helper class used to initialize empty objects
|
|
|
|
ida_idaapi.object_t.__getitem__(self, idx)
|
|
Allow access to object attributes by index (like dictionaries)
|
|
|
|
ida_idaapi.object_t.__init__(self, **kwds)
|
|
|
|
ida_idaapi.parse_command_line3(cmdline: str) -> "PyObject *"
|
|
|
|
ida_idaapi.plugin_t
|
|
Base class for all scripted plugins.
|
|
|
|
ida_idaapi.plugin_t.run(self, arg)
|
|
|
|
ida_idaapi.plugin_t.term(self)
|
|
|
|
ida_idaapi.plugmod_t
|
|
Base class for all scripted multi-plugins.
|
|
|
|
ida_idaapi.py_clinked_object_t
|
|
This is a utility and base class for C linked objects
|
|
|
|
ida_idaapi.py_clinked_object_t.__del__(self)
|
|
Delete the link upon object destruction (only if not static)
|
|
|
|
ida_idaapi.py_clinked_object_t.__init__(self, lnk = None)
|
|
|
|
ida_idaapi.py_clinked_object_t._create_clink(self)
|
|
Overwrite me.
|
|
Creates a new clink
|
|
@return: PyCapsule representing the C link
|
|
|
|
ida_idaapi.py_clinked_object_t._del_clink(self, lnk)
|
|
Overwrite me.
|
|
This method deletes the link
|
|
|
|
ida_idaapi.py_clinked_object_t._free(self)
|
|
Explicitly delete the link (only if not static)
|
|
|
|
ida_idaapi.py_clinked_object_t._get_clink_ptr(self)
|
|
Overwrite me.
|
|
Returns the C link pointer as a 64bit number
|
|
|
|
ida_idaapi.py_clinked_object_t.assign(self, other)
|
|
Overwrite me.
|
|
This method allows you to assign an instance contents to anothers
|
|
@return: Boolean
|
|
|
|
ida_idaapi.py_clinked_object_t.clink
|
|
Returns the C link as a PyObject
|
|
|
|
ida_idaapi.py_clinked_object_t.clink_ptr
|
|
Returns the C link pointer as a number
|
|
|
|
ida_idaapi.py_clinked_object_t.copy(self)
|
|
Returns a new copy of this class
|
|
|
|
ida_idaapi.pycim_get_widget(_self: "PyObject *") -> "TWidget *"
|
|
|
|
ida_idaapi.pycim_view_close(_self: "PyObject *") -> None
|
|
|
|
ida_idaapi.pygc_create_groups(_self: "PyObject *", groups_infos: "PyObject *") -> "PyObject *"
|
|
|
|
ida_idaapi.pygc_delete_groups(_self: "PyObject *", groups: "PyObject *", new_current: "PyObject *") -> "PyObject *"
|
|
|
|
ida_idaapi.pygc_refresh(_self: "PyObject *") -> None
|
|
|
|
ida_idaapi.pygc_set_groups_visibility(_self: "PyObject *", groups: "PyObject *", expand: "PyObject *", new_current: "PyObject *") -> "PyObject *"
|
|
|
|
ida_idaapi.pyidc_cvt_helper__
|
|
This is a special helper object that helps detect which kind
|
|
of object is this python object wrapping and how to convert it
|
|
back and from IDC.
|
|
This object is characterized by its special attribute and its value
|
|
|
|
ida_idaapi.pyidc_cvt_helper__.__get_value(self)
|
|
|
|
ida_idaapi.pyidc_cvt_helper__.__init__(self, cvt_id, value)
|
|
|
|
ida_idaapi.pyidc_cvt_helper__.__set_value(self, v)
|
|
|
|
ida_idaapi.pyidc_opaque_object_t
|
|
This is the base class for all Python<->IDC opaque objects
|
|
|
|
ida_idaapi.replfun(func)
|
|
|
|
ida_idaapi.require(modulename, package = None)
|
|
Load, or reload a module.
|
|
|
|
When under heavy development, a user's tool might consist of multiple
|
|
modules. If those are imported using the standard 'import' mechanism,
|
|
there is no guarantee that the Python implementation will re-read
|
|
and re-evaluate the module's Python code. In fact, it usually doesn't.
|
|
What should be done instead is 'reload()'-ing that module.
|
|
|
|
This is a simple helper function that will do just that: In case the
|
|
module doesn't exist, it 'import's it, and if it does exist,
|
|
'reload()'s it.
|
|
|
|
The importing module (i.e., the module calling require()) will have
|
|
the loaded module bound to its globals(), under the name 'modulename'.
|
|
(If require() is called from the command line, the importing module
|
|
will be '__main__'.)
|
|
|
|
For more information, see: <http://www.hexblog.com/?p=749>.
|
|
|
|
ida_idaapi.set_script_timeout(timeout)
|
|
Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses.
|
|
See also L{disable_script_timeout}.
|
|
|
|
@param timeout: This value is in seconds.
|
|
If this value is set to zero then the script will never timeout.
|
|
@return: Returns the old timeout value
|
|
|
|
ida_idaapi.struct_unpack(buffer, signed = False, offs = 0)
|
|
Unpack a buffer given its length and offset using struct.unpack_from().
|
|
This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table'
|
|
If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned.
|
|
|
|
ida_idc
|
|
|
|
ida_idc.get_mark_comment(slot: int) -> "PyObject *"
|
|
|
|
ida_idc.get_marked_pos(slot: int) -> ida_idaapi.ea_t
|
|
|
|
ida_idc.mark_position(ea: ida_idaapi.ea_t, lnnum: int, x: "short", y: "short", slot: int, comment: str) -> None
|
|
|
|
ida_idd
|
|
Contains definition of the interface to IDD modules.
|
|
|
|
The interface consists of structures describing the target debugged processor and a debugging API.
|
|
|
|
|
|
ida_idd.APPCALL_DEBEV
|
|
Return debug event information.
|
|
|
|
ida_idd.APPCALL_MANUAL
|
|
Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be generated by ida!
|
|
|
|
|
|
ida_idd.APPCALL_TIMEOUT
|
|
Appcall with timeout. If timed out, errbuf will contain "timeout". See SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT
|
|
|
|
|
|
ida_idd.Appcall__
|
|
Appcall with timeout
|
|
The timeout value in milliseconds is specified
|
|
in the high 2 bytes of the 'options' argument:
|
|
If timed out, errbuf will contain "timeout".
|
|
|
|
ida_idd.Appcall__.APPCALL_DEBEV
|
|
Return debug event information.
|
|
|
|
ida_idd.Appcall__.APPCALL_MANUAL
|
|
Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be generated by ida!
|
|
|
|
|
|
ida_idd.Appcall__.APPCALL_TIMEOUT
|
|
Appcall with timeout. If timed out, errbuf will contain "timeout". See SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT
|
|
|
|
|
|
ida_idd.Appcall__.Consts
|
|
Use Appcall.Consts.CONST_NAME to access constants
|
|
|
|
ida_idd.Appcall__.UTF16(s)
|
|
|
|
ida_idd.Appcall__.__get_consts(self)
|
|
|
|
ida_idd.Appcall__.__getattr__(self, name_or_ea)
|
|
Allows you to call functions as if they were member functions (by returning a callable object)
|
|
|
|
ida_idd.Appcall__.__getitem__(self, idx)
|
|
Use self[func_name] syntax if the function name contains invalid characters for an attribute name
|
|
See __getattr___
|
|
|
|
ida_idd.Appcall__.__init__(self)
|
|
|
|
ida_idd.Appcall__.__name_or_ea(name_or_ea)
|
|
Function that accepts a name or an ea and checks if the address is enabled.
|
|
If a name is passed then idaapi.get_name_ea() is applied to retrieve the name
|
|
@return:
|
|
- Returns the resolved EA or
|
|
- Raises an exception if the address is not enabled
|
|
|
|
ida_idd.Appcall__.__typedecl_or_tinfo(typedecl_or_tinfo, flags = None)
|
|
Function that accepts a tinfo_t object or type declaration as a string
|
|
If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object
|
|
@return:
|
|
- Returns the tinfo_t object
|
|
- Raises an exception if the declaration cannot be parsed
|
|
|
|
ida_idd.Appcall__.array(type_name)
|
|
Defines an array type. Later you need to pack() / unpack()
|
|
|
|
ida_idd.Appcall__.buffer(str = None, size = 0, fill = " |