Functions that deal with C-like expressions and built-in IDC language. More...
Classes | |
class | idc_value_t |
Class to hold idc values. More... | |
struct | idc_global_t |
Global idc variable. More... | |
struct | ext_idcfunc_t |
Element of functions table. See idcfuncs_t::funcs. More... | |
struct | idcfuncs_t |
Describes an array of IDC functions. More... | |
struct | highlighter_cbs_t |
struct | syntax_highlighter_t |
Base class for syntax highligters. More... | |
struct | extlang_t |
External language (to support third party language interpreters) More... | |
struct | extlang_visitor_t |
struct | idc_resolver_t |
Compile text with IDC function(s). More... | |
Macros | |
#define | IDC_LANG_EXT "idc" |
IDC script extension. | |
#define | VT_LONG 2 |
Integer (see idc_value_t::num) | |
#define | VT_FLOAT 3 |
Floating point (see idc_value_t::e) | |
#define | VT_WILD 4 |
Function with arbitrary number of arguments. More... | |
#define | VT_OBJ 5 |
Object (see idc_value_t::obj) | |
#define | VT_FUNC 6 |
Function (see idc_value_t::funcidx) | |
#define | VT_STR 7 |
String (see qstr() and similar functions) | |
#define | VT_PVOID 8 |
void * | |
#define | VT_INT64 9 |
i64 | |
#define | VT_REF 10 |
Reference. | |
#define | EXTFUN_BASE 0x0001 |
requires open database. | |
#define | EXTFUN_NORET 0x0002 |
does not return. More... | |
#define | EXTFUN_SAFE 0x0004 |
thread safe function. More... | |
#define | EXTLANG_IDC 0x01 |
#define | EXTLANG_NS_AWARE 0x02 |
Namespace-aware (see above.) | |
Functions | |
idaman THREAD_SAFE error_t ida_export | idcv_long (idc_value_t *v) |
Convert IDC variable to a long (32/64bit) number. More... | |
idaman THREAD_SAFE error_t ida_export | idcv_int64 (idc_value_t *v) |
Convert IDC variable to a 64bit number. More... | |
idaman THREAD_SAFE error_t ida_export | idcv_num (idc_value_t *v) |
Convert IDC variable to a long number. More... | |
idaman THREAD_SAFE error_t ida_export | idcv_string (idc_value_t *v) |
Convert IDC variable to a text string. | |
idaman THREAD_SAFE error_t ida_export | idcv_float (idc_value_t *v) |
Convert IDC variable to a floating point. | |
idaman THREAD_SAFE error_t ida_export | idcv_object (idc_value_t *v, const idc_class_t *icls=nullptr) |
Create an IDC object. More... | |
idaman THREAD_SAFE error_t ida_export | move_idcv (idc_value_t *dst, idc_value_t *src) |
Move 'src' to 'dst'. More... | |
idaman THREAD_SAFE error_t ida_export | copy_idcv (idc_value_t *dst, const idc_value_t &src) |
Copy 'src' to 'dst'. More... | |
idaman THREAD_SAFE error_t ida_export | deep_copy_idcv (idc_value_t *dst, const idc_value_t &src) |
Deep copy an IDC object. More... | |
idaman THREAD_SAFE void ida_export | free_idcv (idc_value_t *v) |
Free storage used by VT_STR/VT_OBJ IDC variables. More... | |
idaman THREAD_SAFE void ida_export | swap_idcvs (idc_value_t *v1, idc_value_t *v2) |
Swap 2 variables. | |
idaman THREAD_SAFE error_t ida_export | get_idcv_class_name (qstring *out, const idc_value_t *obj) |
Retrieves the IDC object class name. More... | |
idaman THREAD_SAFE error_t ida_export | get_idcv_attr (idc_value_t *res, const idc_value_t *obj, const char *attr, bool may_use_getattr=false) |
Get an object attribute. More... | |
idaman THREAD_SAFE error_t ida_export | set_idcv_attr (idc_value_t *obj, const char *attr, const idc_value_t &value, bool may_use_setattr=false) |
Set an object attribute. More... | |
idaman THREAD_SAFE error_t ida_export | del_idcv_attr (idc_value_t *obj, const char *attr) |
Delete an object attribute. More... | |
Enumerate object attributes | |
#define | VARSLICE_SINGLE 0x0001 |
return single index (i2 is ignored) | |
idaman THREAD_SAFE const char *ida_export | first_idcv_attr (const idc_value_t *obj) |
idaman THREAD_SAFE const char *ida_export | last_idcv_attr (const idc_value_t *obj) |
idaman THREAD_SAFE const char *ida_export | next_idcv_attr (const idc_value_t *obj, const char *attr) |
idaman THREAD_SAFE const char *ida_export | prev_idcv_attr (const idc_value_t *obj, const char *attr) |
idaman bool ida_export | print_idcv (qstring *out, const idc_value_t &v, const char *name=nullptr, int indent=0) |
Get text representation of idc_value_t. | |
idaman THREAD_SAFE error_t ida_export | get_idcv_slice (idc_value_t *res, const idc_value_t *v, uval_t i1, uval_t i2, int flags=0) |
Get slice. More... | |
idaman THREAD_SAFE error_t ida_export | set_idcv_slice (idc_value_t *v, uval_t i1, uval_t i2, const idc_value_t &in, int flags=0) |
Set slice. More... | |
idaman THREAD_SAFE idc_class_t *ida_export | add_idc_class (const char *name, const idc_class_t *super=nullptr) |
Create a new IDC class. More... | |
idaman THREAD_SAFE idc_class_t *ida_export | find_idc_class (const char *name) |
Find an existing IDC class by its name. More... | |
idaman THREAD_SAFE bool ida_export | set_idc_method (idc_class_t *icls, const char *fullfuncname) |
Set an IDC class method. More... | |
Set user-defined functions to work with object attributes. | |
If the function name is nullptr, the definitions are removed.
| |
#define | VREF_LOOP 0x0000 |
dereference until we get a non VT_REF | |
#define | VREF_ONCE 0x0001 |
dereference only once, do not loop | |
#define | VREF_COPY 0x0002 |
copy the result to the input var (v) | |
#define | eExecThrow 90 |
See return value of idc_func_t. | |
#define | HF_FIRST HF_KEYWORD1 |
#define | CPL_DEL_MACROS 0x0001 |
delete macros at the end of compilation | |
#define | CPL_USE_LABELS 0x0002 |
allow program labels in the script | |
#define | CPL_ONLY_SAFE 0x0004 |
allow calls of only thread-safe functions | |
enum | syntax_highlight_style { HF_DEFAULT = 0 , HF_KEYWORD1 = 1 , HF_KEYWORD2 = 2 , HF_KEYWORD3 = 3 , HF_STRING = 4 , HF_COMMENT = 5 , HF_PREPROC = 6 , HF_NUMBER = 7 , HF_MAX } |
Possible syntax element highlighting style names. | |
enum | find_extlang_kind_t { FIND_EXTLANG_BY_EXT , FIND_EXTLANG_BY_NAME , FIND_EXTLANG_BY_IDX } |
typedef qvector< idc_global_t > | idc_vars_t |
vector of global idc variables | |
typedef error_t idaapi | idc_func_t(idc_value_t *argv, idc_value_t *r) |
Prototype of an external IDC function (implemented in C). More... | |
typedef qvector< extlang_t * > | extlangs_t |
vector of external language descriptions | |
typedef qrefcnt_t< extlang_t > | extlang_object_t |
idaman THREAD_SAFE const char *ida_export | set_idc_getattr (idc_class_t *icls, const char *fullfuncname) |
idaman THREAD_SAFE const char *ida_export | set_idc_setattr (idc_class_t *icls, const char *fullfuncname) |
idaman THREAD_SAFE const char *ida_export | set_idc_dtor (idc_class_t *icls, const char *fullfuncname) |
Set a destructor for an idc class. More... | |
idaman THREAD_SAFE idc_value_t *ida_export | deref_idcv (idc_value_t *v, int vref_flags) |
Dereference a VT_REF variable. More... | |
idaman THREAD_SAFE bool ida_export | create_idcv_ref (idc_value_t *ref, const idc_value_t *v) |
Create a variable reference. More... | |
idaman THREAD_SAFE idc_value_t *ida_export | add_idc_gvar (const char *name) |
Add global IDC variable. More... | |
idaman THREAD_SAFE idc_value_t *ida_export | find_idc_gvar (const char *name) |
Find an existing global IDC variable by its name. More... | |
idaman THREAD_SAFE bool ida_export | add_idc_func (const ext_idcfunc_t &func) |
Add an IDC function. More... | |
idaman THREAD_SAFE bool ida_export | del_idc_func (const char *name) |
Delete an IDC function. | |
idaman THREAD_SAFE bool ida_export | find_idc_func (qstring *out, const char *prefix, int n=0) |
idaman void *ida_export | get_current_extlang (void) |
Get current active external language. | |
const extlang_object_t | get_extlang (void) |
idaman ssize_t ida_export | install_extlang (extlang_t *el) |
Install an external language interpreter. More... | |
idaman bool ida_export | remove_extlang (extlang_t *el) |
Uninstall an external language interpreter. More... | |
idaman bool ida_export | select_extlang (extlang_t *el) |
Selects the external language interpreter. More... | |
idaman ssize_t ida_export | for_all_extlangs (extlang_visitor_t &ev, bool select=false) |
Process all registered extlangs. | |
idaman void *ida_export | find_extlang (const void *str, find_extlang_kind_t kind) |
extlang_object_t | find_extlang_by_ext (const char *ext) |
Get the extlang that can handle the given file extension. | |
extlang_object_t | find_extlang_by_name (const char *name) |
Find an extlang by name. | |
extlang_object_t | find_extlang_by_index (size_t idx) |
Find an extlang by index. | |
idaman THREAD_SAFE bool ida_export | set_header_path (const char *path, bool add) |
Set or append a header path. More... | |
idaman THREAD_SAFE char *ida_export | get_idc_filename (char *buf, size_t bufsize, const char *file) |
Get full name of IDC file name. More... | |
idaman THREAD_SAFE bool ida_export | exec_system_script (const char *file, bool complain_if_no_file=true) |
Compile and execute "main" function from system file. More... | |
idaman bool ida_export | eval_expr_long (sval_t *res, ea_t where, const char *line, qstring *errbuf=nullptr) |
Compile and calculate an expression. More... | |
bool idaapi | eval_expr_long (uval_t *res, ea_t where, const char *line, qstring *errbuf=nullptr) |
See eval_expr_long() | |
idaman bool ida_export | eval_expr (idc_value_t *rv, ea_t where, const char *line, qstring *errbuf=nullptr) |
Compile and calculate an expression. More... | |
idaman bool ida_export | eval_idc_expr (idc_value_t *rv, ea_t where, const char *buf, qstring *errbuf=nullptr) |
Same as eval_expr(), but will always use the IDC interpreter regardless of the currently installed extlang. More... | |
idaman THREAD_SAFE bool ida_export | compile_idc_file (const char *file, qstring *errbuf=nullptr, int cpl_flags=CPL_DEL_MACROS|CPL_USE_LABELS) |
idaman THREAD_SAFE bool ida_export | compile_idc_text (const char *line, qstring *errbuf=nullptr, idc_resolver_t *resolver=nullptr, bool only_safe_funcs=false) |
idaman bool ida_export | compile_idc_snippet (const char *func, const char *text, qstring *errbuf=nullptr, idc_resolver_t *resolver=nullptr, bool only_safe_funcs=false) |
Compile text with IDC statements. More... | |
idaman bool ida_export | call_idc_func (idc_value_t *result, const char *fname, const idc_value_t args[], size_t argsnum, qstring *errbuf=nullptr, idc_resolver_t *resolver=nullptr) |
Execute an IDC function. More... | |
THREAD_SAFE bool | exec_idc_script (idc_value_t *result, const char *path, const char *func, const idc_value_t args[], size_t argsnum, qstring *errbuf=nullptr) |
Compile and execute IDC function(s) from file. More... | |
idaman bool ida_export | eval_idc_snippet (idc_value_t *result, const char *line, qstring *errbuf=nullptr, idc_resolver_t *resolver=nullptr) |
Compile and execute IDC statements or expressions. More... | |
idaman void ida_export | setup_lowcnd_regfuncs (idc_func_t *getreg, idc_func_t *setreg) |
Setup lowcnd callbacks to read/write registers. More... | |
THREAD_SAFE bool | get_idptype_and_data (int *vtype, const void **vdata, const idc_value_t &v) |
Extract type & data from the idc_value_t instance that was passed to parse_config_value(). More... | |
idaman error_t ida_export | throw_idc_exception (idc_value_t *r, const char *desc) |
Create an idc execution exception object. More... | |
Detailed Description
Functions that deal with C-like expressions and built-in IDC language.
Functions marked THREAD_SAFE may be called from any thread. No simultaneous calls should be made for the same variable. We protect only global structures, individual variables must be protected manually.
Macro Definition Documentation
◆ VT_WILD
#define VT_WILD 4 |
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.
◆ EXTFUN_NORET
#define EXTFUN_NORET 0x0002 |
does not return.
the interpreter may clean up its state before calling it.
◆ EXTFUN_SAFE
#define EXTFUN_SAFE 0x0004 |
thread safe function.
may be called from any thread.
Typedef Documentation
◆ idc_func_t
typedef error_t idaapi idc_func_t(idc_value_t *argv, idc_value_t *r) |
Prototype of an external IDC function (implemented in C).
- Parameters
-
argv vector of input arguments. IDA will convert all arguments to types specified by ext_idcfunc_t::args, except for VT_WILD r return value of the function or exception
- Returns
- 0 if ok, all other values indicate error. the error code must be set with set_qerrno():
- eExecThrow - a new exception has been generated, see 'r'
- other values - runtime error has occurred
Function Documentation
◆ idcv_long()
idaman THREAD_SAFE error_t ida_export idcv_long | ( | idc_value_t * | v | ) |
Convert IDC variable to a long (32/64bit) number.
- Returns
- v = 0 if impossible to convert to long
◆ idcv_int64()
idaman THREAD_SAFE error_t ida_export idcv_int64 | ( | idc_value_t * | v | ) |
Convert IDC variable to a 64bit number.
- Returns
- v = 0 if impossible to convert to int64
◆ idcv_num()
idaman THREAD_SAFE error_t ida_export idcv_num | ( | idc_value_t * | v | ) |
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
◆ idcv_object()
idaman THREAD_SAFE error_t ida_export idcv_object | ( | idc_value_t * | v, |
const idc_class_t * | icls = nullptr |
||
) |
Create an IDC object.
The original value of 'v' is discarded (freed).
- Parameters
-
v variable to hold the object. any previous value will be cleaned 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
◆ move_idcv()
idaman THREAD_SAFE error_t ida_export move_idcv | ( | idc_value_t * | dst, |
idc_value_t * | src | ||
) |
Move 'src' to 'dst'.
This function is more effective than copy_idcv since it never copies big amounts of data.
◆ copy_idcv()
idaman THREAD_SAFE error_t ida_export copy_idcv | ( | idc_value_t * | dst, |
const idc_value_t & | src | ||
) |
Copy 'src' to 'dst'.
For idc objects only a reference is copied.
◆ deep_copy_idcv()
idaman THREAD_SAFE error_t ida_export deep_copy_idcv | ( | idc_value_t * | dst, |
const idc_value_t & | src | ||
) |
Deep copy an IDC object.
This function performs deep copy of idc objects. If 'src' is not an object, copy_idcv() will be called
◆ free_idcv()
idaman THREAD_SAFE void ida_export free_idcv | ( | idc_value_t * | v | ) |
◆ get_idcv_class_name()
idaman THREAD_SAFE error_t ida_export get_idcv_class_name | ( | qstring * | out, |
const idc_value_t * | obj | ||
) |
Retrieves the IDC object class name.
- Parameters
-
out qstring ptr for the class name. Can be nullptr. obj class instance variable
- Returns
- error code, eOk on success
◆ get_idcv_attr()
idaman THREAD_SAFE error_t ida_export get_idcv_attr | ( | idc_value_t * | res, |
const idc_value_t * | obj, | ||
const char * | attr, | ||
bool | may_use_getattr = false |
||
) |
Get an object attribute.
- Parameters
-
res buffer for the attribute value obj variable that holds an object reference. if obj is nullptr it searches global variables, then user functions attr attribute name may_use_getattr may call getattr functions to calculate the attribute if it does not exist
- Returns
- error code, eOk on success
◆ set_idcv_attr()
idaman THREAD_SAFE error_t ida_export set_idcv_attr | ( | idc_value_t * | obj, |
const char * | attr, | ||
const idc_value_t & | value, | ||
bool | may_use_setattr = false |
||
) |
Set an object attribute.
- Parameters
-
obj variable that holds an object reference. if obj is nullptr then it tries to modify a global variable with the attribute name attr attribute name value new attribute value may_use_setattr may call setattr functions for the class
- Returns
- error code, eOk on success
◆ del_idcv_attr()
idaman THREAD_SAFE error_t ida_export del_idcv_attr | ( | idc_value_t * | obj, |
const char * | attr | ||
) |
Delete an object attribute.
- Parameters
-
obj variable that holds an object reference attr attribute name
- Returns
- error code, eOk on success
◆ get_idcv_slice()
idaman THREAD_SAFE error_t ida_export get_idcv_slice | ( | idc_value_t * | res, |
const idc_value_t * | v, | ||
uval_t | i1, | ||
uval_t | i2, | ||
int | flags = 0 |
||
) |
Get slice.
- Parameters
-
res output variable that will contain the slice v input variable (string or object) i1 slice start index i2 slice end index (excluded) flags IDC variable slice flags or 0
- Returns
- eOk if success
◆ set_idcv_slice()
idaman THREAD_SAFE error_t ida_export set_idcv_slice | ( | idc_value_t * | v, |
uval_t | i1, | ||
uval_t | i2, | ||
const idc_value_t & | in, | ||
int | flags = 0 |
||
) |
Set slice.
- Parameters
-
v variable to modify (string or object) i1 slice start index i2 slice end index (excluded) in new value for the slice flags IDC variable slice flags or 0
- Returns
- eOk on success
◆ add_idc_class()
idaman THREAD_SAFE idc_class_t *ida_export add_idc_class | ( | const char * | name, |
const idc_class_t * | super = nullptr |
||
) |
Create a new IDC class.
- Parameters
-
name name of the new class 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.
◆ find_idc_class()
idaman THREAD_SAFE idc_class_t *ida_export find_idc_class | ( | const char * | name | ) |
Find an existing IDC class by its name.
- Parameters
-
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()
◆ set_idc_method()
idaman THREAD_SAFE bool ida_export set_idc_method | ( | idc_class_t * | icls, |
const char * | fullfuncname | ||
) |
Set an IDC class method.
- Parameters
-
icls pointer to the class fullfuncname name of the function to call. use full method name: classname.funcname
- Return values
-
true success false the function could not be found
◆ set_idc_dtor()
idaman THREAD_SAFE const char *ida_export set_idc_dtor | ( | idc_class_t * | icls, |
const char * | fullfuncname | ||
) |
Set a destructor for an idc class.
The destructor is called before deleting any object of the specified class. Exceptions that escape the destructor are silently ignored, runtime errors too.
◆ deref_idcv()
idaman THREAD_SAFE idc_value_t *ida_export deref_idcv | ( | idc_value_t * | v, |
int | vref_flags | ||
) |
Dereference a VT_REF variable.
- Parameters
-
v variable to dereference 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"
◆ create_idcv_ref()
idaman THREAD_SAFE bool ida_export create_idcv_ref | ( | idc_value_t * | ref, |
const idc_value_t * | v | ||
) |
Create a variable reference.
Currently only references to global variables can be created.
- Parameters
-
ref ptr to the result v variable to reference
- Returns
- success
◆ add_idc_gvar()
idaman THREAD_SAFE idc_value_t *ida_export add_idc_gvar | ( | const char * | name | ) |
Add global IDC variable.
- Parameters
-
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.
◆ find_idc_gvar()
idaman THREAD_SAFE idc_value_t *ida_export find_idc_gvar | ( | const char * | name | ) |
Find an existing global IDC variable by its name.
- Parameters
-
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
◆ add_idc_func()
idaman THREAD_SAFE bool ida_export add_idc_func | ( | const ext_idcfunc_t & | func | ) |
Add an IDC function.
This function does not modify the predefined kernel functions. Example:
- Parameters
-
func function description block.
- Note
- If the function already exists, it will be replaced by the new function
- Returns
- success
◆ install_extlang()
Install an external language interpreter.
Any previously registered interpreter will be automatically unregistered. The installed extlang can be used in select_extlang().
- Parameters
-
el description of the new language. must point to static storage.
- Returns
- extlang id; -1 means failure and will happen if the extlang has already been installed
◆ remove_extlang()
idaman bool ida_export remove_extlang | ( | extlang_t * | el | ) |
Uninstall an external language interpreter.
- Returns
- success
◆ select_extlang()
idaman bool ida_export select_extlang | ( | extlang_t * | el | ) |
Selects the external language interpreter.
The specified extlang must be registered before selecting it. It will be used to evaluate expressions entered in dialog boxes. It will also replace the eval_expr() and eval_expr_long() functions.
- Returns
- success
◆ set_header_path()
idaman THREAD_SAFE bool ida_export set_header_path | ( | const char * | path, |
bool | add | ||
) |
Set or append a header path.
IDA looks for the include files in the appended header paths, then in the ida executable directory.
- Parameters
-
path list of directories to add (separated by ';') may be nullptr, in this case nothing is added add true: append. false: remove old paths.
- Return values
-
true success false no memory
◆ get_idc_filename()
idaman THREAD_SAFE char *ida_export get_idc_filename | ( | char * | buf, |
size_t | bufsize, | ||
const char * | file | ||
) |
Get full name of IDC file name.
Search for file in list of include directories, IDCPATH directory and system directories.
- Parameters
-
buf buffer for the answer bufsize size of buffer file file name without full path
- Returns
- nullptr is file not found. otherwise returns pointer to buf
◆ exec_system_script()
idaman THREAD_SAFE bool ida_export exec_system_script | ( | const char * | file, |
bool | complain_if_no_file = true |
||
) |
Compile and execute "main" function from system file.
- Parameters
-
file file name with IDC function(s). The file will be searched using get_idc_filename(). complain_if_no_file - 1: display warning if the file is not found
- 0: don't complain if file doesn't exist
- Return values
-
1 ok, file is compiled and executed 0 failure, compilation or execution error, warning is displayed
◆ eval_expr_long()
idaman bool ida_export eval_expr_long | ( | sval_t * | res, |
ea_t | where, | ||
const char * | line, | ||
qstring * | errbuf = nullptr |
||
) |
Compile and calculate an expression.
- Parameters
-
res pointer to result. The result will be converted to 32/64bit number. Use eval_expr() if you need the result of another type. where the current linear address in the addressing space of the program being disassembled. it will be used to resolve names of local variables, etc. if not applicable, then should be BADADDR line a text line with IDC expression [out] errbuf buffer for the error message
- Return values
-
true ok false error, see errbuf
◆ eval_expr()
idaman bool ida_export eval_expr | ( | idc_value_t * | rv, |
ea_t | where, | ||
const char * | line, | ||
qstring * | errbuf = nullptr |
||
) |
Compile and calculate an expression.
- Parameters
-
rv pointer to the result 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. line the expression to evaluate [out] errbuf buffer for the error message
- Return values
-
true ok false error, see errbuf
◆ eval_idc_expr()
idaman bool ida_export eval_idc_expr | ( | idc_value_t * | rv, |
ea_t | where, | ||
const char * | buf, | ||
qstring * | errbuf = nullptr |
||
) |
Same as eval_expr(), but will always use the IDC interpreter regardless of the currently installed extlang.
◆ compile_idc_snippet()
idaman bool ida_export compile_idc_snippet | ( | const char * | func, |
const char * | text, | ||
qstring * | errbuf = nullptr , |
||
idc_resolver_t * | resolver = nullptr , |
||
bool | only_safe_funcs = false |
||
) |
Compile text with IDC statements.
- Parameters
-
func name of the function to create out of the snippet text text to compile [out] errbuf buffer for the error message 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. only_safe_funcs if true, any calls to functions without EXTFUN_SAFE flag will lead to a compilation error.
- Return values
-
true ok false error, see errbuf
◆ call_idc_func()
idaman bool ida_export call_idc_func | ( | idc_value_t * | result, |
const char * | fname, | ||
const idc_value_t | args[], | ||
size_t | argsnum, | ||
qstring * | errbuf = nullptr , |
||
idc_resolver_t * | resolver = nullptr |
||
) |
Execute an IDC function.
- Parameters
-
[out] result pointer to idc_value_t to hold the return value of the function. If execution fails, this variable will contain the exception information. Can be nullptr if return value is not required. fname function name. User-defined functions, built-in functions, and plugin-defined functions are accepted. args array of parameters argsnum number of parameters to pass to 'fname'. This number should be equal to number of parameters the function expects. [out] errbuf buffer for the error message 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.
- Return values
-
true ok false error, see errbuf
◆ exec_idc_script()
|
inline |
Compile and execute IDC function(s) from file.
- Parameters
-
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. path text file containing text of IDC functions func function name to execute args array of parameters argsnum number of parameters to pass to 'fname' This number should be equal to number of parameters the function expects. [out] errbuf buffer for the error message
- Return values
-
true ok false error, see errbuf
◆ eval_idc_snippet()
idaman bool ida_export eval_idc_snippet | ( | idc_value_t * | result, |
const char * | line, | ||
qstring * | errbuf = nullptr , |
||
idc_resolver_t * | resolver = nullptr |
||
) |
Compile and execute IDC statements or expressions.
- Parameters
-
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. line body of IDC the function [out] errbuf buffer for the error message 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.
- Returns
- success
- Note
- see also eval_idc_expr()
◆ setup_lowcnd_regfuncs()
idaman void ida_export setup_lowcnd_regfuncs | ( | idc_func_t * | getreg, |
idc_func_t * | setreg | ||
) |
Setup lowcnd callbacks to read/write registers.
These callbacks will be used by the idc engine to read/write registers while calculating low level breakpoint conditions for local debuggers.
◆ get_idptype_and_data()
|
inline |
Extract type & data from the idc_value_t instance that was passed to parse_config_value().
- Parameters
-
vtype pointer to storage that will hold the type (IDPOPT_T) vdata pointer to storage that contains the value (see IDPOPT_T for what type of data is pointed to.) v the value holder
- Returns
- true in case of success, false if 'v' is of unexpected type
◆ throw_idc_exception()
idaman error_t ida_export throw_idc_exception | ( | idc_value_t * | r, |
const char * | desc | ||
) |
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");
- Parameters
-
r object to hold the exception object desc exception description
- Returns
- eExecThrow
Generated by