Module ida_tryblks
Architecture independent exception handling info.
Try blocks have the following general properties: * A try block specifies a possibly fragmented guarded code region. * Each try block has always at least one catch/except block description * Each catch block contains its boundaries and a filter. * Additionally a catch block can hold sp adjustment and the offset to the exception object offset (C++). * Try blocks can be nested. Nesting is automatically calculated at the retrieval time. * There may be (nested) multiple try blocks starting at the same address.
See examples in tests/input/src/eh_tests.
Global variables
var TBEA_CATCH-
is EA the start of a c++ catch/cleanup block?
var TBEA_FALLTHRU-
is there a fall through into provided ea from an unwind region
var TBEA_SEHFILT-
is EA the start of a seh filter?
var TBEA_SEHLPAD-
is EA the start of a seh finally/except block?
var TBEA_SEHTRY-
is EA within a seh try block
var TBEA_TRY-
is EA within a c++ try block?
var TBERR_EMPTY-
empty try block
var TBERR_END-
bad end address
var TBERR_INTERSECT-
range would intersect inner tryblk
var TBERR_KIND-
illegal try block kind
var TBERR_NO_CATCHES-
no catch blocks at all
var TBERR_OK-
ok
var TBERR_ORDER-
bad address order
var TBERR_START-
bad start address
Functions
def add_tryblk(tb: tryblk_t) ‑> int-
add_tryblk(tb) -> int Add one try block information.
@param tb: (C++: const tryblk_t &) try block to add. @return: error code; 0 means good
def del_tryblks(range: range_t)-
del_tryblks(range) Delete try block information in the specified range.
@param range: (C++: const range_t &) the range to be cleared
def find_syseh(ea: ea_t)-
find_syseh(ea) -> ea_t Find the start address of the system eh region including the argument.
@param ea: (C++: ea_t) search address @return: start address of surrounding tryblk, otherwise BADADDR
def get_tryblks(tbv: tryblks_t, range: range_t)-
get_tryblks(tbv, range) -> size_t Retrieve try block information from the specified address range. Try blocks are sorted by starting address and their nest levels calculated.
@param tbv: (C++: tryblks_t *) output buffer; may be nullptr @param range: (C++: const range_t &) address range to change @return: number of found try blocks
def is_ea_tryblks(ea: ea_t, flags: uint32)-
is_ea_tryblks(ea, flags) -> bool Check if the given address ea is part of tryblks description.
@param ea: (C++: ea_t) address to check @param flags: (C++: uint32) combination of flags for is_ea_tryblks()
Classes
class catch_t-
Proxy of C++ catch_t class.
init(self) -> catch_t
Ancestors
Instance variables
var obj : sval_t-
obj
var type_id : sval_t-
type_id
Inherited members
class catchvec_t (*args)-
Proxy of C++ qvector< catch_t > class.
init(self) -> catchvec_t init(self, x) -> catchvec_t
@param x: qvector< catch_t > const &
Instance variables
var thisown-
The membership flag
Methods
def add_unique(self, x: catch_t) ‑> bool-
add_unique(self, x) -> bool
@param x: catch_t const &
def at(self, _idx: size_t)-
at(self, _idx) -> catch_t
@param _idx: size_t
def back(self)def begin(self, *args)-
begin(self) -> catch_t
def capacity(self)-
capacity(self) -> size_t
def clear(self)-
clear(self)
def empty(self) ‑> bool-
empty(self) -> bool
def end(self, *args)-
end(self) -> catch_t
def erase(self, *args)-
erase(self, it) -> catch_t
@param it: qvector< catch_t >::iterator
erase(self, first, last) -> catch_t
@param first: qvector< catch_t >::iterator @param last: qvector< catch_t >::iterator
def extract(self)-
extract(self) -> catch_t
def find(self, *args)-
find(self, x) -> catch_t
@param x: catch_t const &
def front(self)def grow(self, *args)-
grow(self, x=catch_t())
@param x: catch_t const &
def has(self, x: catch_t) ‑> bool-
has(self, x) -> bool
@param x: catch_t const &
def inject(self, s: catch_t, len: size_t)-
inject(self, s, len)
@param s: catch_t * @param len: size_t
def insert(self, it: catch_t, x: catch_t)-
insert(self, it, x) -> catch_t
@param it: qvector< catch_t >::iterator @param x: catch_t const &
def pop_back(self)-
pop_back(self)
def push_back(self, *args)-
push_back(self, x)
@param x: catch_t const &
push_back(self) -> catch_t
def qclear(self)-
qclear(self)
def reserve(self, cnt: size_t)-
reserve(self, cnt)
@param cnt: size_t
def resize(self, *args)-
resize(self, _newsize, x)
@param _newsize: size_t @param x: catch_t const &
resize(self, _newsize)
@param _newsize: size_t
def size(self)-
size(self) -> size_t
def swap(self, r: catchvec_t)-
swap(self, r)
@param r: qvector< catch_t > &
def truncate(self)-
truncate(self)
class seh_t-
Proxy of C++ seh_t class.
init(self) -> seh_t
Ancestors
Instance variables
var filter : rangevec_t-
filter
var seh_code : ea_t-
seh_code
Inherited members
class try_handler_t-
Proxy of C++ try_handler_t class.
init(self) -> try_handler_t
Ancestors
Subclasses
Instance variables
var disp : sval_t-
disp
var fpreg : int-
fpreg
Inherited members
class tryblk_t (*args)-
Proxy of C++ tryblk_t class.
init(self) -> tryblk_t init(self, r) -> tryblk_t
@param r: tryblk_t const &
Ancestors
Instance variables
var level : uchar-
level
Methods
def cpp(self)-
cpp(self) -> catchvec_t
def get_kind(self)-
get_kind(self) -> uchar
def is_cpp(self) ‑> bool-
is_cpp(self) -> bool
def is_seh(self) ‑> bool-
is_seh(self) -> bool
def seh(self)-
seh(self) -> seh_t
def set_cpp(self)-
set_cpp(self) -> catchvec_t
def set_seh(self)-
set_seh(self) -> seh_t
Inherited members
class tryblks_t (*args)-
Proxy of C++ qvector< tryblk_t > class.
init(self) -> tryblks_t init(self, x) -> tryblks_t
@param x: qvector< tryblk_t > const &
Instance variables
var thisown-
The membership flag
Methods
def add_unique(self, x: tryblk_t) ‑> bool-
add_unique(self, x) -> bool
@param x: tryblk_t const &
def at(self, _idx: size_t)-
at(self, _idx) -> tryblk_t
@param _idx: size_t
def back(self)def begin(self, *args)-
begin(self) -> tryblk_t
def capacity(self)-
capacity(self) -> size_t
def clear(self)-
clear(self)
def empty(self) ‑> bool-
empty(self) -> bool
def end(self, *args)-
end(self) -> tryblk_t
def erase(self, *args)-
erase(self, it) -> tryblk_t
@param it: qvector< tryblk_t >::iterator
erase(self, first, last) -> tryblk_t
@param first: qvector< tryblk_t >::iterator @param last: qvector< tryblk_t >::iterator
def extract(self)-
extract(self) -> tryblk_t
def find(self, *args)-
find(self, x) -> tryblk_t
@param x: tryblk_t const &
def front(self)def grow(self, *args)-
grow(self, x=tryblk_t())
@param x: tryblk_t const &
def has(self, x: tryblk_t) ‑> bool-
has(self, x) -> bool
@param x: tryblk_t const &
def inject(self, s: tryblk_t, len: size_t)-
inject(self, s, len)
@param s: tryblk_t * @param len: size_t
def insert(self, it: tryblk_t, x: tryblk_t)-
insert(self, it, x) -> tryblk_t
@param it: qvector< tryblk_t >::iterator @param x: tryblk_t const &
def pop_back(self)-
pop_back(self)
def push_back(self, *args)-
push_back(self, x)
@param x: tryblk_t const &
push_back(self) -> tryblk_t
def qclear(self)-
qclear(self)
def reserve(self, cnt: size_t)-
reserve(self, cnt)
@param cnt: size_t
def resize(self, *args)-
resize(self, _newsize, x)
@param _newsize: size_t @param x: tryblk_t const &
resize(self, _newsize)
@param _newsize: size_t
def size(self)-
size(self) -> size_t
def swap(self, r: tryblks_t)-
swap(self, r)
@param r: qvector< tryblk_t > &
def truncate(self)-
truncate(self)