diff --git a/docs/howto/swig.md b/docs/howto/swig.md index 0523ed5..17939cb 100644 --- a/docs/howto/swig.md +++ b/docs/howto/swig.md @@ -64,3 +64,27 @@ To achieve that, you want to use the `directorargout` typemap: "in output value of type 'qstrvec_t' in method '$symname'"); } } + +# "intercept" access to a structure/class field, in order to perform extra work + +For example, `idainfo.lflags` bits should be set using proper setters, +because they can have side-effects. + +. tell swig to consider the member as unreachable: + + %ignore idainfo::lflags; + +. extend the type to "manually" provide the field: + + %extend idainfo + { + // ... + uint32 _get_lflags() const { return $self->lflags; } + void _set_lflags(uint32 _f) + { + // do the job here + } + + %pythoncode { + lflags = property(_get_lflags, _set_lflags) + diff --git a/out_of_tree/parsed_notifications.zip b/out_of_tree/parsed_notifications.zip index 2559613..af3678f 100644 Binary files a/out_of_tree/parsed_notifications.zip and b/out_of_tree/parsed_notifications.zip differ diff --git a/pydoc_injections3.txt b/pydoc_injections3.txt index c885da1..2f7f83b 100644 --- a/pydoc_injections3.txt +++ b/pydoc_injections3.txt @@ -2624,13 +2624,9 @@ class hidden_range_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -11324,13 +11320,9 @@ class regvar_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -12679,13 +12671,9 @@ class func_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -13347,10 +13335,6 @@ class BasicBlock(builtins.object) | | __weakref__ | list of weak references to the object (if defined) - | - | endEA - | - | startEA Help on class FlowChart in module ida_gdl: @@ -13919,13 +13903,9 @@ class qbasic_block_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -27972,7 +27952,7 @@ class ivl_t(uval_ivl_t) | @param r: ivl_t const & | | __init__(self, *args) - | __init__(self, _off, _size) -> ivl_t + | __init__(self, _off=0, _size=0) -> ivl_t | | @param _off: uval_t | @param _size: uval_t @@ -41581,6 +41561,16 @@ class idainfo(builtins.object) | | __repr__ = _swig_repr(self) | + | _get_lflags(self, *args) -> 'uint32' + | _get_lflags(self) -> uint32 + | + | _set_lflags(self, *args) -> 'void' + | _set_lflags(self, _f) + | + | Parameters + | ---------- + | _f: uint32 + | | big_arg_align = __func(self, *args) | | gen_lzero = __func(self, *args) @@ -41736,7 +41726,7 @@ class idainfo(builtins.object) | lenxref | | lflags - | lflags + | _get_lflags(self) -> uint32 | | listnames | listnames @@ -46634,7 +46624,194 @@ get_event_module_size(*args) -> 'asize_t' Help on class meminfo_vec_t in module ida_idd: -class meminfo_vec_t(builtins.object) +class meminfo_vec_t(meminfo_vec_template_t) + | Proxy of C++ meminfo_vec_t class. + | + | Method resolution order: + | meminfo_vec_t + | meminfo_vec_template_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_meminfo_vec_t(...) + | delete_meminfo_vec_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from meminfo_vec_template_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | @param r: qvector< memory_info_t > const & + | + | __getitem__(self, *args) -> 'memory_info_t const &' + | __getitem__(self, i) -> memory_info_t + | + | @param i: size_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | @param r: qvector< memory_info_t > const & + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | @param i: size_t + | @param v: memory_info_t const & + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | Parameters + | ---------- + | x: memory_info_t const & + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | @param x: memory_info_t const & + | + | at(self, *args) -> 'memory_info_t const &' + | at(self, _idx) -> memory_info_t + | + | @param _idx: size_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | begin(self) -> memory_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | end(self) -> memory_info_t + | + | erase(self, *args) -> 'qvector< memory_info_t >::iterator' + | erase(self, it) -> memory_info_t + | + | @param it: qvector< memory_info_t >::iterator + | + | erase(self, first, last) -> memory_info_t + | + | @param first: qvector< memory_info_t >::iterator + | @param last: qvector< memory_info_t >::iterator + | + | extract(self, *args) -> 'memory_info_t *' + | extract(self) -> memory_info_t + | + | find(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | find(self, x) -> memory_info_t + | + | @param x: memory_info_t const & + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memory_info_t()) + | + | @param x: memory_info_t const & + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | @param x: memory_info_t const & + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | @param s: memory_info_t * + | @param len: size_t + | + | insert(self, *args) -> 'qvector< memory_info_t >::iterator' + | insert(self, it, x) -> memory_info_t + | + | @param it: qvector< memory_info_t >::iterator + | @param x: memory_info_t const & + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memory_info_t &' + | push_back(self, x) + | + | @param x: memory_info_t const & + | + | push_back(self) -> memory_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | @param cnt: size_t + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | + | @param _newsize: size_t + | @param x: memory_info_t const & + | + | resize(self, _newsize) + | + | @param _newsize: size_t + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | @param r: qvector< memory_info_t > & + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from meminfo_vec_template_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from meminfo_vec_template_t: + | + | __hash__ = None + +Help on class meminfo_vec_template_t in module ida_idd: + +class meminfo_vec_template_t(builtins.object) | Proxy of C++ qvector< memory_info_t > class. | | Methods defined here: @@ -46650,8 +46827,8 @@ class meminfo_vec_t(builtins.object) | @param i: size_t | | __init__(self, *args) - | __init__(self) -> meminfo_vec_t - | __init__(self, x) -> meminfo_vec_t + | __init__(self) -> meminfo_vec_template_t + | __init__(self, x) -> meminfo_vec_template_t | | @param x: qvector< memory_info_t > const & | @@ -46674,8 +46851,8 @@ class meminfo_vec_t(builtins.object) | @param i: size_t | @param v: memory_info_t const & | - | __swig_destroy__ = delete_meminfo_vec_t(...) - | delete_meminfo_vec_t(self) + | __swig_destroy__ = delete_meminfo_vec_template_t(...) + | delete_meminfo_vec_template_t(self) | | _del(self, *args) -> 'bool' | _del(self, x) -> bool @@ -46938,13 +47115,9 @@ class memory_info_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea @@ -47424,13 +47597,9 @@ class scattered_segm_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -49199,6 +49368,9 @@ class IDP_Hooks(builtins.object) | @param insn: (const insn_t*) the instruction | @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks | @return: probability 1..100 + | @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, + | 51..99 a function (IDA needs another proof), 100 a function (no other + | proofs needed) | | ev_may_show_sreg(self, *args) -> 'int' | ev_may_show_sreg(self, current_ea) -> int @@ -51472,6 +51644,9 @@ class processor_t(IDP_Hooks) | @param insn: (const insn_t*) the instruction | @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks | @return: probability 1..100 + | @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, + | 51..99 a function (IDA needs another proof), 100 a function (no other + | proofs needed) | | ev_may_show_sreg(self, *args) | ev_may_show_sreg(self, current_ea) -> int @@ -64414,9 +64589,9 @@ get_server_connection(*args) -> 'lumina_client_t *' Help on function get_server_connection2 in module ida_lumina: get_server_connection2(*args) -> 'lumina_client_t *' - get_server_connection2(feature) -> lumina_client_t + get_server_connection2(flags) -> lumina_client_t - @param feature: enum lumina_feature_t + @param flags: int Help on function has_backup_metadata in module ida_lumina: @@ -64908,6 +65083,11 @@ class lumina_client_t(builtins.object) | __swig_destroy__ = delete_lumina_client_t(...) | delete_lumina_client_t(self) | + | del_history(self, *args) -> 'bool' + | del_history(self, funcs) -> bool + | + | @param funcs: eavec_t const & + | | get_pop(self, *args) -> 'pkt_get_pop_result_t *' | get_pop(self, nresults=10) -> pkt_get_pop_result_t | @@ -64956,6 +65136,42 @@ class lumina_client_t(builtins.object) | thisown | The membership flag +Help on class lumina_info_t in module ida_lumina: + +class lumina_info_t(builtins.object) + | Proxy of C++ lumina_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, __client=peer_conn_t(), __server=lumina_server_info_t()) -> lumina_info_t + | + | @param __client: peer_conn_t + | @param __server: lumina_server_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lumina_info_t(...) + | delete_lumina_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | client + | client + | + | server + | server + | + | thisown + | The membership flag + Help on class lumina_op_res_vec_t in module ida_lumina: class lumina_op_res_vec_t(builtins.object) @@ -65141,6 +65357,114 @@ class lumina_op_res_vec_t(builtins.object) | | __hash__ = None +Help on class lumina_server_info_t in module ida_lumina: + +class lumina_server_info_t(builtins.object) + | Proxy of C++ lumina_server_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, __macaddr=None, __verstr=None, __start_time=0, __current_time=0) -> lumina_server_info_t + | + | @param __macaddr: char const * + | @param __verstr: char const * + | @param __start_time: utc_timestamp_t + | @param __current_time: utc_timestamp_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lumina_server_info_t(...) + | delete_lumina_server_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | current_time + | current_time + | + | macaddr + | macaddr + | + | start_time + | start_time + | + | thisown + | The membership flag + | + | verstr + | verstr + +Help on class lumina_user_t in module ida_lumina: + +class lumina_user_t(builtins.object) + | Proxy of C++ lumina_user_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, __license_info=user_license_info_t(), __name=None, __karma=0, __last_active=0, __features=0) -> lumina_user_t + | + | @param __license_info: user_license_info_t + | @param __name: char const * + | @param __karma: int + | @param __last_active: utc_timestamp_t + | @param __features: uint32 + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lumina_user_t(...) + | delete_lumina_user_t(self) + | + | can_del_history(self, *args) -> 'bool' + | can_del_history(self) -> bool + | + | is_admin(self, *args) -> 'bool' + | is_admin(self) -> bool + | + | set_can_del_history(self, *args) -> 'void' + | set_can_del_history(self, v=True) + | + | @param v: bool + | + | set_is_admin(self, *args) -> 'void' + | set_is_admin(self, v=True) + | + | @param v: bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | features + | features + | + | karma + | karma + | + | last_active + | last_active + | + | license_info + | license_info + | + | name + | name + | + | thisown + | The membership flag + Help on class md_type_parts_t in module ida_lumina: class md_type_parts_t(builtins.object) @@ -65315,6 +65639,107 @@ class pattern_id_t(builtins.object) | type | type +Help on class peer_conn_t in module ida_lumina: + +class peer_conn_t(builtins.object) + | Proxy of C++ peer_conn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, __session_id=0, __peer_name=None, __user=lumina_user_t(), __established=0) -> peer_conn_t + | + | @param __session_id: uint32 + | @param __peer_name: char const * + | @param __user: lumina_user_t + | @param __established: utc_timestamp_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_peer_conn_t(...) + | delete_peer_conn_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | established + | established + | + | peer_name + | peer_name + | + | session_id + | session_id + | + | thisown + | The membership flag + | + | user + | user + +Help on class pkt_get_lumina_info_result_t in module ida_lumina: + +class pkt_get_lumina_info_result_t(builtins.object) + | Proxy of C++ pkt_get_lumina_info_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_lumina_info_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_get_lumina_info_result_t(...) + | delete_pkt_get_lumina_info_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | info + | + | thisown + | The membership flag + +Help on class pkt_get_lumina_info_t in module ida_lumina: + +class pkt_get_lumina_info_t(builtins.object) + | Proxy of C++ pkt_get_lumina_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_lumina_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_get_lumina_info_t(...) + | delete_pkt_get_lumina_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + Help on class pkt_get_pop_result_t in module ida_lumina: class pkt_get_pop_result_t(builtins.object) @@ -65408,11 +65833,17 @@ class pkt_helo_t(builtins.object) | license_id | license_id | + | password + | password + | | record_conv | record_conv | | thisown | The membership flag + | + | username + | username Help on class pkt_pull_md_result_t in module ida_lumina: @@ -66269,24 +66700,24 @@ split_metadata(*args) -> 'PyObject *' @param md: metadata_t const & -Help on class user_identification_t in module ida_lumina: +Help on class user_license_info_t in module ida_lumina: -class user_identification_t(builtins.object) - | Proxy of C++ user_identification_t class. +class user_license_info_t(builtins.object) + | Proxy of C++ user_license_info_t class. | | Methods defined here: | | __init__(self, *args) - | __init__(self, __license_id=None, __user_name=None, __email=None) -> user_identification_t + | __init__(self, __id=None, __name=None, __email=None) -> user_license_info_t | - | @param __license_id: char const * - | @param __user_name: char const * + | @param __id: char const * + | @param __name: char const * | @param __email: char const * | | __repr__ = _swig_repr(self) | - | __swig_destroy__ = delete_user_identification_t(...) - | delete_user_identification_t(self) + | __swig_destroy__ = delete_user_license_info_t(...) + | delete_user_license_info_t(self) | | ---------------------------------------------------------------------- | Data descriptors defined here: @@ -66300,14 +66731,14 @@ class user_identification_t(builtins.object) | email | email | - | license_id - | license_id + | id + | id + | + | name + | name | | thisown | The membership flag - | - | user_name - | user_name Help on class user_stkpnt_t in module ida_lumina: @@ -67125,6 +67556,12 @@ class moddata_diff_helper_t(builtins.object) | @param arg0: diff_source_idx_t | @param arg1: void * | + | print_diffpos_details(self, *args) -> 'void' + | print_diffpos_details(self, arg0, arg1) + | + | @param arg0: qstrvec_t * + | @param arg1: idbattr_info_t const & + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -67134,6 +67571,9 @@ class moddata_diff_helper_t(builtins.object) | __weakref__ | list of weak references to the object (if defined) | + | additional_mh_flags + | additional_mh_flags + | | fields | fields | @@ -75231,13 +75671,9 @@ class range_t(builtins.object) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -77028,10 +77464,6 @@ class segment_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | - | startEA - | | ---------------------------------------------------------------------- | Data and other attributes inherited from ida_range.range_t: | @@ -77530,13 +77962,9 @@ class sreg_range_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -88776,6 +89204,14 @@ class outctx_t(outctx_base_t) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | Output a number with the specified base (binary, octal, decimal, hex) The number + | is output without color codes. see also out_long() + | + | @param Word: (C++: uval_t) + | @param radix: (C++: char) + | | out_custom_mnem(self, *args) -> 'void' | out_custom_mnem(self, mnem, width=8, postfix=None) | Output custom mnemonic for 'insn'. E.g. if it should differ from the one in @@ -89011,14 +89447,6 @@ class outctx_t(outctx_base_t) | | @param ea: (C++: ea_t) | - | out_btoa(self, *args) -> 'void' - | out_btoa(self, Word, radix=0) - | Output a number with the specified base (binary, octal, decimal, hex) The number - | is output without color codes. see also out_long() - | - | @param Word: (C++: uval_t) - | @param radix: (C++: char) - | | out_char(self, *args) -> 'void' | out_char(self, c) | Output one character. The character is output without color codes. see also @@ -90111,6 +90539,13 @@ __l2m1(v) 'signed long' version of -1, then return -1. Otherwise, return 'v'. +Help on function __m1tol in module idc: + +__m1tol(v) + Long -1 to BADNODE: If the 'v' appears to be the + 'signed long' version of -1, then return BADNODE. + Otherwise, return 'v'. + Help on function __warn_once_deprecated_proto_confusion in module idc: __warn_once_deprecated_proto_confusion(what, alternative) @@ -95259,6 +95694,10 @@ Documentation on variable GFE_VALUE in module ida_bytes: get flags with FF_IVL & MS_VAL. It is much slower under remote debugging because the kernel needs to read the process memory. +Documentation on variable GFE_IDB_VALUE in module ida_bytes: + + get flags with FF_IVL & MS_VAL. but never use the debugger memory. + Documentation on variable MS_VAL in module ida_bytes: Mask for byte value. @@ -100953,10 +101392,6 @@ Documentation on variable idainfo.s_genflags in module ida_ida: General idainfo flags -Documentation on variable idainfo.lflags in module ida_ida: - - Misc. database flags - Documentation on variable idainfo.database_change_count in module ida_ida: incremented after each byte and regular segment modifications @@ -101178,6 +101613,10 @@ Documentation on variable idainfo.appcall_options in module ida_ida: appcall options, see idd.hpp +Documentation on variable idainfo.lflags in module ida_ida: + + Misc. database flags + Documentation on variable INFFL_AUTO in module ida_ida: Autoanalysis is enabled? @@ -106670,6 +107109,10 @@ Documentation on variable MERGE_KIND_DEBUGGER in module ida_merge: debugger data +Documentation on variable MERGE_KIND_DBG_MEMREGS in module ida_merge: + + manual memory regions (debugger) + Documentation on variable MERGE_KIND_LAST in module ida_merge: last predefined merge handler type. please note that there can be more merge @@ -106748,6 +107191,22 @@ Documentation on variable moddata_diff_helper_t.module_name in module ida_merge: will be used as a prefix for field desc +Documentation on variable moddata_diff_helper_t.netnode_name in module ida_merge: + + name of netnode with module data attributes + +Documentation on variable moddata_diff_helper_t.fields in module ida_merge: + + module data attribute descriptions + +Documentation on variable moddata_diff_helper_t.nfields in module ida_merge: + + number of descriptions + +Documentation on variable moddata_diff_helper_t.additional_mh_flags in module ida_merge: + + additional merge handler flags + Documentation on variable NDS_IS_BOOL in module ida_merge: boolean value @@ -107941,7 +108400,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.0. + IDA SDK v8.1. Documentation on variable MAXSTR in module ida_pro: @@ -108564,6 +109023,10 @@ Documentation on variable MOVE_SEGM_MAPPING in module ida_segment: Memory mapping ranges of addresses hinder segment movement. +Documentation on variable MOVE_SEGM_INVAL in module ida_segment: + + Invalid argument (delta/target does not fit the address space) + Documentation on variable CSS_OK in module ida_segment: ok diff --git a/python/idadex.py b/python/idadex.py index 53184ea..97bb518 100644 --- a/python/idadex.py +++ b/python/idadex.py @@ -31,6 +31,10 @@ ushort = uint16 __EA64__ = ida_idaapi.BADADDR == 0xFFFFFFFFFFFFFFFF ea_t = uint64 if __EA64__ else uint32 +# Dalvik indices are stored as uint32 +def to_uint32(v): + return int.from_bytes(v, byteorder='little') & 0xFFFFFFFF + # parse a ctypes struct from byte data in str_ at 'off' def get_struct(str_, off, struct): s = struct() @@ -95,7 +99,7 @@ def unpack_dd(buf, off): def unpack_dq(buf, off): (xl, off) = unpack_dd(buf, off) (xh, off) = unpack_dd(buf, off) - x = (long(xh) << 32) | xl + x = (xh << 32) | xl if x > 0x8000000000000000: x = x - 0x10000000000000000 return (x, off) @@ -286,7 +290,7 @@ class Dex(object): return Dex.as_string(raw) def get_method_idx(self, ea): - return self.nn_cmn.altval(ea, Dex.DEXCMN_METHOD_ID) + return to_uint32(self.nn_cmn.supval_ea(ea, Dex.DEXCMN_METHOD_ID)) def get_method(self, from_ea, method_idx): nn_var = self.get_nn_var(from_ea) diff --git a/python/idc.py b/python/idc.py index 11e704d..2e42eca 100644 --- a/python/idc.py +++ b/python/idc.py @@ -4502,6 +4502,17 @@ def __l2m1(v): return v +def __m1tol(v): + """ + Long -1 to BADNODE: If the 'v' appears to be the + 'signed long' version of -1, then return BADNODE. + Otherwise, return 'v'. + """ + if v == -1: + return ida_netnode.BADNODE + else: + return v + AR_LONG = ida_netnode.atag """Array of longs""" @@ -4749,9 +4760,9 @@ def get_next_index(tag, array_id, idx): node = __GetArrayById(array_id) try: if tag == AR_LONG: - return __l2m1(node.altnext(idx, tag)) + return __l2m1(node.altnext(__m1tol(idx), tag)) elif tag == AR_STR: - return __l2m1(node.supnext(idx, tag)) + return __l2m1(node.supnext(__m1tol(idx), tag)) else: return -1 except OverflowError: @@ -4773,9 +4784,9 @@ def get_prev_index(tag, array_id, idx): node = __GetArrayById(array_id) try: if tag == AR_LONG: - return __l2m1(node.altprev(idx, tag)) + return __l2m1(node.altprev(__m1tol(idx), tag)) elif tag == AR_STR: - return __l2m1(node.supprev(idx, tag)) + return __l2m1(node.supprev(__m1tol(idx), tag)) else: return -1 except OverflowError: diff --git a/pywraps/py_gdl.py b/pywraps/py_gdl.py index 47be0c6..9339d68 100644 --- a/pywraps/py_gdl.py +++ b/pywraps/py_gdl.py @@ -39,9 +39,6 @@ class BasicBlock(object): for i in range(0, q.nsucc(self.id)): yield self._fc[q.succ(self.id, i)] - startEA = ida_idaapi._make_badattr_property("startEA", "start_ea") - endEA = ida_idaapi._make_badattr_property("endEA", "end_ea") - # ----------------------------------------------------------------------- class FlowChart(object): """ diff --git a/pywraps/py_idaapi.py b/pywraps/py_idaapi.py index a8f9a99..95b6bd4 100644 --- a/pywraps/py_idaapi.py +++ b/pywraps/py_idaapi.py @@ -774,11 +774,6 @@ class IDAPython_displayhook: _IDAPython_displayhook = IDAPython_displayhook() sys.displayhook = _IDAPython_displayhook.displayhook -def _make_badattr_property(bad_attr, new_attr): - def _raise(*args): - raise AttributeError("Property %s has been replaced with %s" % (bad_attr, new_attr)) - return property(_raise, _raise) - def _make_one_time_warning_message(bad_attr, new_attr): warned = [False] def f(): diff --git a/release_pydoc_injections3.txt b/release_pydoc_injections3.txt index 672077f..004941e 100644 --- a/release_pydoc_injections3.txt +++ b/release_pydoc_injections3.txt @@ -2624,13 +2624,9 @@ class hidden_range_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -11319,13 +11315,9 @@ class regvar_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -12674,13 +12666,9 @@ class func_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -13342,10 +13330,6 @@ class BasicBlock(builtins.object) | | __weakref__ | list of weak references to the object (if defined) - | - | endEA - | - | startEA Help on class FlowChart in module ida_gdl: @@ -13914,13 +13898,9 @@ class qbasic_block_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -27952,7 +27932,7 @@ class ivl_t(uval_ivl_t) | @param r: ivl_t const & | | __init__(self, *args) - | __init__(self, _off, _size) -> ivl_t + | __init__(self, _off=0, _size=0) -> ivl_t | | @param _off: uval_t | @param _size: uval_t @@ -41561,6 +41541,16 @@ class idainfo(builtins.object) | | __repr__ = _swig_repr(self) | + | _get_lflags(self, *args) -> 'uint32' + | _get_lflags(self) -> uint32 + | + | _set_lflags(self, *args) -> 'void' + | _set_lflags(self, _f) + | + | Parameters + | ---------- + | _f: uint32 + | | big_arg_align = __func(self, *args) | | gen_lzero = __func(self, *args) @@ -41716,7 +41706,7 @@ class idainfo(builtins.object) | lenxref | | lflags - | lflags + | _get_lflags(self) -> uint32 | | listnames | listnames @@ -46609,7 +46599,194 @@ get_event_module_size(*args) -> 'asize_t' Help on class meminfo_vec_t in module ida_idd: -class meminfo_vec_t(builtins.object) +class meminfo_vec_t(meminfo_vec_template_t) + | Proxy of C++ meminfo_vec_t class. + | + | Method resolution order: + | meminfo_vec_t + | meminfo_vec_template_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_meminfo_vec_t(...) + | delete_meminfo_vec_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from meminfo_vec_template_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | @param r: qvector< memory_info_t > const & + | + | __getitem__(self, *args) -> 'memory_info_t const &' + | __getitem__(self, i) -> memory_info_t + | + | @param i: size_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | @param r: qvector< memory_info_t > const & + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | @param i: size_t + | @param v: memory_info_t const & + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | Parameters + | ---------- + | x: memory_info_t const & + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | @param x: memory_info_t const & + | + | at(self, *args) -> 'memory_info_t const &' + | at(self, _idx) -> memory_info_t + | + | @param _idx: size_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | begin(self) -> memory_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | end(self) -> memory_info_t + | + | erase(self, *args) -> 'qvector< memory_info_t >::iterator' + | erase(self, it) -> memory_info_t + | + | @param it: qvector< memory_info_t >::iterator + | + | erase(self, first, last) -> memory_info_t + | + | @param first: qvector< memory_info_t >::iterator + | @param last: qvector< memory_info_t >::iterator + | + | extract(self, *args) -> 'memory_info_t *' + | extract(self) -> memory_info_t + | + | find(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | find(self, x) -> memory_info_t + | + | @param x: memory_info_t const & + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memory_info_t()) + | + | @param x: memory_info_t const & + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | @param x: memory_info_t const & + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | @param s: memory_info_t * + | @param len: size_t + | + | insert(self, *args) -> 'qvector< memory_info_t >::iterator' + | insert(self, it, x) -> memory_info_t + | + | @param it: qvector< memory_info_t >::iterator + | @param x: memory_info_t const & + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memory_info_t &' + | push_back(self, x) + | + | @param x: memory_info_t const & + | + | push_back(self) -> memory_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | @param cnt: size_t + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | + | @param _newsize: size_t + | @param x: memory_info_t const & + | + | resize(self, _newsize) + | + | @param _newsize: size_t + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | @param r: qvector< memory_info_t > & + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from meminfo_vec_template_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from meminfo_vec_template_t: + | + | __hash__ = None + +Help on class meminfo_vec_template_t in module ida_idd: + +class meminfo_vec_template_t(builtins.object) | Proxy of C++ qvector< memory_info_t > class. | | Methods defined here: @@ -46625,8 +46802,8 @@ class meminfo_vec_t(builtins.object) | @param i: size_t | | __init__(self, *args) - | __init__(self) -> meminfo_vec_t - | __init__(self, x) -> meminfo_vec_t + | __init__(self) -> meminfo_vec_template_t + | __init__(self, x) -> meminfo_vec_template_t | | @param x: qvector< memory_info_t > const & | @@ -46649,8 +46826,8 @@ class meminfo_vec_t(builtins.object) | @param i: size_t | @param v: memory_info_t const & | - | __swig_destroy__ = delete_meminfo_vec_t(...) - | delete_meminfo_vec_t(self) + | __swig_destroy__ = delete_meminfo_vec_template_t(...) + | delete_meminfo_vec_template_t(self) | | _del(self, *args) -> 'bool' | _del(self, x) -> bool @@ -46913,13 +47090,9 @@ class memory_info_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea @@ -47399,13 +47572,9 @@ class scattered_segm_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -49164,6 +49333,9 @@ class IDP_Hooks(builtins.object) | @param insn: (const insn_t*) the instruction | @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks | @return: probability 1..100 + | @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, + | 51..99 a function (IDA needs another proof), 100 a function (no other + | proofs needed) | | ev_may_show_sreg(self, *args) -> 'int' | ev_may_show_sreg(self, current_ea) -> int @@ -51432,6 +51604,9 @@ class processor_t(IDP_Hooks) | @param insn: (const insn_t*) the instruction | @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks | @return: probability 1..100 + | @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, + | 51..99 a function (IDA needs another proof), 100 a function (no other + | proofs needed) | | ev_may_show_sreg(self, *args) | ev_may_show_sreg(self, current_ea) -> int @@ -63523,6 +63698,12 @@ class moddata_diff_helper_t(builtins.object) | @param arg0: diff_source_idx_t | @param arg1: void * | + | print_diffpos_details(self, *args) -> 'void' + | print_diffpos_details(self, arg0, arg1) + | + | @param arg0: qstrvec_t * + | @param arg1: idbattr_info_t const & + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -63532,6 +63713,9 @@ class moddata_diff_helper_t(builtins.object) | __weakref__ | list of weak references to the object (if defined) | + | additional_mh_flags + | additional_mh_flags + | | fields | fields | @@ -71629,13 +71813,9 @@ class range_t(builtins.object) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -73426,10 +73606,6 @@ class segment_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | - | startEA - | | ---------------------------------------------------------------------- | Data and other attributes inherited from ida_range.range_t: | @@ -73928,13 +74104,9 @@ class sreg_range_t(ida_range.range_t) | __weakref__ | list of weak references to the object (if defined) | - | endEA - | | end_ea | end_ea | - | startEA - | | start_ea | start_ea | @@ -85174,6 +85346,14 @@ class outctx_t(outctx_base_t) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | Output a number with the specified base (binary, octal, decimal, hex) The number + | is output without color codes. see also out_long() + | + | @param Word: (C++: uval_t) + | @param radix: (C++: char) + | | out_custom_mnem(self, *args) -> 'void' | out_custom_mnem(self, mnem, width=8, postfix=None) | Output custom mnemonic for 'insn'. E.g. if it should differ from the one in @@ -85409,14 +85589,6 @@ class outctx_t(outctx_base_t) | | @param ea: (C++: ea_t) | - | out_btoa(self, *args) -> 'void' - | out_btoa(self, Word, radix=0) - | Output a number with the specified base (binary, octal, decimal, hex) The number - | is output without color codes. see also out_long() - | - | @param Word: (C++: uval_t) - | @param radix: (C++: char) - | | out_char(self, *args) -> 'void' | out_char(self, c) | Output one character. The character is output without color codes. see also @@ -86509,6 +86681,13 @@ __l2m1(v) 'signed long' version of -1, then return -1. Otherwise, return 'v'. +Help on function __m1tol in module idc: + +__m1tol(v) + Long -1 to BADNODE: If the 'v' appears to be the + 'signed long' version of -1, then return BADNODE. + Otherwise, return 'v'. + Help on function __warn_once_deprecated_proto_confusion in module idc: __warn_once_deprecated_proto_confusion(what, alternative) @@ -91657,6 +91836,10 @@ Documentation on variable GFE_VALUE in module ida_bytes: get flags with FF_IVL & MS_VAL. It is much slower under remote debugging because the kernel needs to read the process memory. +Documentation on variable GFE_IDB_VALUE in module ida_bytes: + + get flags with FF_IVL & MS_VAL. but never use the debugger memory. + Documentation on variable MS_VAL in module ida_bytes: Mask for byte value. @@ -97351,10 +97534,6 @@ Documentation on variable idainfo.s_genflags in module ida_ida: General idainfo flags -Documentation on variable idainfo.lflags in module ida_ida: - - Misc. database flags - Documentation on variable idainfo.database_change_count in module ida_ida: incremented after each byte and regular segment modifications @@ -97576,6 +97755,10 @@ Documentation on variable idainfo.appcall_options in module ida_ida: appcall options, see idd.hpp +Documentation on variable idainfo.lflags in module ida_ida: + + Misc. database flags + Documentation on variable INFFL_AUTO in module ida_ida: Autoanalysis is enabled? @@ -103055,6 +103238,10 @@ Documentation on variable MERGE_KIND_DEBUGGER in module ida_merge: debugger data +Documentation on variable MERGE_KIND_DBG_MEMREGS in module ida_merge: + + manual memory regions (debugger) + Documentation on variable MERGE_KIND_LAST in module ida_merge: last predefined merge handler type. please note that there can be more merge @@ -103133,6 +103320,22 @@ Documentation on variable moddata_diff_helper_t.module_name in module ida_merge: will be used as a prefix for field desc +Documentation on variable moddata_diff_helper_t.netnode_name in module ida_merge: + + name of netnode with module data attributes + +Documentation on variable moddata_diff_helper_t.fields in module ida_merge: + + module data attribute descriptions + +Documentation on variable moddata_diff_helper_t.nfields in module ida_merge: + + number of descriptions + +Documentation on variable moddata_diff_helper_t.additional_mh_flags in module ida_merge: + + additional merge handler flags + Documentation on variable NDS_IS_BOOL in module ida_merge: boolean value @@ -104326,7 +104529,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.0. + IDA SDK v8.1. Documentation on variable MAXSTR in module ida_pro: @@ -104949,6 +105152,10 @@ Documentation on variable MOVE_SEGM_MAPPING in module ida_segment: Memory mapping ranges of addresses hinder segment movement. +Documentation on variable MOVE_SEGM_INVAL in module ida_segment: + + Invalid argument (delta/target does not fit the address space) + Documentation on variable CSS_OK in module ida_segment: ok diff --git a/swig/ida.i b/swig/ida.i index 1cd7279..53032d1 100644 --- a/swig/ida.i +++ b/swig/ida.i @@ -10,6 +10,7 @@ %ignore idainfo::padding2; %ignore idainfo::idainfo; %ignore idainfo::~idainfo; +%ignore idainfo::lflags; %ignore inf_get_procname(); %ignore inf_get_strlit_pref(); @@ -44,8 +45,29 @@ return buf; } + uint32 _get_lflags() const { return $self->lflags; } + void _set_lflags(uint32 _f) + { + const uint32 _was = $self->lflags; +#define _DEF_BITSET(Bit, Setter) if ( (_was & Bit) != (_f & Bit) ) Setter((_f & Bit) != 0); + _DEF_BITSET(LFLG_PC_FPP, inf_set_decode_fpp); + _DEF_BITSET(LFLG_PC_FLAT, inf_set_32bit); + _DEF_BITSET(LFLG_64BIT, inf_set_64bit); + _DEF_BITSET(LFLG_IS_DLL, inf_set_dll); + _DEF_BITSET(LFLG_FLAT_OFF32, inf_set_flat_off32); + _DEF_BITSET(LFLG_MSF, inf_set_be); + _DEF_BITSET(LFLG_WIDE_HBF, inf_set_wide_high_byte_first); + _DEF_BITSET(LFLG_DBG_NOPATH, inf_set_dbg_no_store_path); + _DEF_BITSET(LFLG_SNAPSHOT, inf_set_snapshot); + _DEF_BITSET(LFLG_PACK, inf_set_pack_idb); + _DEF_BITSET(LFLG_COMPRESS, inf_set_compress_idb); + _DEF_BITSET(LFLG_KERNMODE, inf_set_kernel_mode); +#undef _DEF_BITSET + } + %pythoncode { abiname = property(get_abiname) + lflags = property(_get_lflags, _set_lflags) #ifdef MISSED_BC695 minEA = ida_idaapi._make_missed_695bwcompat_property("minEA", "min_ea", has_setter=True) maxEA = ida_idaapi._make_missed_695bwcompat_property("maxEA", "max_ea", has_setter=True) diff --git a/swig/idd.i b/swig/idd.i index ac1c863..29aae89 100644 --- a/swig/idd.i +++ b/swig/idd.i @@ -32,7 +32,7 @@ %uncomparable_elements_qvector(exception_info_t, excvec_t); %uncomparable_elements_qvector(process_info_t, procinfo_vec_t); %template(call_stack_info_vec_t) qvector; -%template(meminfo_vec_t) qvector; +%template(meminfo_vec_template_t) qvector; %include "idd.hpp" diff --git a/swig/idp.i b/swig/idp.i index 2e2caa3..cc3c14f 100644 --- a/swig/idp.i +++ b/swig/idp.i @@ -59,6 +59,8 @@ struct undo_records_t; %ignore hook_event_listener; %ignore unhook_event_listener; %ignore ignore_micro_t; +%ignore modctx_t; +%ignore ea_helper_t; %ignore procmod_t; %ignore plugmod_t; %ignore get_hexdsp; @@ -67,7 +69,7 @@ struct undo_records_t; %ignore set_module_data; %ignore clr_module_data; %ignore get_module_data; - +%ignore get_modctx; // @arnaud %ignore notify__calc_next_eas; diff --git a/swig/lumina.i b/swig/lumina.i index 128d5b6..1a796f4 100644 --- a/swig/lumina.i +++ b/swig/lumina.i @@ -5,6 +5,7 @@ %feature("nodirector") lumina_client_t; %ignore lumina_client_t::lumina_client_t; +%ignore lumina_client_t::can_del_history; %ignore metadata_t; %ignore metadata_creator_t; @@ -62,6 +63,8 @@ %rpc_packet_data_t(pkt_push_md_result_t, PKT_PUSH_MD_RESULT); %rpc_packet_data_t(pkt_get_pop_t, PKT_GET_POP); %rpc_packet_data_t(pkt_get_pop_result_t, PKT_GET_POP_RESULT); +%rpc_packet_data_t(pkt_get_lumina_info_t, PKT_GET_LUMINA_INFO); +%rpc_packet_data_t(pkt_get_lumina_info_result_t, PKT_GET_LUMINA_INFO_RESULT); %template(lumina_op_res_vec_t) qvector; diff --git a/swig/range.i b/swig/range.i index 8d82eff..e0b0642 100644 --- a/swig/range.i +++ b/swig/range.i @@ -22,13 +22,6 @@ } }; -%extend range_t { - %pythoncode { - startEA = ida_idaapi._make_badattr_property("startEA", "start_ea") - endEA = ida_idaapi._make_badattr_property("endEA", "end_ea") - } -}; - %pythoncode %{ # # diff --git a/swig/ua.i b/swig/ua.i index 9cae99f..5abfa17 100644 --- a/swig/ua.i +++ b/swig/ua.i @@ -14,6 +14,10 @@ %ignore get_printable_immvals; %rename (get_printable_immvals) py_get_printable_immvals; %ignore get_immval; +%ignore insn_get_next_byte; +%ignore insn_get_next_word; +%ignore insn_get_next_dword; +%ignore insn_get_next_qword; %ignore insn_create_op_data; %ignore construct_macro; diff --git a/tools/chkapi.py b/tools/chkapi.py index e8aeacc..c54f4ac 100644 --- a/tools/chkapi.py +++ b/tools/chkapi.py @@ -391,6 +391,7 @@ def check_python(args): "call_stack_t" : { "mustinherit" : "call_stack_info_vec_t" }, "abstract_graph_t" : { "mustinherit" : "ida_gdl.gdl_graph_t" }, "mutable_graph_t" : { "mustinherit" : "abstract_graph_t" }, + "meminfo_vec_t" : { "mustinherit" : "meminfo_vec_template_t" }, # Just look for the presence of those things "BADNODE" : {}, diff --git a/tools/genhooks/doxy_gen_notifs.cfg.in b/tools/genhooks/doxy_gen_notifs.cfg.in index 54f3981..e4fab19 100644 --- a/tools/genhooks/doxy_gen_notifs.cfg.in +++ b/tools/genhooks/doxy_gen_notifs.cfg.in @@ -1998,7 +1998,8 @@ PREDEFINED = __cplusplus \ DECLARE_TINFO_HELPERS()= \ DECLARE_COMPARISONS()= \ ENUM_SIZE()= \ - OBSOLETE()= + OBSOLETE()= \ + NONNULL_s=s # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/tools/inject_pydoc.py b/tools/inject_pydoc.py index 4bc18b3..410367d 100644 --- a/tools/inject_pydoc.py +++ b/tools/inject_pydoc.py @@ -1727,6 +1727,8 @@ class prototype_t(object): name, desc = case.change_param(name, desc) text = indent + "@param " + name + if name.startswith("NONNULL_") and not name in self.ctypes: + name = name[8:] if name in self.ctypes: if desc == self.ctypes[name]: # avoid some duplication desc = ""