ida_tryblks =========== .. py:module:: ida_tryblks .. autoapi-nested-parse:: 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. Attributes ---------- .. autoapisummary:: ida_tryblks.SWIG_PYTHON_LEGACY_BOOL ida_tryblks.TBERR_OK ida_tryblks.TBERR_START ida_tryblks.TBERR_END ida_tryblks.TBERR_ORDER ida_tryblks.TBERR_EMPTY ida_tryblks.TBERR_KIND ida_tryblks.TBERR_NO_CATCHES ida_tryblks.TBERR_INTERSECT ida_tryblks.TBEA_TRY ida_tryblks.TBEA_CATCH ida_tryblks.TBEA_SEHTRY ida_tryblks.TBEA_SEHLPAD ida_tryblks.TBEA_SEHFILT ida_tryblks.TBEA_ANY ida_tryblks.TBEA_FALLTHRU Classes ------- .. autoapisummary:: ida_tryblks.tryblks_t ida_tryblks.catchvec_t ida_tryblks.try_handler_t ida_tryblks.seh_t ida_tryblks.catch_t ida_tryblks.tryblk_t Functions --------- .. autoapisummary:: ida_tryblks.get_tryblks ida_tryblks.del_tryblks ida_tryblks.add_tryblk ida_tryblks.find_syseh ida_tryblks.is_ea_tryblks Module Contents --------------- .. py:data:: SWIG_PYTHON_LEGACY_BOOL .. py:class:: tryblks_t(*args) Bases: :py:obj:`object` .. py:attribute:: thisown .. py:method:: push_back(*args) -> tryblk_t & .. py:method:: pop_back() -> None .. py:method:: size() -> size_t .. py:method:: empty() -> bool .. py:method:: at(_idx: size_t) -> tryblk_t const & .. py:method:: qclear() -> None .. py:method:: clear() -> None .. py:method:: resize(*args) -> None .. py:method:: grow(*args) -> None .. py:method:: capacity() -> size_t .. py:method:: reserve(cnt: size_t) -> None .. py:method:: truncate() -> None .. py:method:: swap(r: tryblks_t) -> None .. py:method:: extract() -> tryblk_t * .. py:method:: inject(s: tryblk_t, len: size_t) -> None .. py:method:: begin(*args) -> qvector< tryblk_t >::const_iterator .. py:method:: end(*args) -> qvector< tryblk_t >::const_iterator .. py:method:: insert(it: tryblk_t, x: tryblk_t) -> qvector< tryblk_t >::iterator .. py:method:: erase(*args) -> qvector< tryblk_t >::iterator .. py:method:: find(*args) -> qvector< tryblk_t >::const_iterator .. py:method:: has(x: tryblk_t) -> bool .. py:method:: add_unique(x: tryblk_t) -> bool .. py:method:: append(x: tryblk_t) -> None .. py:method:: extend(x: tryblks_t) -> None .. py:attribute:: front .. py:attribute:: back .. py:class:: catchvec_t(*args) Bases: :py:obj:`object` .. py:attribute:: thisown .. py:method:: push_back(*args) -> catch_t & .. py:method:: pop_back() -> None .. py:method:: size() -> size_t .. py:method:: empty() -> bool .. py:method:: at(_idx: size_t) -> catch_t const & .. py:method:: qclear() -> None .. py:method:: clear() -> None .. py:method:: resize(*args) -> None .. py:method:: grow(*args) -> None .. py:method:: capacity() -> size_t .. py:method:: reserve(cnt: size_t) -> None .. py:method:: truncate() -> None .. py:method:: swap(r: catchvec_t) -> None .. py:method:: extract() -> catch_t * .. py:method:: inject(s: catch_t, len: size_t) -> None .. py:method:: begin(*args) -> qvector< catch_t >::const_iterator .. py:method:: end(*args) -> qvector< catch_t >::const_iterator .. py:method:: insert(it: catch_t, x: catch_t) -> qvector< catch_t >::iterator .. py:method:: erase(*args) -> qvector< catch_t >::iterator .. py:method:: find(*args) -> qvector< catch_t >::const_iterator .. py:method:: has(x: catch_t) -> bool .. py:method:: add_unique(x: catch_t) -> bool .. py:method:: append(x: catch_t) -> None .. py:method:: extend(x: catchvec_t) -> None .. py:attribute:: front .. py:attribute:: back .. py:class:: try_handler_t Bases: :py:obj:`ida_range.rangevec_t` .. py:attribute:: thisown .. py:attribute:: disp :type: int .. py:attribute:: fpreg :type: int .. py:method:: clear() -> None .. py:class:: seh_t Bases: :py:obj:`try_handler_t` .. py:attribute:: thisown .. py:attribute:: filter :type: rangevec_t .. py:attribute:: seh_code :type: ida_idaapi.ea_t .. py:method:: clear() -> None .. py:class:: catch_t Bases: :py:obj:`try_handler_t` .. py:attribute:: thisown .. py:attribute:: obj :type: int .. py:attribute:: type_id :type: int .. py:class:: tryblk_t(*args) Bases: :py:obj:`ida_range.rangevec_t` .. py:attribute:: thisown .. py:attribute:: level :type: uchar .. py:method:: cpp() -> catchvec_t & .. py:method:: seh() -> seh_t & .. py:method:: get_kind() -> uchar .. py:method:: empty() -> bool .. py:method:: is_seh() -> bool .. py:method:: is_cpp() -> bool .. py:method:: clear() -> None .. py:method:: set_seh() -> seh_t & .. py:method:: set_cpp() -> catchvec_t & .. py:function:: get_tryblks(tbv: tryblks_t, range: range_t) -> 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: output buffer; may be nullptr :param range: address range to change :returns: number of found try blocks .. py:function:: del_tryblks(range: range_t) -> None Delete try block information in the specified range. :param range: the range to be cleared .. py:function:: add_tryblk(tb: tryblk_t) -> int Add one try block information. :param tb: try block to add. :returns: error code; 0 means good .. py:data:: TBERR_OK ok .. py:data:: TBERR_START bad start address .. py:data:: TBERR_END bad end address .. py:data:: TBERR_ORDER bad address order .. py:data:: TBERR_EMPTY empty try block .. py:data:: TBERR_KIND illegal try block kind .. py:data:: TBERR_NO_CATCHES no catch blocks at all .. py:data:: TBERR_INTERSECT range would intersect inner tryblk .. py:function:: find_syseh(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Find the start address of the system eh region including the argument. :param ea: search address :returns: start address of surrounding tryblk, otherwise BADADDR .. py:data:: TBEA_TRY is EA within a c++ try block? .. py:data:: TBEA_CATCH is EA the start of a c++ catch/cleanup block? .. py:data:: TBEA_SEHTRY is EA within a seh try block .. py:data:: TBEA_SEHLPAD is EA the start of a seh finally/except block? .. py:data:: TBEA_SEHFILT is EA the start of a seh filter? .. py:data:: TBEA_ANY .. py:data:: TBEA_FALLTHRU is there a fall through into provided ea from an unwind region .. py:function:: is_ea_tryblks(ea: ida_idaapi.ea_t, flags: int) -> bool Check if the given address ea is part of tryblks description. :param ea: address to check :param flags: combination of flags for is_ea_tryblks()