IDA C++ SDK 9.2
|
Definition of the IDA database node. More...
#include <netnode.hpp>
Public Member Functions | |||||
Constructors, conversions and assignments | |||||
netnode (nodeidx_t num=BADNODE) | |||||
Constructor to create a netnode to access information about the specified linear address (possibly missing) | |||||
operator nodeidx_t () const | |||||
Conversion from netnode to a linear address. | |||||
netnode (const char *_name, size_t namlen=0, bool do_create=false) | |||||
Construct an instance of netnode class to access the specified netnode. | |||||
Create/Delete | |||||
| |||||
bool | create (const char *_name, size_t namlen=0) | ||||
Create a named netnode. | |||||
bool | create (void) | ||||
Create unnamed netnode. | |||||
void | kill (void) | ||||
Delete a netnode with all information attached to it. | |||||
Netnode names | |||||
ssize_t | get_name (qstring *buf) const | ||||
Get the netnode name. | |||||
bool | rename (const char *newname, size_t namlen=0) | ||||
Rename a netnode. | |||||
Value of netnode | |||||
ssize_t | valobj (void *buf, size_t bufsize) const | ||||
Get value of netnode. | |||||
ssize_t | valstr (qstring *buf) const | ||||
Get string value of netnode. | |||||
ssize_t | valstr (char *buf, size_t bufsize) const | ||||
bool | set (const void *value, size_t length=0) | ||||
Set value of netnode. | |||||
bool | delvalue (void) | ||||
Delete value of netnode. | |||||
bool | set_long (nodeidx_t x) | ||||
Value of netnode as a long number: | |||||
bool | value_exists (void) const | ||||
nodeidx_t | long_value (void) const | ||||
Arrays of altvals. | |||||
altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit or 32-bit values | |||||
nodeidx_t | altval (nodeidx_t alt, uchar tag=atag) const | ||||
Get altval element of the specified array. | |||||
nodeidx_t | altval_ea (ea_t ea, uchar tag=atag) const | ||||
bool | altset (nodeidx_t alt, nodeidx_t value, uchar tag=atag) | ||||
Set value of altval array. | |||||
bool | altset_ea (ea_t ea, nodeidx_t value, uchar tag=atag) | ||||
bool | altdel (nodeidx_t alt, uchar tag=atag) | ||||
Delete element of altval array. | |||||
bool | altdel_ea (ea_t ea, uchar tag=atag) | ||||
bool | easet (ea_t ea, ea_t addr, uchar tag) | ||||
Store/retrieve/delete an address value in the netnode that corresponds to an address. | |||||
ea_t | eaget (ea_t ea, uchar tag) const | ||||
bool | eadel (ea_t ea, uchar tag) | ||||
bool | easet_idx (nodeidx_t idx, ea_t addr, uchar tag) | ||||
ea_t | eaget_idx (nodeidx_t idx, uchar tag) | ||||
bool | easet_idx8 (uchar idx, ea_t addr, uchar tag) | ||||
ea_t | eaget_idx8 (uchar idx, uchar tag) const | ||||
bool | eadel_idx8 (uchar idx, uchar tag) | ||||
nodeidx_t | altfirst (uchar tag=atag) const | ||||
Get first existing element of altval array. | |||||
nodeidx_t | altnext (nodeidx_t cur, uchar tag=atag) const | ||||
Get next existing element of altval array. | |||||
nodeidx_t | altlast (uchar tag=atag) const | ||||
Get last element of altval array. | |||||
nodeidx_t | altprev (nodeidx_t cur, uchar tag=atag) const | ||||
Get previous existing element of altval array. | |||||
size_t | altshift (nodeidx_t from, nodeidx_t to, nodeidx_t size, uchar tag=atag) | ||||
Shift the altval array elements. | |||||
void | altadjust (nodeidx_t from, nodeidx_t to, nodeidx_t size, bool(idaapi *should_skip)(nodeidx_t ea)=nullptr) | ||||
Adjust values of altval arrays elements. | |||||
void | altadjust2 (nodeidx_t from, nodeidx_t to, nodeidx_t size, altadjust_visitor_t &av) | ||||
Arrays of altvals: 8-bit values | |||||
The following functions behave in the same manner as the functions described above. The only difference is that the array value is 8-bits.
| |||||
uchar | charval (nodeidx_t alt, uchar tag) const | ||||
bool | charset (nodeidx_t alt, uchar val, uchar tag) | ||||
bool | chardel (nodeidx_t alt, uchar tag) | ||||
uchar | charval_ea (ea_t ea, uchar tag) const | ||||
bool | charset_ea (ea_t ea, uchar val, uchar tag) | ||||
bool | chardel_ea (ea_t ea, uchar tag) | ||||
nodeidx_t | charfirst (uchar tag) const | ||||
nodeidx_t | charnext (nodeidx_t cur, uchar tag) const | ||||
nodeidx_t | charlast (uchar tag) const | ||||
nodeidx_t | charprev (nodeidx_t cur, uchar tag) const | ||||
size_t | charshift (nodeidx_t from, nodeidx_t to, nodeidx_t size, uchar tag) | ||||
Arrays of altvals: 8-bit indexes | |||||
Another set of functions to work with altvals. The only difference is that the array index is 8-bits, and therefore the array may contain up to 256 elements only.
| |||||
nodeidx_t | altval_idx8 (uchar alt, uchar tag) const | ||||
bool | altset_idx8 (uchar alt, nodeidx_t val, uchar tag) | ||||
bool | altdel_idx8 (uchar alt, uchar tag) | ||||
nodeidx_t | altfirst_idx8 (uchar tag) const | ||||
nodeidx_t | altnext_idx8 (uchar cur, uchar tag) const | ||||
nodeidx_t | altlast_idx8 (uchar tag) const | ||||
nodeidx_t | altprev_idx8 (uchar cur, uchar tag) const | ||||
More altvals | |||||
Another set of functions to work with altvals.
| |||||
uchar | charval_idx8 (uchar alt, uchar tag) const | ||||
bool | charset_idx8 (uchar alt, uchar val, uchar tag) | ||||
bool | chardel_idx8 (uchar alt, uchar tag) | ||||
nodeidx_t | charfirst_idx8 (uchar tag) const | ||||
nodeidx_t | charnext_idx8 (uchar cur, uchar tag) const | ||||
nodeidx_t | charlast_idx8 (uchar tag) const | ||||
nodeidx_t | charprev_idx8 (uchar cur, uchar tag) const | ||||
Delete altvals | |||||
| |||||
bool | altdel (void) | ||||
Delete all elements of altval array. | |||||
bool | altdel_all (uchar tag=atag) | ||||
Delete all elements of the specified altval array. | |||||
Arrays of supvals | |||||
supvals: an array of arbitrary sized objects. (size of each object is limited by MAXSPECSIZE). indexes in this array may be 8-bit or 32-bit values. | |||||
ssize_t | supval (nodeidx_t alt, void *buf, size_t bufsize, uchar tag=stag) const | ||||
Get value of the specified supval array element. | |||||
ssize_t | supval_ea (ea_t ea, void *buf, size_t bufsize, uchar tag=stag) const | ||||
ssize_t | supstr (qstring *buf, nodeidx_t alt, uchar tag=stag) const | ||||
Get string value of the specified supval array element. | |||||
ssize_t | supstr_ea (qstring *buf, ea_t ea, uchar tag=stag) const | ||||
ssize_t | supstr (nodeidx_t alt, char *buf, size_t bufsize, uchar tag=stag) const | ||||
ssize_t | supstr_ea (ea_t ea, char *buf, size_t bufsize, uchar tag=stag) const | ||||
bool | supset (nodeidx_t alt, const void *value, size_t length=0, uchar tag=stag) | ||||
Set value of supval array element. | |||||
bool | supset_ea (ea_t ea, const void *value, size_t length=0, uchar tag=stag) | ||||
bool | supdel (nodeidx_t alt, uchar tag=stag) | ||||
Delete supval element. | |||||
bool | supdel_ea (ea_t ea, uchar tag=stag) | ||||
nodeidx_t | lower_bound (nodeidx_t cur, uchar tag=stag) const | ||||
Get lower bound of existing elements of supval array. | |||||
nodeidx_t | lower_bound_ea (ea_t ea, uchar tag=stag) const | ||||
nodeidx_t | supfirst (uchar tag=stag) const | ||||
Get first existing element of supval array. | |||||
nodeidx_t | supnext (nodeidx_t cur, uchar tag=stag) const | ||||
Get next existing element of supval array. | |||||
nodeidx_t | suplast (uchar tag=stag) const | ||||
Get last existing element of supval array. | |||||
nodeidx_t | supprev (nodeidx_t cur, uchar tag=stag) const | ||||
Get previous existing element of supval array. | |||||
size_t | supshift (nodeidx_t from, nodeidx_t to, nodeidx_t size, uchar tag=stag) | ||||
Shift the supval array elements. | |||||
Arrays of supvals: 8-bit indexes | |||||
The following functions behave in the same manner as the functions described above. The only difference is that the array index is 8-bits and therefore the array may contains up to 256 elements only. | |||||
ssize_t | supval_idx8 (uchar alt, void *buf, size_t bufsize, uchar tag) const | ||||
ssize_t | supstr_idx8 (uchar alt, char *buf, size_t bufsize, uchar tag) const | ||||
ssize_t | supstr_idx8 (qstring *buf, uchar alt, uchar tag) const | ||||
bool | supset_idx8 (uchar alt, const void *value, size_t length, uchar tag) | ||||
bool | supdel_idx8 (uchar alt, uchar tag) | ||||
nodeidx_t | lower_bound_idx8 (uchar alt, uchar tag) const | ||||
nodeidx_t | supfirst_idx8 (uchar tag) const | ||||
nodeidx_t | supnext_idx8 (uchar alt, uchar tag) const | ||||
nodeidx_t | suplast_idx8 (uchar tag) const | ||||
nodeidx_t | supprev_idx8 (uchar alt, uchar tag) const | ||||
Delete supvals | |||||
bool | supdel (void) | ||||
Delete all elements of supval array. | |||||
bool | supdel_all (uchar tag) | ||||
Delete all elements of the specified supval array. | |||||
int | supdel_range (nodeidx_t idx1, nodeidx_t idx2, uchar tag) | ||||
Delete range of elements in the specified supval array. | |||||
int | supdel_range_idx8 (uchar idx1, uchar idx2, uchar tag) | ||||
Same as above, but accepts 8-bit indexes. | |||||
Hashes | |||||
Associative arrays indexed by strings. hashvals: Indexes in this array are strings. Values are arbitrary sized (max size is MAXSPECSIZE) | |||||
ssize_t | hashval (const char *idx, void *buf, size_t bufsize, uchar tag=htag) const | ||||
Get value of the specified hash element. | |||||
ssize_t | hashstr (qstring *buf, const char *idx, uchar tag=htag) const | ||||
Similar to supstr(), but accepts a hash index. | |||||
ssize_t | hashstr (const char *idx, char *buf, size_t bufsize, uchar tag=htag) const | ||||
nodeidx_t | hashval_long (const char *idx, uchar tag=htag) const | ||||
Get value of the specified hash element. | |||||
bool | hashset (const char *idx, const void *value, size_t length=0, uchar tag=htag) | ||||
Set value of hash element. | |||||
bool | hashset (const char *idx, nodeidx_t value, uchar tag=htag) | ||||
Set value of hash element to long value. | |||||
bool | hashdel (const char *idx, uchar tag=htag) | ||||
Delete hash element. | |||||
ssize_t | hashfirst (qstring *buf, uchar tag=htag) const | ||||
Get first existing element of hash. | |||||
ssize_t | hashfirst (char *buf, size_t bufsize, uchar tag=htag) const | ||||
ssize_t | hashnext (qstring *buf, const char *idx, uchar tag=htag) const | ||||
Get next existing element of hash. | |||||
ssize_t | hashnext (const char *idx, char *buf, size_t bufsize, uchar tag=htag) const | ||||
ssize_t | hashlast (qstring *buf, uchar tag=htag) const | ||||
Get last existing element of hash. | |||||
ssize_t | hashlast (char *buf, size_t bufsize, uchar tag=htag) const | ||||
ssize_t | hashprev (qstring *buf, const char *idx, uchar tag=htag) const | ||||
Get previous existing element of supval array. | |||||
ssize_t | hashprev (const char *idx, char *buf, size_t bufsize, uchar tag=htag) const | ||||
bool | hashdel_all (uchar tag=htag) | ||||
Delete all elements of hash. | |||||
Blobs | |||||
Virtually unlimited size binary objects. Blobs are stored in several supval array elements. | |||||
size_t | blobsize (nodeidx_t _start, uchar tag) | ||||
Get size of blob. | |||||
size_t | blobsize_ea (ea_t ea, uchar tag) | ||||
void * | getblob (void *buf, size_t *bufsize, nodeidx_t _start, uchar tag) | ||||
Get blob from a netnode. | |||||
void * | getblob_ea (void *buf, size_t *bufsize, ea_t ea, uchar tag) | ||||
template<class T> | |||||
ssize_t | getblob (qvector< T > *blob, nodeidx_t _start, uchar tag) | ||||
Get blob from a netnode. | |||||
template<class T> | |||||
ssize_t | getblob_ea (qvector< T > *blob, ea_t ea, uchar tag) | ||||
ssize_t | getblob (qstring *buf, nodeidx_t _start, uchar tag) | ||||
Get blob from a netnode into a qstring* and make sure the string is null-terminated. | |||||
bool | setblob (const void *buf, size_t size, nodeidx_t _start, uchar tag) | ||||
Store a blob in a netnode. | |||||
bool | setblob_ea (const void *buf, size_t size, ea_t ea, uchar tag) | ||||
int | delblob (nodeidx_t _start, uchar tag) | ||||
Delete a blob. | |||||
int | delblob_ea (ea_t ea, uchar tag) | ||||
size_t | blobshift (nodeidx_t from, nodeidx_t to, nodeidx_t size, uchar tag) | ||||
Shift the blob array elements. | |||||
Enumerate all netnodes | |||||
bool | start (void) | ||||
Get first netnode in the graph. | |||||
bool | end (void) | ||||
Get last netnode in the graph. | |||||
bool | next (void) | ||||
Get next netnode in the graph. | |||||
bool | prev (void) | ||||
Get prev netnode in the graph. | |||||
Move and copy netnodes | |||||
| |||||
size_t | copyto (netnode destnode, nodeidx_t count=1) | ||||
size_t | moveto (netnode destnode, nodeidx_t count=1) | ||||
Netnode comparisons | |||||
bool | operator== (netnode &n) const | ||||
bool | operator!= (netnode &n) const | ||||
bool | operator== (nodeidx_t x) const | ||||
bool | operator!= (nodeidx_t x) const |
Static Public Member Functions | |
static bool | exist (const char *_name) |
Does the netnode with the specified name exist? | |
static bool | inited (void) |
static bool | is_available (void) |
Friends | |
bool | exist (const netnode &n) |
Does the specified netnode exist? |
Definition of the IDA database node.
Note that the size of the 'netnode' class is 4 bytes and it can be freely casted to 'uint32' and back. This makes it easy to store information about the program location in the netnodes. Please pass netnodes to functions by value.
|
inline |
Constructor to create a netnode to access information about the specified linear address (possibly missing)
|
inline |
Construct an instance of netnode class to access the specified netnode.
_name | name of netnode |
namlen | length of the name. may be omitted, in this case the length will be calculated with strlen() |
do_create | true: create the netnode if it doesn't exist yet. false: don't create the netnode, set netnumber to #BADNODE if it doesn't exist |
|
inline |
Conversion from netnode to a linear address.
|
inlinestatic |
Does the netnode with the specified name exist?
|
inline |
Create a named netnode.
_name | name of netnode to create. names of user-defined netnodes must have the "$ " prefix in order to avoid clashes with program byte names. |
namlen | length of the name. if not specified, it will be calculated using strlen() |
1 | ok, the node is created |
0 | the node already exists. you may use the netnode class to access it. |
Create unnamed netnode.
1 | ok |
0 | should not happen, indicates internal error |
Get the netnode name.
|
inline |
Rename a netnode.
newname | new name of netnode. nullptr or "" means to delete name. names of user-defined netnodes must have the "$ " prefix in order to avoid clashes with program byte names. |
namlen | length of new name. if not specified, it will be calculated using strlen() |
1 | ok |
0 | failed, newname is already used |
Get value of netnode.
Netnode values are arbitrary sized objects with max size is MAXSPECSIZE. NB: do not use this function for strings - see valstr().
|
inline |
Set value of netnode.
value | pointer to value |
length | length of value. if not specified, it will be calculated using strlen() |
Delete value of netnode.
1 | ok |
0 | failed, netnode is bad or other error |
Get altval element of the specified array.
alt | index into array of altvals |
tag | tag of array. may be omitted |
Set value of altval array.
alt | index into array of altvals |
value | new value of altval element |
tag | tag of array |
1 | ok |
0 | failed, normally should not occur |
Delete element of altval array.
alt | index into array of altvals |
tag | tag of array |
1 | ok |
0 | failed, element doesn't exist |
Store/retrieve/delete an address value in the netnode that corresponds to an address.
Get first existing element of altval array.
tag | tag of array |
Get next existing element of altval array.
cur | current index |
tag | tag of array |
Get last element of altval array.
tag | tag of array |
Get previous existing element of altval array.
cur | current index |
tag | tag of array |
Shift the altval array elements.
Moves the array elements at (from..from+size) to (to..to+size)
|
inline |
Adjust values of altval arrays elements.
All altvals in the range from+1..from+size+1 and adjusted to have values in the range to+1..to+size+1. The parameter should_skip() can be used to skip the adjustment of some altvals
|
inline |
Delete all elements of altval array.
This function may be applied to 32-bit and 8-bit altval arrays. This function deletes the whole altval array.
Delete all elements of the specified altval array.
This function may be applied to 32-bit and 8-bit altval arrays. This function deletes the whole altval array.
tag | tag of array |
|
inline |
Get value of the specified supval array element.
NB: do not use this function to retrieve strings, see supstr()!
alt | index into array of supvals |
buf | output buffer, may be nullptr |
bufsize | size of output buffer |
tag | tag of array. Default: stag |
Get string value of the specified supval array element.
The differences between supval() and supstr() are the following:
If you do not use the string length returned by supval/supstr() functions and you are sure that the output buffer is big enough to hold the entire string and the string has been stored in the database with the terminating zero, then you can continue to use supval() instead of supstr().
buf | output buffer, may be nullptr |
alt | index into array of supvals |
tag | tag of array. Default: stag |
|
inline |
Set value of supval array element.
alt | index into array of supvals |
value | pointer to supval value |
length | length of 'value'. If not specified, the length is calculated using strlen()+1. |
tag | tag of array |
1 | ok |
0 | should not occur - indicates internal error |
Delete supval element.
alt | index into array of supvals |
tag | tag of array |
true | deleted |
false | element does not exist |
Get lower bound of existing elements of supval array.
cur | current index |
tag | tag of array |
Get first existing element of supval array.
tag | tag of array |
Get next existing element of supval array.
cur | current index |
tag | tag of array |
Get last existing element of supval array.
tag | tag of array |
Get previous existing element of supval array.
cur | current index |
tag | tag of array |
Shift the supval array elements.
Moves the array elements at (from..from+size) to (to..to+size)
Delete all elements of supval array.
This function may be applied to 32-bit and 8-bit supval arrays. This function deletes the whole supval array.
Delete all elements of the specified supval array.
This function may be applied to 32-bit and 8-bit supval arrays. This function deletes the whole supval array.
Delete range of elements in the specified supval array.
Elements in range [idx1, idx2) will be deleted.
idx1 | first element to delete |
idx2 | last element to delete + 1 |
tag | tag of array |
Same as above, but accepts 8-bit indexes.
|
inline |
Get value of the specified hash element.
idx | index into hash |
buf | output buffer, may be nullptr |
bufsize | output buffer size |
tag | tag of hash. Default: htag |
Similar to supstr(), but accepts a hash index.
Get value of the specified hash element.
idx | index into hash |
tag | tag of hash. Default: htag |
|
inline |
Set value of hash element.
idx | index into hash |
value | pointer to value |
length | length of 'value'. If not specified, the length is calculated using strlen()+1. |
tag | tag of hash. Default: htag |
1 | ok |
0 | should not occur - indicates internal error |
Set value of hash element to long value.
idx | index into hash |
value | new value of hash element |
tag | tag of hash. Default: htag |
1 | ok |
0 | should not occur - indicates internal error |
Delete hash element.
idx | index into hash |
tag | tag of hash. Default: htag |
true | deleted |
false | element does not exist |
Get first existing element of hash.
buf | output buffer, may be nullptr |
tag | tag of hash. Default: htag |
Get next existing element of hash.
buf | output buffer, may be nullptr |
idx | current index into hash |
tag | tag of hash. Default: htag |
Get last existing element of hash.
buf | output buffer, may be nullptr |
tag | tag of hash. Default: htag |
Get previous existing element of supval array.
buf | output buffer, may be nullptr |
idx | current index into hash |
tag | tag of hash. Default: htag |
Delete all elements of hash.
This function deletes the whole hash.
tag | tag of hash. Default: htag |
Get size of blob.
_start | index of the first supval element used to store blob |
tag | tag of supval array |
Get blob from a netnode.
buf | buffer to read into. if nullptr, the buffer will be allocated using qalloc() | |
[in,out] | bufsize | in: size of 'buf' in bytes (if buf == nullptr then meaningless). out: size of the blob if it exists. bufsize may be nullptr |
_start | index of the first supval element used to store blob | |
tag | tag of supval array |
|
inline |
Get blob from a netnode.
blob | output qvector buffer |
_start | index of the first supval element used to store blob |
tag | tag of supval array |
Get blob from a netnode into a qstring* and make sure the string is null-terminated.
buf | output qstring buffer |
_start | index of the first supval element used to store blob |
tag | tag of supval array |
Store a blob in a netnode.
buf | pointer to blob to save |
size | size of blob in bytes |
_start | index of the first supval element used to store blob |
tag | tag of supval array |
Delete a blob.
_start | index of the first supval element used to store blob |
tag | tag of supval array |
Shift the blob array elements.
Moves the array elements at (from..from+size) to (to..to+size)
Get first netnode in the graph.
Sets netnodenumber to the lowest existing number.
true | ok |
false | graph is empty |
Get last netnode in the graph.
Sets netnodenumber to the highest existing number.
true | ok |
false | graph is empty |
Get next netnode in the graph.
Sets netnodenumber to the next existing number
true | ok |
false | no more netnodes |
Get prev netnode in the graph.
Sets netnodenumber to the previous existing number
true | ok |
false | no more netnodes |
Does the specified netnode exist?
true | there is some information attached to the netnode. |
false | unnamed netnode without any information |