IDA SDK
|
Describes a processor module (IDP).
An IDP file may have only one such structure called LPH. The kernel will copy it to ph structure and use ph.
Public Attributes | |
int32 | version |
Expected kernel version, should be IDP_INTERFACE_VERSION. | |
int32 | id |
one of Processor IDs | |
uint32 | flag |
Processor feature bits | |
uint32 | flag2 |
Processor additional feature bits | |
int32 | cnbits |
Number of bits in a byte for code segments (usually 8). More... | |
int32 | dnbits |
Number of bits in a byte for non-code segments (usually 8). More... | |
const asm_t *const * | assemblers |
pointer to array of target assembler definitions. More... | |
hook_cb_t * | _notify |
Event notification handler. | |
const char *const * | reg_names |
array of register names | |
int32 | regs_num |
number of registers | |
size_t | tbyte_size |
Size of long double (tbyte) for this processor (meaningful only if asm_t::a_tbyte != NULL) | |
char | real_width [4] |
Number of digits in floating numbers after the decimal point. More... | |
int32 | icode_return |
Icode of return instruction. It is ok to give any of possible return instructions. | |
void * | unused_slot |
Reserved, currently equals to NULL. | |
Names | |
IDP module may support several compatible processors. The following arrays define processor names: | |
const char *const * | psnames |
short processor names (NULL terminated). More... | |
const char *const * | plnames |
long processor names (NULL terminated). More... | |
Segment registers | |
Segment register information (use virtual CS and DS registers if your processor doesn't have segment registers): | |
int32 | reg_first_sreg |
number of first segment register | |
int32 | reg_last_sreg |
number of last segment register | |
int32 | segreg_size |
size of a segment register in bytes | |
Virtual segment registers | |
If your processor doesn't have segment registers, you should define 2 virtual segment registers for CS and DS. Let's call them rVcs and rVds. | |
int32 | reg_code_sreg |
number of CS register | |
int32 | reg_data_sreg |
number of DS register | |
Empirics | |
const bytes_t * | codestart |
Array of typical code start sequences. More... | |
const bytes_t * | retcodes |
Array of 'return' instruction opcodes. More... | |
Public Member Functions | |
bool | has_idp_opts (void) const |
#PR_IDP_OPTS | |
bool | has_realcvt (void) const |
#PR_REALCVT | |
bool | has_segregs (void) const |
PR_SEGS | |
bool | use32 (void) const |
PR_USE64 or PR_USE32 | |
bool | use64 (void) const |
PR_USE64 | |
bool | ti (void) const |
PR_TYPEINFO | |
bool | stkup (void) const |
PR_STACK_UP | |
bool | use_tbyte (void) const |
PR_USE_TBYTE | |
bool | use_mappings (void) const |
PR2_MAPPINGS | |
int | get_segm_bitness (void) const |
Get segment bitness. More... | |
ssize_t | notify (event_t event_code,...) |
int | init (const char *idp_modname) |
int | term () |
int | newprc (int pnum, bool keep_cfg) |
int | newasm (int asmnum) |
int | newfile (const char *fname) |
int | oldfile (const char *fname) |
int | newbinary (const char *filename, qoff64_t fileoff, ea_t basepara, ea_t binoff, uint64 nbytes) |
int | endbinary (bool ok) |
int | creating_segm (segment_t *seg) |
int | assemble (uchar *_bin, ea_t ea, ea_t cs, ea_t ip, bool _use32, const char *line) |
int | ana_insn (insn_t *out) |
int | emu_insn (const insn_t &insn) |
int | out_header (outctx_t &ctx) |
int | out_footer (outctx_t &ctx) |
int | out_segstart (outctx_t &ctx, segment_t *seg) |
int | out_segend (outctx_t &ctx, segment_t *seg) |
int | out_assumes (outctx_t &ctx) |
int | out_insn (outctx_t &ctx) |
int | out_mnem (outctx_t &ctx) |
int | out_operand (outctx_t &ctx, const op_t &op) |
int | out_data (outctx_t &ctx, bool analyze_only) |
int | out_label (outctx_t &ctx, const char *colored_name) |
int | out_special_item (outctx_t &ctx, uchar segtype) |
int | gen_stkvar_def (outctx_t &ctx, const class member_t *mptr, sval_t v) |
int | gen_regvar_def (outctx_t &ctx, regvar_t *v) |
int | gen_src_file_lnnum (outctx_t &ctx, const char *file, size_t lnnum) |
int | rename (ea_t ea, const char *new_name, int flags) |
int | may_show_sreg (ea_t current_ea) |
int | coagulate (ea_t start_ea) |
int | auto_queue_empty (int type) |
int | func_bounds (int *possible_return_code, func_t *pfn, ea_t max_func_end_ea) |
int | may_be_func (const insn_t &insn, int state) |
int | is_sane_insn (const insn_t &insn, int no_crefs) |
int | cmp_operands (const op_t &op1, const op_t &op2) |
int | is_jump_func (func_t *pfn, ea_t *jump_target, ea_t *func_pointer) |
int | is_basic_block_end (const insn_t &insn, bool call_insn_stops_block) |
int | getreg (uval_t *rv, int regnum) |
int | undefine (ea_t ea) |
int | moving_segm (segment_t *seg, ea_t to, int flags) |
int | is_sp_based (const insn_t &insn, const op_t &x) |
int | is_far_jump (int icode) |
int | is_call_insn (const insn_t &insn) |
int | is_ret_insn (const insn_t &insn, bool strict) |
int | is_align_insn (ea_t ea) |
int | can_have_type (const op_t &op) |
int | get_stkvar_scale_factor () |
int | create_flat_group (ea_t image_base, int bitness, sel_t dataseg_sel) |
int | is_alloca_probe (ea_t ea) |
int | get_reg_name (qstring *buf, int reg, size_t width, int reghi) |
int | gen_asm_or_lst (bool starting, FILE *fp, bool is_asm, int flags, void *outline) |
int | gen_map_file (int *nlines, FILE *fp) |
int | get_autocmt (qstring *buf, const insn_t &insn) |
int | is_insn_table_jump (const insn_t &insn) |
int | loader_elf_machine (linput_t *li, int machine_type, const char **p_procname, proc_def_t **p_pd) |
int | is_indirect_jump (const insn_t &insn) |
int | verify_noreturn (func_t *pfn) |
int | verify_sp (func_t *pfn) |
int | create_func_frame (func_t *pfn) |
int | get_frame_retsize (int *retsize, const func_t *pfn) |
int | treat_hindering_item (ea_t hindering_item_ea, flags_t new_item_flags, ea_t new_item_ea, asize_t new_item_length) |
int | extract_address (ea_t *out_ea, ea_t screen_ea, const char *string, size_t x) |
int | str2reg (const char *regname) |
int | is_switch (switch_info_t *si, const insn_t &insn) |
int | create_switch_xrefs (ea_t jumpea, const switch_info_t &si) |
int | calc_switch_cases (void *casevec, eavec_t *targets, ea_t insn_ea, const switch_info_t &si) |
int | get_bg_color (bgcolor_t *color, ea_t ea) |
int | validate_flirt_func (ea_t start_ea, const char *funcname) |
int | get_operand_string (qstring *buf, const insn_t &insn, int opnum) |
int | add_cref (ea_t from, ea_t to, cref_t type) |
int | add_dref (ea_t from, ea_t to, dref_t type) |
int | del_cref (ea_t from, ea_t to, bool expand) |
int | del_dref (ea_t from, ea_t to) |
int | coagulate_dref (ea_t from, ea_t to, bool may_define, ea_t *code_ea) |
const char * | set_idp_options (const char *keyword, int vtype, const void *value) |
int | set_proc_options (const char *options, int confidence) |
int | adjust_libfunc_ea (const idasgn_t &sig, const libfunc_t &libfun, ea_t *ea) |
int | realcvt (void *m, unsigned short *e, unsigned short swt) |
int | delay_slot_insn (ea_t *ea, bool *bexec, bool *fexec) |
int | adjust_refinfo (refinfo_t *ri, ea_t ea, int n, const fixup_data_t &fd) |
int | is_cond_insn (const insn_t &insn) |
int | next_exec_insn (ea_t *target, ea_t ea, int tid, regval_getter_t *_getreg, const regval_t ®values) |
int | calc_step_over (ea_t *target, ea_t ip) |
int | get_macro_insn_head (ea_t *head, ea_t ip) |
int | get_dbr_opnum (int *opnum, const insn_t &insn) |
int | insn_reads_tbit (const insn_t &insn, regval_getter_t *_getreg, const regval_t ®values) |
int | get_idd_opinfo (idd_opinfo_t *opinf, ea_t ea, int n, int thread_id, regval_getter_t *_getreg, const regval_t ®values) |
int | calc_next_eas (eavec_t *res, const insn_t &insn, bool over) |
int | clean_tbit (ea_t ea, regval_getter_t *_getreg, const regval_t ®values) |
int | get_reg_info (const char **main_regname, bitrange_t *bitrange, const char *regname) |
int | setup_til () |
int | max_ptr_size () |
int | get_default_enum_size (cm_t cm) |
int | calc_cdecl_purged_bytes (ea_t ea) |
int | get_stkarg_offset () |
int | equal_reglocs (const argloc_t &a1, const argloc_t &a2) |
int | decorate_name (qstring *outbuf, const char *name, bool mangle, cm_t cc, const tinfo_t &type) |
int | calc_retloc (argloc_t *retloc, const tinfo_t &rettype, cm_t cc) |
int | calc_varglocs (func_type_data_t *ftd, regobjs_t *regs, relobj_t *stkargs, int nfixed) |
int | calc_arglocs (func_type_data_t *fti) |
int | use_stkarg_type (ea_t ea, const funcarg_t &arg) |
int | use_regarg_type (int *idx, ea_t ea, void *rargs) |
int | use_arg_types (ea_t ea, func_type_data_t *fti, void *rargs) |
int | calc_purged_bytes (int *p_purged_bytes, const func_type_data_t &fti) |
int | shadow_args_size (int *shadow_size, func_t *pfn) |
int | get_cc_regs (callregs_t *regs, cm_t cc) |
int | get_simd_types (void *out, const simd_info_t *simd_attrs, const argloc_t *argloc, bool create_tifs) |
int | arg_addrs_ready (ea_t caller, int n, const tinfo_t &tif, ea_t *addrs) |
int | adjust_argloc (argloc_t *argloc, const tinfo_t *type, int size) |
int | lower_func_type (intvec_t *argnums, func_type_data_t *fti) |
int | get_abi_info (qstrvec_t *abi_names, qstrvec_t *abi_opts, comp_t comp) |
int | get_stkvar_scale (void) |
Get the stack variable scaling factor. More... | |
Byte size | |
Number of 8bit bytes required to hold one byte of the target processor. | |
int | cbsize (void) |
for code segments | |
int | dbsize (void) |
for non-code segments | |
Instruction set | |
int32 | instruc_start |
icode of the first instruction | |
int32 | instruc_end |
icode of the last instruction + 1 | |
const instruc_t * | instruc |
Array of instructions. | |
bool | is_canon_insn (uint16 itype) const |
Does the given value specify a valid instruction for this instruction set?. More... | |
enum processor_t::event_t |
Callback notification codes.
These are passed to notify() when certain events occur in the kernel, allowing the processor module to take appropriate action.
If you are not developing a processor module, many of these codes already have a corresponding function to use instead ( is_call_insn vs is_call_insn(ea_t), for example).
If you are developing a processor module, your notify() function must implement the desired behavior when called with a given code.
Enumerator | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ev_init |
The IDP module is just loaded.
| ||||||||||||||
ev_term |
The IDP module is being unloaded. | ||||||||||||||
ev_newprc |
Before changing processor type.
| ||||||||||||||
ev_newasm |
Before setting a new assembler.
| ||||||||||||||
ev_newfile |
A new file has been loaded.
| ||||||||||||||
ev_oldfile |
An old file has been loaded.
| ||||||||||||||
ev_newbinary |
IDA is about to load a binary file. | ||||||||||||||
ev_endbinary |
IDA has loaded a binary file.
| ||||||||||||||
ev_set_idp_options |
Set IDP-specific configuration option Also see set_options_t above.
| ||||||||||||||
ev_set_proc_options |
Called if the user specified an option string in the command line: -p<processor name>="">:<options>. Can be used for setting a processor subtype. Also called if option string is passed to set_processor_type() and IDC's SetProcessorType().
| ||||||||||||||
ev_ana_insn |
Analyze one instruction and fill 'out' structure. This function shouldn't change the database, flags or anything else. All these actions should be performed only by emu_insn() function. {ea} contains address of instruction to analyze.
| ||||||||||||||
ev_emu_insn |
Emulate instruction, create cross-references, plan to analyze subsequent instructions, modify flags etc. Upon entrance to this function, all information about the instruction is in 'insn' structure.
| ||||||||||||||
ev_out_header |
Function to produce start of disassembled text.
| ||||||||||||||
ev_out_footer |
Function to produce end of disassembled text.
| ||||||||||||||
ev_out_segstart |
Function to produce start of segment.
| ||||||||||||||
ev_out_segend |
Function to produce end of segment.
| ||||||||||||||
ev_out_assumes |
Function to produce assume directives when segment register value changes.
| ||||||||||||||
ev_out_insn |
Generate text representation of an instruction in 'ctx.insn' outctx_t provides functions to output the generated text. This function shouldn't change the database, flags or anything else. All these actions should be performed only by emu_insn() function.
| ||||||||||||||
ev_out_mnem |
Generate instruction mnemonics. This callback should append the colored mnemonics to ctx.outbuf Optional notification, if absent, out_mnem will be called.
| ||||||||||||||
ev_out_operand |
Generate text representation of an instruction operand outctx_t provides functions to output the generated text. All these actions should be performed only by emu_insn() function.
| ||||||||||||||
ev_out_data |
Generate text representation of data items This function may change the database and create cross-references if analyze_only is set.
| ||||||||||||||
ev_out_label |
The kernel is going to generate an instruction label line or a function header.
| ||||||||||||||
ev_out_special_item |
Generate text representation of an item in a special segment i.e. absolute symbols, externs, communal definitions etc
| ||||||||||||||
ev_gen_stkvar_def |
Generate stack variable definition line Default line is varname = type ptr value, where 'type' is one of byte,word,dword,qword,tbyte.
| ||||||||||||||
ev_gen_regvar_def |
Generate register variable definition line.
| ||||||||||||||
ev_gen_src_file_lnnum |
Callback: generate analog of: #line "file.c" 123 directive.
| ||||||||||||||
ev_creating_segm |
A new segment is about to be created.
| ||||||||||||||
ev_moving_segm |
May the kernel move the segment?
| ||||||||||||||
ev_coagulate |
Try to define some unexplored bytes. This notification will be called if the kernel tried all possibilities and could not find anything more useful than to convert to array of bytes. The module can help the kernel and convert the bytes into something more useful.
| ||||||||||||||
ev_undefine |
An item in the database (insn or data) is being deleted.
| ||||||||||||||
ev_treat_hindering_item |
An item hinders creation of another item.
| ||||||||||||||
ev_rename |
The kernel is going to rename a byte.
| ||||||||||||||
ev_is_far_jump |
is indirect far jump or call instruction? meaningful only if the processor has 'near' and 'far' reference types
| ||||||||||||||
ev_is_sane_insn |
Is the instruction sane for the current file type?.
| ||||||||||||||
ev_is_cond_insn |
Is conditional instruction?
| ||||||||||||||
ev_is_call_insn |
Is the instruction a "call"?
| ||||||||||||||
ev_is_ret_insn |
Is the instruction a "return"?
| ||||||||||||||
ev_may_be_func |
Can a function start here?
| ||||||||||||||
ev_is_basic_block_end |
Is the current instruction end of a basic block?. This function should be defined for processors with delayed jump slots.
| ||||||||||||||
ev_is_indirect_jump |
Determine if instruction is an indirect jump. If CF_JUMP bit can not describe all jump types jumps, please define this callback.
| ||||||||||||||
ev_is_insn_table_jump |
Determine if instruction is a table jump or call. If CF_JUMP bit can not describe all kinds of table jumps, please define this callback. It will be called for insns with CF_JUMP bit set.
| ||||||||||||||
ev_is_switch |
Find 'switch' idiom. It will be called for instructions marked with CF_JUMP.
| ||||||||||||||
ev_calc_switch_cases |
Calculate case values and targets for a custom jump table.
| ||||||||||||||
ev_create_switch_xrefs |
Create xrefs for a custom jump table.
| ||||||||||||||
ev_is_align_insn |
Is the instruction created only for alignment purposes?. Do not directly call this function, use is_align_insn()
| ||||||||||||||
ev_is_alloca_probe |
Does the function at 'ea' behave as __alloca_probe?
| ||||||||||||||
ev_delay_slot_insn |
Get delay slot instruction.
| ||||||||||||||
ev_is_sp_based |
Check whether the operand is relative to stack pointer or frame pointer This event is used to determine how to output a stack variable If not implemented, then all operands are sp based by default. Implement this event only if some stack references use frame pointer instead of stack pointer.
| ||||||||||||||
ev_can_have_type |
Can the operand have a type as offset, segment, decimal, etc? (for example, a register AX can't have a type, meaning that the user can't change its representation. see bytes.hpp for information about types and flags)
| ||||||||||||||
ev_cmp_operands |
Compare instruction operands.
| ||||||||||||||
ev_adjust_refinfo |
Called from apply_fixup before converting operand to reference. Can be used for changing the reference info.
| ||||||||||||||
ev_get_operand_string |
Request text string for operand (cli, java, ...).
| ||||||||||||||
ev_get_reg_name |
Generate text representation of a register. Most processor modules do not need to implement this callback. It is useful only if processor_t::reg_names[reg] does not provide the correct register name.
| ||||||||||||||
ev_str2reg |
Convert a register name to a register number. The register number is the register index in the processor_t::reg_names array Most processor modules do not need to implement this callback It is useful only if processor_t::reg_names[reg] does not provide the correct register names
| ||||||||||||||
ev_get_autocmt |
Callback: get dynamic auto comment. Will be called if the autocomments are enabled and the comment retrieved from ida.int starts with '$!'. 'insn' contains valid info.
| ||||||||||||||
ev_get_bg_color |
Get item background color. Plugins can hook this callback to color disassembly lines dynamically
| ||||||||||||||
ev_is_jump_func |
Is the function a trivial "jump" function?.
| ||||||||||||||
ev_func_bounds |
find_func_bounds() finished its work. The module may fine tune the function bounds
| ||||||||||||||
ev_verify_sp |
All function instructions have been analyzed. Now the processor module can analyze the stack pointer for the whole function
| ||||||||||||||
ev_verify_noreturn |
The kernel wants to set 'noreturn' flags for a function.
| ||||||||||||||
ev_create_func_frame |
Create a function frame for a newly created function Set up frame size, its attributes etc.
| ||||||||||||||
ev_get_frame_retsize |
Get size of function return address in bytes If this eveny is not implemented, the kernel will assume.
| ||||||||||||||
ev_get_stkvar_scale_factor |
Should stack variable references be multiplied by a coefficient before being used in the stack frame?. Currently used by TMS320C55 because the references into the stack should be multiplied by 2
| ||||||||||||||
ev_demangle_name |
Demangle a C++ (or another language) name into a user-readable string. This event is called by demangle_name()
| ||||||||||||||
ev_add_cref |
A code reference is being created.
| ||||||||||||||
ev_add_dref |
A data reference is being created.
| ||||||||||||||
ev_del_cref |
A code reference is being deleted.
| ||||||||||||||
ev_del_dref |
A data reference is being deleted.
| ||||||||||||||
ev_coagulate_dref |
Data reference is being analyzed. plugin may correct 'code_ea' (e.g. for thumb mode refs, we clear the last bit)
| ||||||||||||||
ev_may_show_sreg |
The kernel wants to display the segment registers in the messages window.
| ||||||||||||||
ev_loader_elf_machine |
ELF loader machine type checkpoint. A plugin check of the 'machine_type'. If it is the desired one, the the plugin fills 'p_procname' with the processor name (one of the names present in processor_t::psnames). 'p_pd' is used to handle relocations, otherwise can be left untouched. This event occurs for each newly loaded ELF file
| ||||||||||||||
ev_auto_queue_empty |
One analysis queue is empty.
| ||||||||||||||
ev_validate_flirt_func |
Flirt has recognized a library function. This callback can be used by a plugin or proc module to intercept it and validate such a function.
| ||||||||||||||
ev_adjust_libfunc_ea |
Called when a signature module has been matched against bytes in the database. This is used to compute the offset at which a particular module's libfunc should be applied.
| ||||||||||||||
ev_assemble |
Assemble an instruction. (display a warning if an error is found).
| ||||||||||||||
ev_extract_address |
Extract address from a string.
| ||||||||||||||
ev_realcvt |
Floating point -> IEEE conversion.
| ||||||||||||||
ev_gen_asm_or_lst |
Callback: generating asm or lst file. The kernel calls this callback twice, at the beginning and at the end of listing generation. The processor module can intercept this event and adjust its output
| ||||||||||||||
ev_gen_map_file |
Generate map file. If not implemented the kernel itself will create the map file.
| ||||||||||||||
ev_create_flat_group |
Create special segment representing the flat group. | ||||||||||||||
ev_getreg |
IBM PC only internal request, should never be used for other purpose Get register value by internal index.
| ||||||||||||||
ev_last_cb_before_debugger |
START OF DEBUGGER CALLBACKS. | ||||||||||||||
ev_next_exec_insn |
Get next address to be executed This function must return the next address to be executed. If the instruction following the current one is executed, then it must return BADADDR Usually the instructions to consider are: jumps, branches, calls, returns. This function is essential if the 'single step' is not supported in hardware.
| ||||||||||||||
ev_calc_step_over |
Calculate the address of the instruction which will be executed after "step over". The kernel will put a breakpoint there. If the step over is equal to step into or we can not calculate the address, return BADADDR.
| ||||||||||||||
ev_calc_next_eas |
Calculate list of addresses the instruction in 'insn' may pass control to. This callback is required for source level debugging.
| ||||||||||||||
ev_get_macro_insn_head |
Calculate the start of a macro instruction. This notification is called if IP points to the middle of an instruction
| ||||||||||||||
ev_get_dbr_opnum |
Get the number of the operand to be displayed in the debugger reference view (text mode).
| ||||||||||||||
ev_insn_reads_tbit |
Check if insn will read the TF bit.
| ||||||||||||||
ev_clean_tbit |
Clear the TF bit after an insn like pushf stored it in memory.
| ||||||||||||||
ev_get_idd_opinfo |
Get operand information. This callback is used to calculate the operand value for double clicking on it, hints, etc.
| ||||||||||||||
ev_get_reg_info |
Get register information by its name. example: "ah" returns:
This callback may be unimplemented if the register names are all present in processor_t::reg_names and they all have the same size
| ||||||||||||||
ev_setup_til |
Setup default type libraries. (called after loading a new file into the database). The processor module may load tils, setup memory model and perform other actions required to set up the type system. This is an optional callback.
| ||||||||||||||
ev_get_abi_info |
Get all possible ABI names and optional extensions for given compiler abiname/option is a string entirely consisting of letters, digits and underscore.
| ||||||||||||||
ev_max_ptr_size |
Get maximal size of a pointer in bytes.
| ||||||||||||||
ev_get_default_enum_size |
Get default enum size.
| ||||||||||||||
ev_get_cc_regs |
Get register allocation convention for given calling convention.
| ||||||||||||||
ev_get_stkarg_offset |
Get offset from SP to the first stack argument. For example: pc: 0, hppa: -0x34, ppc: 0x38
| ||||||||||||||
ev_shadow_args_size |
Get size of shadow args in bytes.
| ||||||||||||||
ev_get_simd_types |
Get SIMD-related types according to given attributes ant/or argument location.
| ||||||||||||||
ev_calc_cdecl_purged_bytes |
Calculate number of purged bytes after call.
| ||||||||||||||
ev_calc_purged_bytes |
Calculate number of purged bytes by the given function type.
| ||||||||||||||
ev_calc_retloc |
Calculate return value location.
| ||||||||||||||
ev_calc_arglocs |
Calculate function argument locations. This callback should fill retloc, all arglocs, and stkargs. This callback supersedes calc_argloc2. This callback is never called for CM_CC_SPECIAL functions.
| ||||||||||||||
ev_calc_varglocs |
Calculate locations of the arguments that correspond to '...'.
| ||||||||||||||
ev_adjust_argloc |
Adjust argloc according to its type/size and platform endianess.
| ||||||||||||||
ev_lower_func_type |
Get function arguments which should be converted to pointers when lowering function prototype. Processor module can also modify 'fti' in order to make a non-standard convertion for some of the arguments.
| ||||||||||||||
ev_equal_reglocs |
Are 2 register arglocs the same?. We need this callback for the pc module.
| ||||||||||||||
ev_use_stkarg_type |
Use information about a stack argument.
| ||||||||||||||
ev_use_regarg_type |
Use information about register argument.
| ||||||||||||||
ev_use_arg_types |
Use information about callee arguments.
| ||||||||||||||
ev_arg_addrs_ready |
Argument address info is ready.
| ||||||||||||||
ev_decorate_name |
Decorate/undecorate a C symbol name.
| ||||||||||||||
ev_loader |
This code and higher ones are reserved for the loaders. The arguments and the return values are defined by the loaders |
|
inline |
Get segment bitness.
2 | PR_DEFSEG64 |
1 | PR_DEFSEG32 |
0 | none specified |
|
inline |
Get the stack variable scaling factor.
Useful for processors who refer to the stack with implicit scaling factor. TMS320C55 for example: SP(#1) really refers to (SP+2)
|
inline |
Does the given value specify a valid instruction for this instruction set?.
See instruc_start and instruc_end
int32 processor_t::cnbits |
Number of bits in a byte for code segments (usually 8).
IDA supports values up to 32 bits
int32 processor_t::dnbits |
Number of bits in a byte for non-code segments (usually 8).
IDA supports values up to 32 bits
const char* const* processor_t::psnames |
short processor names (NULL terminated).
Each name should be shorter than 9 characters
const char* const* processor_t::plnames |
long processor names (NULL terminated).
No restriction on name lengths.
const asm_t* const* processor_t::assemblers |
pointer to array of target assembler definitions.
You may change this array when current processor is changed. (NULL terminated)
const bytes_t* processor_t::codestart |
Array of typical code start sequences.
This array is used when a new file is loaded to find the beginnings of code sequences. This array is terminated with a zero length item.
const bytes_t* processor_t::retcodes |
Array of 'return' instruction opcodes.
This array is used to determine form of autogenerated locret_... labels. The last item of it should be { 0, NULL } This array may be NULL Better way of handling return instructions is to define the is_ret_insn callback in the notify() function
char processor_t::real_width[4] |
Number of digits in floating numbers after the decimal point.
If an element of this array equals 0, then the corresponding floating point data is not used for the processor. This array is used to align numbers in the output.
Example: IBM PC module has { 0,7,15,19 }