Module ida_netnode
Namely, we use Btree. To learn more about BTree:
\link{https://en.wikipedia.org/wiki/B-tree}
We do not use Btree directly. Instead, we have another layer built on the top of Btree. Here is a brief explanation of this layer.
An object called "netnode" is modeled on the top of Btree. Each netnode has a unique id: a 32-bit value (64-bit for ida64). Initially there is a trivial mapping of the linear addresses used in the program to netnodes (later this mapping may be modified using ea2node and node2ea functions; this is used for fast database rebasings). If we have additional information about an address (for example, a comment is attached to it), this information is stored in the corresponding netnode. See nalt.hpp to see how the kernel uses netnodes. Also, some netnodes have no corresponding linear address (however, they still have an id). They are used to store information not related to a particular address.
Each netnode may have the following attributes:
a name: an arbitrary non-empty string, up to 255KB-1 bytes
a value: arbitrary sized object, max size is MAXSPECSIZE
altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit or 32-bit values
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
charvals: a sparse array of 8-bit values. indexes in this array may be 8-bit or 32-bit values
hashvals: a hash (an associative array). indexes in this array are strings values are arbitrary sized (max size is MAXSPECSIZE)
Initially a new netnode contains no information at all so no disk space is used for it. As you add new information, the netnode grows.
All arrays that are attached to the netnode behave in the same manner. Initially:
all members of altvals/charvals array are zeroes
all members of supvals/hashvals array are undefined
If you need to store objects bigger that MAXSPECSIZE, please note that there are high-level functions to store arbitrary sized objects in supvals. See setblob/getblob and other blob-related functions.
You may use netnodes to store additional information about the program. Limitations on the use of netnodes are the following:
use netnodes only if you could not find a kernel service to store your type of information
do not create netnodes with valid identifier names. Use the "$ " prefix (or any other prefix with characters not allowed in the identifiers for the names of your netnodes. Although you will probably not destroy anything by accident, using already defined names for the names of your netnodes is still discouraged.
you may create as many netnodes as you want (creation of an unnamed netnode does not increase the size of the database). however, since each netnode has a number, creating too many netnodes could lead to the exhaustion of the netnode numbers (the numbering starts at 0xFF000000)
remember that netnodes are automatically saved to the disk by the kernel.
Advanced info:
In fact a netnode may contain up to 256 arrays of arbitrary sized objects (not only the 4 listed above). Each array has an 8-bit tag. Usually tags are represented by character constants. For example, altvals and supvals are simply 2 of 256 arrays, with the tags 'A' and 'S' respectively.
Global Variables
BADNODE
MAXNAMESIZE
MAXSPECSIZE
MAX_NODENAME_SIZE
NETMAP_IDX
NETMAP_STR
NETMAP_V8
NETMAP_VAL
NETMAP_VAL_NDX
NETMAP_X8
SIZEOF_nodeidx_t
atag
htag
ltag
ntag
stag
vtag
Functions
exist(n: netnode) ‑> bool
exist(n) -> bool
netnode_exist(_name: char const *) ‑> bool
exist(_name) -> bool Does the netnode with the specified name exist?
Classes
netnode(*args)
: Proxy of C++ netnode class.
Static methods
exist(_name: char const *) ‑> bool exist(_name) -> bool Does the netnode with the specified name exist?
_name: (C++: const char *) char const *
Methods
altdel(self, *args) ‑> bool altdel(self, alt, tag=atag) -> bool 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.
alt: nodeidx_t tag: uchar
return: success altdel(self) -> bool
altdel_all(self, *args) ‑> bool altdel_all(self, tag=atag) -> bool 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: (C++: uchar) tag of array return: success
altdel_ea(self, *args) ‑> bool altdel_ea(self, ea, tag=atag) -> bool
ea: ea_t tag: uchar
altdel_idx8(self, alt: uchar, tag: uchar) ‑> bool altdel_idx8(self, alt, tag) -> bool
alt: uchar tag: uchar
altfirst(self, *args) ‑> nodeidx_t altfirst(self, tag=atag) -> nodeidx_t Get first existing element of altval array.
tag: (C++: uchar) tag of array return: index of first existing element of altval array, BADNODE if altval array is empty
altfirst_idx8(self, tag: uchar) ‑> nodeidx_t altfirst_idx8(self, tag) -> nodeidx_t
tag: uchar
altlast(self, *args) ‑> nodeidx_t altlast(self, tag=atag) -> nodeidx_t Get last element of altval array.
tag: (C++: uchar) tag of array return: index of last existing element of altval array, BADNODE if altval array is empty
altlast_idx8(self, tag: uchar) ‑> nodeidx_t altlast_idx8(self, tag) -> nodeidx_t
tag: uchar
altnext(self, *args) ‑> nodeidx_t altnext(self, cur, tag=atag) -> nodeidx_t Get next existing element of altval array.
cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the next existing element of altval array, BADNODE if no more altval array elements exist
altnext_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t altnext_idx8(self, cur, tag) -> nodeidx_t
cur: uchar tag: uchar
altprev(self, *args) ‑> nodeidx_t altprev(self, cur, tag=atag) -> nodeidx_t Get previous existing element of altval array.
cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the previous existing element of altval array, BADNODE if no more altval array elements exist
altprev_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t altprev_idx8(self, cur, tag) -> nodeidx_t
cur: uchar tag: uchar
altset(self, *args) ‑> bool altset(self, alt, value, tag=atag) -> bool Set value of altval array.
alt: (C++: nodeidx_t) index into array of altvals value: (C++: nodeidx_t) new value of altval element tag: (C++: uchar) tag of array retval 1: ok retval 0: failed, normally should not occur
altset_ea(self, *args) ‑> bool altset_ea(self, ea, value, tag=atag) -> bool
ea: ea_t value: nodeidx_t tag: uchar
altset_idx8(self, alt: uchar, val: nodeidx_t, tag: uchar) ‑> bool altset_idx8(self, alt, val, tag) -> bool
alt: uchar val: nodeidx_t tag: uchar
altshift(self, *args) ‑> size_t altshift(self, _from, to, size, tag=atag) -> size_t Shift the altval array elements. Moves the array elements at (from..from+size) to (to..to+size)
from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements
altval(self, *args) ‑> nodeidx_t altval(self, alt, tag=atag) -> nodeidx_t Get altval element of the specified array.
alt: (C++: nodeidx_t) index into array of altvals tag: (C++: uchar) tag of array. may be omitted return: value of altval element. nonexistent altval members are returned as zeroes
altval_ea(self, *args) ‑> nodeidx_t altval_ea(self, ea, tag=atag) -> nodeidx_t
ea: ea_t tag: uchar
altval_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t altval_idx8(self, alt, tag) -> nodeidx_t
alt: uchar tag: uchar
blobshift(self, _from: nodeidx_t, to: nodeidx_t, size: nodeidx_t, tag: uchar) ‑> size_t blobshift(self, _from, to, size, tag) -> size_t Shift the blob array elements. Moves the array elements at (from..from+size) to (to..to+size)
from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements
blobsize(self, _start: nodeidx_t, tag: uchar) ‑> size_t blobsize(self, _start, tag) -> size_t Get size of blob.
_start: (C++: nodeidx_t) index of the first supval element used to store blob tag: (C++: uchar) tag of supval array return: number of bytes required to store a blob
blobsize_ea(self, ea: ea_t, tag: uchar) ‑> size_t blobsize_ea(self, ea, tag) -> size_t
ea: ea_t tag: uchar
chardel(self, alt: nodeidx_t, tag: uchar) ‑> bool chardel(self, alt, tag) -> bool
alt: nodeidx_t tag: uchar
chardel_ea(self, ea: ea_t, tag: uchar) ‑> bool chardel_ea(self, ea, tag) -> bool
ea: ea_t tag: uchar
chardel_idx8(self, alt: uchar, tag: uchar) ‑> bool chardel_idx8(self, alt, tag) -> bool
alt: uchar tag: uchar
charfirst(self, tag: uchar) ‑> nodeidx_t charfirst(self, tag) -> nodeidx_t
tag: uchar
charfirst_idx8(self, tag: uchar) ‑> nodeidx_t charfirst_idx8(self, tag) -> nodeidx_t
tag: uchar
charlast(self, tag: uchar) ‑> nodeidx_t charlast(self, tag) -> nodeidx_t
tag: uchar
charlast_idx8(self, tag: uchar) ‑> nodeidx_t charlast_idx8(self, tag) -> nodeidx_t
tag: uchar
charnext(self, cur: nodeidx_t, tag: uchar) ‑> nodeidx_t charnext(self, cur, tag) -> nodeidx_t
cur: nodeidx_t tag: uchar
charnext_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t charnext_idx8(self, cur, tag) -> nodeidx_t
cur: uchar tag: uchar
charprev(self, cur: nodeidx_t, tag: uchar) ‑> nodeidx_t charprev(self, cur, tag) -> nodeidx_t
cur: nodeidx_t tag: uchar
charprev_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t charprev_idx8(self, cur, tag) -> nodeidx_t
cur: uchar tag: uchar
charset(self, alt: nodeidx_t, val: uchar, tag: uchar) ‑> bool charset(self, alt, val, tag) -> bool
alt: nodeidx_t val: uchar tag: uchar
charset_ea(self, ea: ea_t, val: uchar, tag: uchar) ‑> bool charset_ea(self, ea, val, tag) -> bool
ea: ea_t val: uchar tag: uchar
charset_idx8(self, alt: uchar, val: uchar, tag: uchar) ‑> bool charset_idx8(self, alt, val, tag) -> bool
alt: uchar val: uchar tag: uchar
charshift(self, _from: nodeidx_t, to: nodeidx_t, size: nodeidx_t, tag: uchar) ‑> size_t charshift(self, _from, to, size, tag) -> size_t
from: nodeidx_t to: nodeidx_t size: nodeidx_t tag: uchar
charval(self, alt: nodeidx_t, tag: uchar) ‑> uchar charval(self, alt, tag) -> uchar
alt: nodeidx_t tag: uchar
charval_ea(self, ea: ea_t, tag: uchar) ‑> uchar charval_ea(self, ea, tag) -> uchar
ea: ea_t tag: uchar
charval_idx8(self, alt: uchar, tag: uchar) ‑> uchar charval_idx8(self, alt, tag) -> uchar
alt: uchar tag: uchar
copyto(self, destnode: netnode, count: nodeidx_t = 1) ‑> size_t copyto(self, destnode, count=1) -> size_t
destnode: netnode count: nodeidx_t
create(self, *args) ‑> bool create(self, _name, namlen=0) -> bool Create unnamed netnode. retval 1: ok retval 0: should not happen, indicates internal error
_name: char const * namlen: size_t
create(self) -> bool
delblob(self, _start: nodeidx_t, tag: uchar) ‑> int delblob(self, _start, tag) -> int Delete a blob.
_start: (C++: nodeidx_t) index of the first supval element used to store blob tag: (C++: uchar) tag of supval array return: number of deleted supvals
delblob_ea(self, ea: ea_t, tag: uchar) ‑> int delblob_ea(self, ea, tag) -> int
ea: ea_t tag: uchar
delvalue(self) ‑> bool delvalue(self) -> bool Delete value of netnode. retval 1: ok retval 0: failed, netnode is bad or other error
eadel(self, ea: ea_t, tag: uchar) ‑> bool eadel(self, ea, tag) -> bool
ea: ea_t tag: uchar
eadel_idx8(self, idx: uchar, tag: uchar) ‑> bool eadel_idx8(self, idx, tag) -> bool
idx: uchar tag: uchar
eaget(self, ea: ea_t, tag: uchar) ‑> ea_t eaget(self, ea, tag) -> ea_t
ea: ea_t tag: uchar
eaget_idx(self, idx: nodeidx_t, tag: uchar) ‑> ea_t eaget_idx(self, idx, tag) -> ea_t
idx: nodeidx_t tag: uchar
eaget_idx8(self, idx: uchar, tag: uchar) ‑> ea_t eaget_idx8(self, idx, tag) -> ea_t
idx: uchar tag: uchar
easet(self, ea: ea_t, addr: ea_t, tag: uchar) ‑> bool easet(self, ea, addr, tag) -> bool Store/retrieve/delete an address value in the netnode that corresponds to an address.
ea: (C++: ea_t) addr: (C++: ea_t) tag: (C++: uchar)
easet_idx(self, idx: nodeidx_t, addr: ea_t, tag: uchar) ‑> bool easet_idx(self, idx, addr, tag) -> bool
idx: nodeidx_t addr: ea_t tag: uchar
easet_idx8(self, idx: uchar, addr: ea_t, tag: uchar) ‑> bool easet_idx8(self, idx, addr, tag) -> bool
idx: uchar addr: ea_t tag: uchar
end(self) ‑> bool end(self) -> bool Get last netnode in the graph. Sets netnodenumber to the highest existing number. retval true: ok retval false: graph is empty
get_name(self) ‑> ssize_t get_name(self) -> ssize_t Get the netnode name.
return: -1 if netnode is unnamed (buf is untouched in this case), otherwise the name length
getblob(self, start: nodeidx_t, tag: char) ‑> PyObject getblob(self, start, tag) -> bytes or None Get blob from a netnode into a qstring and make sure the string is null- terminated.
start: nodeidx_t tag: (C++: uchar) tag of supval array return: -1 if blob doesn't exist size of string (including terminating null) otherwise
getblob_ea(self, ea: ea_t, tag: char) ‑> PyObject * getblob_ea(self, ea, tag) -> PyObject *
ea: ea_t tag: char
getclob(self, start: nodeidx_t, tag: char) ‑> PyObject * getclob(self, start, tag) -> str
start: nodeidx_t tag: char
hashdel(self, *args) ‑> bool hashdel(self, idx, tag=htag) -> bool Delete hash element.
idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag retval true: deleted retval false: element does not exist
hashdel_all(self, *args) ‑> bool hashdel_all(self, tag=htag) -> bool Delete all elements of hash. This function deletes the whole hash.
tag: (C++: uchar) tag of hash. Default: htag return: success
hashfirst(self, *args) ‑> ssize_t hashfirst(self, tag=htag) -> ssize_t @see: hashfirst(qstring *buf, uchar tag=htag) const
tag: (C++: uchar)
hashlast(self, *args) ‑> ssize_t hashlast(self, tag=htag) -> ssize_t @see: hashlast(qstring *buf, uchar tag=htag) const
tag: (C++: uchar)
hashnext(self, *args) ‑> ssize_t hashnext(self, idx, tag=htag) -> ssize_t @see: hashnext(qstring *buf, const char *idx, uchar tag=htag) const
idx: (C++: const char *) char const * tag: (C++: uchar)
hashprev(self, *args) ‑> ssize_t hashprev(self, idx, tag=htag) -> ssize_t @see: hashprev(qstring *buf, const char *idx, uchar tag=htag) const
idx: (C++: const char *) char const * tag: (C++: uchar)
hashset(self, *args) ‑> bool hashset(self, idx, value, tag=htag) -> bool Set value of hash element to long value.
idx: (C++: const char *) index into hash value: (C++: nodeidx_t) new value of hash element tag: (C++: uchar) tag of hash. Default: htag retval 1: ok retval 0: should not occur - indicates internal error
hashset_buf(self, *args) ‑> bool hashset_buf(self, idx, py_str, tag=htag) -> bool
idx: char const * py_str: PyObject * tag: char
hashset_idx(self, *args) ‑> bool hashset_idx(self, idx, value, tag=htag) -> bool
idx: char const * value: nodeidx_t tag: uchar
hashstr(self, *args) ‑> ssize_t hashstr(self, idx, tag=htag) -> ssize_t @see: hashstr(qstring *buf, const char *idx, uchar tag=htag) const
idx: (C++: const char *) char const * tag: (C++: uchar)
hashstr_buf(self, *args) ‑> PyObject * hashstr_buf(self, idx, tag=htag) -> PyObject
idx: char const * tag: char
hashval(self, *args) ‑> ssize_t hashval(self, idx, tag=htag) -> ssize_t Get value of the specified hash element.
idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag return: -1 if element doesn't exist or idx is nullptr. otherwise returns the value size in bytes
hashval_long(self, *args) ‑> nodeidx_t hashval_long(self, idx, tag=htag) -> nodeidx_t Get value of the specified hash element.
idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag return: value of hash element (it should be set using hashset(nodeidx_t)), 0 if the element does not exist
index(self) ‑> nodeidx_t index(self) -> nodeidx_t
kill(self) ‑> void kill(self) Delete a netnode with all information attached to it.
long_value(self) ‑> nodeidx_t long_value(self) -> nodeidx_t
lower_bound(self, *args) ‑> nodeidx_t lower_bound(self, cur, tag=stag) -> nodeidx_t Get lower bound of existing elements of supval array.
cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of first existing element of supval array >= cur BADNODE if supval array is empty
lower_bound_ea(self, *args) ‑> nodeidx_t lower_bound_ea(self, ea, tag=stag) -> nodeidx_t
ea: ea_t tag: uchar
lower_bound_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t lower_bound_idx8(self, alt, tag) -> nodeidx_t
alt: uchar tag: uchar
moveto(self, destnode: netnode, count: nodeidx_t = 1) ‑> size_t moveto(self, destnode, count=1) -> size_t
destnode: netnode count: nodeidx_t
next(self) ‑> bool next(self) -> bool Get next netnode in the graph. Sets netnodenumber to the next existing number retval true: ok retval false: no more netnodes
prev(self) ‑> bool prev(self) -> bool Get prev netnode in the graph. Sets netnodenumber to the previous existing number retval true: ok retval false: no more netnodes
rename(self, newname: char const *, namlen: size_t = 0) ‑> bool rename(self, newname, namlen=0) -> bool Rename a netnode.
newname: (C++: const char *) 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: (C++: size_t) length of new name. if not specified, it will be calculated using strlen() retval 1: ok retval 0: failed, newname is already used
set(self, value: void const *) ‑> bool set(self, value) -> bool Set value of netnode.
value: (C++: const void *) pointer to value return: 1 - ok
set_long(self, x: nodeidx_t) ‑> bool set_long(self, x) -> bool Value of netnode as a long number:
x: (C++: nodeidx_t)
setblob(self, buf: void const *, _start: nodeidx_t, tag: uchar) ‑> bool setblob(self, buf, _start, tag) -> bool Store a blob in a netnode.
buf: (C++: const void *) pointer to blob to save _start: (C++: nodeidx_t) tag: (C++: uchar) tag of supval array return: success
setblob_ea(self, buf: void const *, ea: ea_t, tag: uchar) ‑> bool setblob_ea(self, buf, ea, tag) -> bool
buf: void const * ea: ea_t tag: uchar
start(self) ‑> bool start(self) -> bool Get first netnode in the graph. Sets netnodenumber to the lowest existing number. retval true: ok retval false: graph is empty
supdel(self, *args) ‑> bool supdel(self, alt, tag=stag) -> bool 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.
alt: nodeidx_t tag: uchar
return: success supdel(self) -> bool
supdel_all(self, tag: uchar) ‑> bool supdel_all(self, tag) -> bool 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.
tag: (C++: uchar) return: success
supdel_ea(self, *args) ‑> bool supdel_ea(self, ea, tag=stag) -> bool
ea: ea_t tag: uchar
supdel_idx8(self, alt: uchar, tag: uchar) ‑> bool supdel_idx8(self, alt, tag) -> bool
alt: uchar tag: uchar
supdel_range(self, idx1: nodeidx_t, idx2: nodeidx_t, tag: uchar) ‑> int supdel_range(self, idx1, idx2, tag) -> int Delete range of elements in the specified supval array. Elements in range [idx1, idx2) will be deleted. note: This function can also be used to delete a range of altval elements
idx1: (C++: nodeidx_t) first element to delete idx2: (C++: nodeidx_t) last element to delete + 1 tag: (C++: uchar) tag of array return: number of deleted elements
supdel_range_idx8(self, idx1: uchar, idx2: uchar, tag: uchar) ‑> int supdel_range_idx8(self, idx1, idx2, tag) -> int Same as above, but accepts 8-bit indexes.
idx1: (C++: uchar) idx2: (C++: uchar) tag: (C++: uchar)
supfirst(self, *args) ‑> nodeidx_t supfirst(self, tag=stag) -> nodeidx_t Get first existing element of supval array.
tag: (C++: uchar) tag of array return: index of first existing element of supval array, BADNODE if supval array is empty
supfirst_idx8(self, tag: uchar) ‑> nodeidx_t supfirst_idx8(self, tag) -> nodeidx_t
tag: uchar
suplast(self, *args) ‑> nodeidx_t suplast(self, tag=stag) -> nodeidx_t Get last existing element of supval array.
tag: (C++: uchar) tag of array return: index of last existing element of supval array, BADNODE if supval array is empty
suplast_idx8(self, tag: uchar) ‑> nodeidx_t suplast_idx8(self, tag) -> nodeidx_t
tag: uchar
supnext(self, *args) ‑> nodeidx_t supnext(self, cur, tag=stag) -> nodeidx_t Get next existing element of supval array.
cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the next existing element of supval array, BADNODE if no more supval array elements exist
supnext_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t supnext_idx8(self, alt, tag) -> nodeidx_t
alt: uchar tag: uchar
supprev(self, *args) ‑> nodeidx_t supprev(self, cur, tag=stag) -> nodeidx_t Get previous existing element of supval array.
cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the previous existing element of supval array BADNODE if no more supval array elements exist
supprev_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t supprev_idx8(self, alt, tag) -> nodeidx_t
alt: uchar tag: uchar
supset(self, *args) ‑> bool supset(self, alt, value, tag=stag) -> bool Set value of supval array element.
alt: (C++: nodeidx_t) index into array of supvals value: (C++: const void *) pointer to supval value tag: (C++: uchar) tag of array retval 1: ok retval 0: should not occur - indicates internal error
supset_ea(self, *args) ‑> bool supset_ea(self, ea, value, tag=stag) -> bool
ea: ea_t value: void const * tag: uchar
supset_idx8(self, alt: uchar, value: void const *, tag: uchar) ‑> bool supset_idx8(self, alt, value, tag) -> bool
alt: uchar value: void const * tag: uchar
supshift(self, *args) ‑> size_t supshift(self, _from, to, size, tag=stag) -> size_t Shift the supval array elements. Moves the array elements at (from..from+size) to (to..to+size)
from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements
supstr(self, *args) ‑> ssize_t supstr(self, alt, tag=stag) -> ssize_t @see: supstr(qstring *buf, nodeidx_t alt, uchar tag=stag) const
alt: (C++: nodeidx_t) tag: (C++: uchar)
supstr_ea(self, *args) ‑> ssize_t supstr_ea(self, ea, tag=stag) -> ssize_t
ea: ea_t tag: uchar
supstr_idx8(self, alt: uchar, tag: uchar) ‑> ssize_t supstr_idx8(self, alt, tag) -> ssize_t
alt: uchar tag: uchar
supval(self, *args) ‑> ssize_t supval(self, alt, tag=stag) -> ssize_t Get value of the specified supval array element. NB: do not use this function to retrieve strings, see supstr()!
alt: (C++: nodeidx_t) index into array of supvals tag: (C++: uchar) tag of array. Default: stag return: size of value, -1 if element doesn't exist
supval_ea(self, *args) ‑> ssize_t supval_ea(self, ea, tag=stag) -> ssize_t
ea: ea_t tag: uchar
supval_idx8(self, *args) ‑> ssize_t supval_idx8(self, alt, tag) -> ssize_t
alt: uchar tag: uchar
valobj(self, *args) ‑> ssize_t valobj(self) -> ssize_t 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().
return: length of value, -1 if no value present
valstr(self) ‑> ssize_t valstr(self) -> ssize_t @see: valstr(qstring *buf) const
value_exists(self) ‑> bool value_exists(self) -> bool
Last updated