Module ida_netnode
Functions that provide the lowest level public interface to the database.
Namely, we use Btree. To learn more about BTree:
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
var BADNODE
-
A number to represent a bad netnode reference.
var MAXNAMESIZE
-
Maximum length of a netnode name. WILL BE REMOVED IN THE FUTURE.
var MAXSPECSIZE
-
Maximum length of strings or objects stored in a supval array element.
var MAX_NODENAME_SIZE
-
Maximum length of a name. We permit names up to 32KB-1 bytes.
var NETMAP_IDX
-
NETMAP_IDX = 256
var NETMAP_STR
-
NETMAP_STR = 1024
var NETMAP_V8
-
NETMAP_V8 = 4096
var NETMAP_VAL
-
NETMAP_VAL = 512
var NETMAP_VAL_NDX
-
NETMAP_VAL_NDX = 8192
var NETMAP_X8
-
NETMAP_X8 = 2048
var SIZEOF_nodeidx_t
-
SIZEOF_nodeidx_t = 4
var atag
-
Array of altvals.
var htag
-
Array of hashvals.
var ltag
-
Links between netnodes.
var ntag
-
Name of netnode.
var stag
-
Array of supvals.
var vtag
-
Value of netnode.
Functions
def exist(*args) ‑> bool
-
exist(n) -> booln: netnode const &
def netnode_exist(*args) ‑> bool
-
netnode_exist(_name) -> bool_name: char const *
Classes
class netnode (*args)
-
Proxy of C++ netnode class.__init__(self, num=nodeidx_t(-1)) -> netnodenum: nodeidx_t__init__(self, _name, namlen=0, do_create=False) -> netnode_name: char const *namlen: size_tdo_create: bool
Static methods
def exist(*args) ‑> bool
-
exist(_name) -> boolDoes the netnode with the specified name exist?_name: (C++: const char *) char const *
Methods
def altdel(self, *args) ‑> bool
-
altdel(self, alt, tag=atag) -> boolDelete 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_ttag: ucharreturn: successaltdel(self) -> bool
def altdel_all(self, *args) ‑> bool
-
altdel_all(self, tag=atag) -> boolDelete 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 arrayreturn: success
def altdel_ea(self, *args) ‑> bool
-
altdel_ea(self, ea, tag=atag) -> boolea: ea_ttag: uchar
def altdel_idx8(self, *args) ‑> bool
-
altdel_idx8(self, alt, tag) -> boolalt: uchartag: uchar
def altfirst(self, *args) ‑> nodeidx_t
-
altfirst(self, tag=atag) -> nodeidx_tGet first existing element of altval array.tag: (C++: uchar) tag of arrayreturn: index of first existing element of altval array, BADNODE if altvalarray is empty
def altfirst_idx8(self, *args) ‑> nodeidx_t
-
altfirst_idx8(self, tag) -> nodeidx_ttag: uchar
def altlast(self, *args) ‑> nodeidx_t
-
altlast(self, tag=atag) -> nodeidx_tGet last element of altval array.tag: (C++: uchar) tag of arrayreturn: index of last existing element of altval array, BADNODE if altval arrayis empty
def altlast_idx8(self, *args) ‑> nodeidx_t
-
altlast_idx8(self, tag) -> nodeidx_ttag: uchar
def altnext(self, *args) ‑> nodeidx_t
-
altnext(self, cur, tag=atag) -> nodeidx_tGet next existing element of altval array.cur: (C++: nodeidx_t) current indextag: (C++: uchar) tag of arrayreturn: index of the next existing element of altval array, BADNODE if no morealtval array elements exist
def altnext_idx8(self, *args) ‑> nodeidx_t
-
altnext_idx8(self, cur, tag) -> nodeidx_tcur: uchartag: uchar
def altprev(self, *args) ‑> nodeidx_t
-
altprev(self, cur, tag=atag) -> nodeidx_tGet previous existing element of altval array.cur: (C++: nodeidx_t) current indextag: (C++: uchar) tag of arrayreturn: index of the previous existing element of altval array, BADNODE if nomore altval array elements exist
def altprev_idx8(self, *args) ‑> nodeidx_t
-
altprev_idx8(self, cur, tag) -> nodeidx_tcur: uchartag: uchar
def altset(self, *args) ‑> bool
-
altset(self, alt, value, tag=atag) -> boolSet value of altval array.alt: (C++: nodeidx_t) index into array of altvalsvalue: (C++: nodeidx_t) new value of altval elementtag: (C++: uchar) tag of arrayretval 1: okretval 0: failed, normally should not occur
def altset_ea(self, *args) ‑> bool
-
altset_ea(self, ea, value, tag=atag) -> boolea: ea_tvalue: nodeidx_ttag: uchar
def altset_idx8(self, *args) ‑> bool
-
altset_idx8(self, alt, val, tag) -> boolalt: ucharval: nodeidx_ttag: uchar
def altshift(self, *args) ‑> size_t
-
altshift(self, _from, to, size, tag=atag) -> size_tShift 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
def altval(self, *args) ‑> nodeidx_t
-
altval(self, alt, tag=atag) -> nodeidx_tGet altval element of the specified array.alt: (C++: nodeidx_t) index into array of altvalstag: (C++: uchar) tag of array. may be omittedreturn: value of altval element. nonexistent altval members are returned aszeroes
def altval_ea(self, *args) ‑> nodeidx_t
-
altval_ea(self, ea, tag=atag) -> nodeidx_tea: ea_ttag: uchar
def altval_idx8(self, *args) ‑> nodeidx_t
-
altval_idx8(self, alt, tag) -> nodeidx_talt: uchartag: uchar
def blobshift(self, *args) ‑> size_t
-
blobshift(self, _from, to, size, tag) -> size_tShift 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
def blobsize(self, *args) ‑> size_t
-
blobsize(self, _start, tag) -> size_tGet size of blob._start: (C++: nodeidx_t) index of the first supval element used to store blobtag: (C++: uchar) tag of supval arrayreturn: number of bytes required to store a blob
def blobsize_ea(self, *args) ‑> size_t
-
blobsize_ea(self, ea, tag) -> size_tea: ea_ttag: uchar
def chardel(self, *args) ‑> bool
-
chardel(self, alt, tag) -> boolalt: nodeidx_ttag: uchar
def chardel_ea(self, *args) ‑> bool
-
chardel_ea(self, ea, tag) -> boolea: ea_ttag: uchar
def chardel_idx8(self, *args) ‑> bool
-
chardel_idx8(self, alt, tag) -> boolalt: uchartag: uchar
def charfirst(self, *args) ‑> nodeidx_t
-
charfirst(self, tag) -> nodeidx_ttag: uchar
def charfirst_idx8(self, *args) ‑> nodeidx_t
-
charfirst_idx8(self, tag) -> nodeidx_ttag: uchar
def charlast(self, *args) ‑> nodeidx_t
-
charlast(self, tag) -> nodeidx_ttag: uchar
def charlast_idx8(self, *args) ‑> nodeidx_t
-
charlast_idx8(self, tag) -> nodeidx_ttag: uchar
def charnext(self, *args) ‑> nodeidx_t
-
charnext(self, cur, tag) -> nodeidx_tcur: nodeidx_ttag: uchar
def charnext_idx8(self, *args) ‑> nodeidx_t
-
charnext_idx8(self, cur, tag) -> nodeidx_tcur: uchartag: uchar
def charprev(self, *args) ‑> nodeidx_t
-
charprev(self, cur, tag) -> nodeidx_tcur: nodeidx_ttag: uchar
def charprev_idx8(self, *args) ‑> nodeidx_t
-
charprev_idx8(self, cur, tag) -> nodeidx_tcur: uchartag: uchar
def charset(self, *args) ‑> bool
-
charset(self, alt, val, tag) -> boolalt: nodeidx_tval: uchartag: uchar
def charset_ea(self, *args) ‑> bool
-
charset_ea(self, ea, val, tag) -> boolea: ea_tval: uchartag: uchar
def charset_idx8(self, *args) ‑> bool
-
charset_idx8(self, alt, val, tag) -> boolalt: ucharval: uchartag: uchar
def charshift(self, *args) ‑> size_t
-
charshift(self, _from, to, size, tag) -> size_tfrom: nodeidx_tto: nodeidx_tsize: nodeidx_ttag: uchar
def charval(self, *args) ‑> uchar
-
charval(self, alt, tag) -> ucharalt: nodeidx_ttag: uchar
def charval_ea(self, *args) ‑> uchar
-
charval_ea(self, ea, tag) -> ucharea: ea_ttag: uchar
def charval_idx8(self, *args) ‑> uchar
-
charval_idx8(self, alt, tag) -> ucharalt: uchartag: uchar
def copyto(self, *args) ‑> size_t
-
copyto(self, destnode, count=1) -> size_tdestnode: netnodecount: nodeidx_t
def create(self, *args) ‑> bool
-
create(self, _name, namlen=0) -> boolCreate unnamed netnode.retval 1: okretval 0: should not happen, indicates internal error_name: char const *namlen: size_tcreate(self) -> bool
def delblob(self, *args) ‑> int
-
delblob(self, _start, tag) -> intDelete a blob._start: (C++: nodeidx_t) index of the first supval element used to store blobtag: (C++: uchar) tag of supval arrayreturn: number of deleted supvals
def delblob_ea(self, *args) ‑> int
-
delblob_ea(self, ea, tag) -> intea: ea_ttag: uchar
def delvalue(self, *args) ‑> bool
-
delvalue(self) -> boolDelete value of netnode.retval 1: okretval 0: failed, netnode is bad or other error
def eadel(self, *args) ‑> bool
-
eadel(self, ea, tag) -> boolea: ea_ttag: uchar
def eadel_idx8(self, *args) ‑> bool
-
eadel_idx8(self, idx, tag) -> boolidx: uchartag: uchar
def eaget(self, *args) ‑> ea_t
-
eaget(self, ea, tag) -> ea_tea: ea_ttag: uchar
def eaget_idx(self, *args) ‑> ea_t
-
eaget_idx(self, idx, tag) -> ea_tidx: nodeidx_ttag: uchar
def eaget_idx8(self, *args) ‑> ea_t
-
eaget_idx8(self, idx, tag) -> ea_tidx: uchartag: uchar
def easet(self, *args) ‑> bool
-
easet(self, ea, addr, tag) -> boolStore/retrieve/delete an address value in the netnode that corresponds to an address.ea: (C++: ea_t)addr: (C++: ea_t)tag: (C++: uchar)
def easet_idx(self, *args) ‑> bool
-
easet_idx(self, idx, addr, tag) -> boolidx: nodeidx_taddr: ea_ttag: uchar
def easet_idx8(self, *args) ‑> bool
-
easet_idx8(self, idx, addr, tag) -> boolidx: ucharaddr: ea_ttag: uchar
def end(self, *args) ‑> bool
-
end(self) -> boolGet last netnode in the graph. Sets netnodenumber to the highest existing number.retval true: okretval false: graph is empty
def get_name(self, *args) ‑> ssize_t
-
get_name(self) -> ssize_tGet the netnode name.return: -1 if netnode is unnamed (buf is untouched in this case), otherwise thename length
def getblob(self, *args) ‑> PyObject *
-
getblob(self, start, tag) -> bytes or NoneGet blob from a netnode into a qstring* and make sure the string is null- terminated.start: nodeidx_ttag: (C++: uchar) tag of supval arrayreturn: -1 if blob doesn't exist size of string (including terminating null)otherwise
def getblob_ea(self, *args) ‑> PyObject *
-
getblob_ea(self, ea, tag) -> PyObject *ea: ea_ttag: char
def getclob(self, *args) ‑> PyObject *
-
getclob(self, start, tag) -> strstart: nodeidx_ttag: char
def hashdel(self, *args) ‑> bool
-
hashdel(self, idx, tag=htag) -> boolDelete hash element.idx: (C++: const char *) index into hashtag: (C++: uchar) tag of hash. Default: htagretval true: deletedretval false: element does not exist
def hashdel_all(self, *args) ‑> bool
-
hashdel_all(self, tag=htag) -> boolDelete all elements of hash. This function deletes the whole hash.tag: (C++: uchar) tag of hash. Default: htagreturn: success
def hashfirst(self, *args) ‑> ssize_t
-
hashfirst(self, tag=htag) -> ssize_tsee: hashfirst(qstring *buf, uchar tag=htag) consttag: (C++: uchar)
def hashlast(self, *args) ‑> ssize_t
-
hashlast(self, tag=htag) -> ssize_tsee: hashlast(qstring *buf, uchar tag=htag) consttag: (C++: uchar)
def hashnext(self, *args) ‑> ssize_t
-
hashnext(self, idx, tag=htag) -> ssize_tsee: hashnext(qstring *buf, const char *idx, uchar tag=htag) constidx: (C++: const char *) char const *tag: (C++: uchar)
def hashprev(self, *args) ‑> ssize_t
-
hashprev(self, idx, tag=htag) -> ssize_tsee: hashprev(qstring *buf, const char *idx, uchar tag=htag) constidx: (C++: const char *) char const *tag: (C++: uchar)
def hashset(self, *args) ‑> bool
-
hashset(self, idx, value, tag=htag) -> boolSet value of hash element to long value.idx: (C++: const char *) index into hashvalue: (C++: nodeidx_t) new value of hash elementtag: (C++: uchar) tag of hash. Default: htagretval 1: okretval 0: should not occur - indicates internal error
def hashset_buf(self, *args) ‑> bool
-
hashset_buf(self, idx, py_str, tag=htag) -> boolidx: char const *py_str: PyObject *tag: char
def hashset_idx(self, *args) ‑> bool
-
hashset_idx(self, idx, value, tag=htag) -> boolidx: char const *value: nodeidx_ttag: uchar
def hashstr(self, *args) ‑> ssize_t
-
hashstr(self, idx, tag=htag) -> ssize_tsee: hashstr(qstring *buf, const char *idx, uchar tag=htag) constidx: (C++: const char *) char const *tag: (C++: uchar)
def hashstr_buf(self, *args) ‑> PyObject *
-
hashstr_buf(self, idx, tag=htag) -> PyObject *idx: char const *tag: char
def hashval(self, *args) ‑> ssize_t
-
hashval(self, idx, tag=htag) -> ssize_tGet value of the specified hash element.idx: (C++: const char *) index into hashtag: (C++: uchar) tag of hash. Default: htagreturn: -1 if element doesn't exist or idx is nullptr. otherwise returns thevalue size in bytes
def hashval_long(self, *args) ‑> nodeidx_t
-
hashval_long(self, idx, tag=htag) -> nodeidx_tGet value of the specified hash element.idx: (C++: const char *) index into hashtag: (C++: uchar) tag of hash. Default: htagreturn: value of hash element (it should be set using hashset(nodeidx_t)), 0 ifthe element does not exist
def index(self, *args) ‑> nodeidx_t
-
index(self) -> nodeidx_t
def kill(self, *args) ‑> void
-
kill(self)Delete a netnode with all information attached to it.
def long_value(self, *args) ‑> nodeidx_t
-
long_value(self) -> nodeidx_t
def lower_bound(self, *args) ‑> nodeidx_t
-
lower_bound(self, cur, tag=stag) -> nodeidx_tGet lower bound of existing elements of supval array.cur: (C++: nodeidx_t) current indextag: (C++: uchar) tag of arrayreturn: index of first existing element of supval array >= cur BADNODE ifsupval array is empty
def lower_bound_ea(self, *args) ‑> nodeidx_t
-
lower_bound_ea(self, ea, tag=stag) -> nodeidx_tea: ea_ttag: uchar
def lower_bound_idx8(self, *args) ‑> nodeidx_t
-
lower_bound_idx8(self, alt, tag) -> nodeidx_talt: uchartag: uchar
def moveto(self, *args) ‑> size_t
-
moveto(self, destnode, count=1) -> size_tdestnode: netnodecount: nodeidx_t
def next(self, *args) ‑> bool
-
next(self) -> boolGet next netnode in the graph. Sets netnodenumber to the next existing numberretval true: okretval false: no more netnodes
def prev(self, *args) ‑> bool
-
prev(self) -> boolGet prev netnode in the graph. Sets netnodenumber to the previous existing numberretval true: okretval false: no more netnodes
def rename(self, *args) ‑> bool
-
rename(self, newname, namlen=0) -> boolRename a netnode.newname: (C++: const char *) new name of netnode. nullptr or "" means to delete name. namesof 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 usingstrlen()retval 1: okretval 0: failed, newname is already used
def set(self, *args) ‑> bool
-
set(self, value) -> boolSet value of netnode.value: (C++: const void *) pointer to valuereturn: 1 - ok
def set_long(self, *args) ‑> bool
-
set_long(self, x) -> boolValue of netnode as a long number:x: (C++: nodeidx_t)
def setblob(self, *args) ‑> bool
-
setblob(self, buf, _start, tag) -> boolStore a blob in a netnode.buf: (C++: const void *) pointer to blob to save_start: (C++: nodeidx_t)tag: (C++: uchar) tag of supval arrayreturn: success
def setblob_ea(self, *args) ‑> bool
-
setblob_ea(self, buf, ea, tag) -> boolbuf: void const *ea: ea_ttag: uchar
def start(self, *args) ‑> bool
-
start(self) -> boolGet first netnode in the graph. Sets netnodenumber to the lowest existing number.retval true: okretval false: graph is empty
def supdel(self, *args) ‑> bool
-
supdel(self, alt, tag=stag) -> boolDelete 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_ttag: ucharreturn: successsupdel(self) -> bool
def supdel_all(self, *args) ‑> bool
-
supdel_all(self, tag) -> boolDelete 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
def supdel_ea(self, *args) ‑> bool
-
supdel_ea(self, ea, tag=stag) -> boolea: ea_ttag: uchar
def supdel_idx8(self, *args) ‑> bool
-
supdel_idx8(self, alt, tag) -> boolalt: uchartag: uchar
def supdel_range(self, *args) ‑> int
-
supdel_range(self, idx1, idx2, tag) -> intDelete 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 elementsidx1: (C++: nodeidx_t) first element to deleteidx2: (C++: nodeidx_t) last element to delete + 1tag: (C++: uchar) tag of arrayreturn: number of deleted elements
def supdel_range_idx8(self, *args) ‑> int
-
supdel_range_idx8(self, idx1, idx2, tag) -> intSame as above, but accepts 8-bit indexes.idx1: (C++: uchar)idx2: (C++: uchar)tag: (C++: uchar)
def supfirst(self, *args) ‑> nodeidx_t
-
supfirst(self, tag=stag) -> nodeidx_tGet first existing element of supval array.tag: (C++: uchar) tag of arrayreturn: index of first existing element of supval array, BADNODE if supvalarray is empty
def supfirst_idx8(self, *args) ‑> nodeidx_t
-
supfirst_idx8(self, tag) -> nodeidx_ttag: uchar
def suplast(self, *args) ‑> nodeidx_t
-
suplast(self, tag=stag) -> nodeidx_tGet last existing element of supval array.tag: (C++: uchar) tag of arrayreturn: index of last existing element of supval array, BADNODE if supval arrayis empty
def suplast_idx8(self, *args) ‑> nodeidx_t
-
suplast_idx8(self, tag) -> nodeidx_ttag: uchar
def supnext(self, *args) ‑> nodeidx_t
-
supnext(self, cur, tag=stag) -> nodeidx_tGet next existing element of supval array.cur: (C++: nodeidx_t) current indextag: (C++: uchar) tag of arrayreturn: index of the next existing element of supval array, BADNODE if no moresupval array elements exist
def supnext_idx8(self, *args) ‑> nodeidx_t
-
supnext_idx8(self, alt, tag) -> nodeidx_talt: uchartag: uchar
def supprev(self, *args) ‑> nodeidx_t
-
supprev(self, cur, tag=stag) -> nodeidx_tGet previous existing element of supval array.cur: (C++: nodeidx_t) current indextag: (C++: uchar) tag of arrayreturn: index of the previous existing element of supval array BADNODE if nomore supval array elements exist
def supprev_idx8(self, *args) ‑> nodeidx_t
-
supprev_idx8(self, alt, tag) -> nodeidx_talt: uchartag: uchar
def supset(self, *args) ‑> bool
-
supset(self, alt, value, tag=stag) -> boolSet value of supval array element.alt: (C++: nodeidx_t) index into array of supvalsvalue: (C++: const void *) pointer to supval valuetag: (C++: uchar) tag of arrayretval 1: okretval 0: should not occur - indicates internal error
def supset_ea(self, *args) ‑> bool
-
supset_ea(self, ea, value, tag=stag) -> boolea: ea_tvalue: void const *tag: uchar
def supset_idx8(self, *args) ‑> bool
-
supset_idx8(self, alt, value, tag) -> boolalt: ucharvalue: void const *tag: uchar
def supshift(self, *args) ‑> size_t
-
supshift(self, _from, to, size, tag=stag) -> size_tShift 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
def supstr(self, *args) ‑> ssize_t
-
supstr(self, alt, tag=stag) -> ssize_tsee: supstr(qstring *buf, nodeidx_t alt, uchar tag=stag) constalt: (C++: nodeidx_t)tag: (C++: uchar)
def supstr_ea(self, *args) ‑> ssize_t
-
supstr_ea(self, ea, tag=stag) -> ssize_tea: ea_ttag: uchar
def supstr_idx8(self, *args) ‑> ssize_t
-
supstr_idx8(self, alt, tag) -> ssize_talt: uchartag: uchar
def supval(self, *args) ‑> ssize_t
-
supval(self, alt, tag=stag) -> ssize_tGet 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 supvalstag: (C++: uchar) tag of array. Default: stagreturn: size of value, -1 if element doesn't exist
def supval_ea(self, *args) ‑> ssize_t
-
supval_ea(self, ea, tag=stag) -> ssize_tea: ea_ttag: uchar
def supval_idx8(self, *args) ‑> ssize_t
-
supval_idx8(self, alt, tag) -> ssize_talt: uchartag: uchar
def valobj(self, *args) ‑> ssize_t
-
valobj(self) -> ssize_tGet 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
def valstr(self, *args) ‑> ssize_t
-
valstr(self) -> ssize_tsee: valstr(qstring *buf) const
def value_exists(self, *args) ‑> bool
-
value_exists(self) -> bool