Registers a DebugInfoParser. See ``debuginfo.DebugInfoParser`` for more details.
( cls, name: str, is_valid: Callable[['binaryview.BinaryView'], bool], parse_info: Callable[["DebugInfo", 'binaryview.BinaryView', 'binaryview.BinaryView', ProgressFuncType], bool] )
| 124 | |
| 125 | @classmethod |
| 126 | def register( |
| 127 | cls, name: str, is_valid: Callable[['binaryview.BinaryView'], bool], |
| 128 | parse_info: Callable[["DebugInfo", 'binaryview.BinaryView', 'binaryview.BinaryView', ProgressFuncType], bool] |
| 129 | ) -> "DebugInfoParser": |
| 130 | """Registers a DebugInfoParser. See ``debuginfo.DebugInfoParser`` for more details.""" |
| 131 | binaryninja._init_plugins() |
| 132 | |
| 133 | is_valid_cb = ctypes.CFUNCTYPE( |
| 134 | ctypes.c_bool, ctypes.c_void_p, ctypes.POINTER(core.BNBinaryView) |
| 135 | )(lambda ctxt, view: cls._is_valid(view, is_valid)) |
| 136 | |
| 137 | parse_info_cb = ctypes.CFUNCTYPE( |
| 138 | ctypes.c_bool, ctypes.c_void_p, ctypes.POINTER(core.BNDebugInfo), ctypes.POINTER(core.BNBinaryView), ctypes.POINTER(core.BNBinaryView), |
| 139 | ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_size_t), ctypes.c_void_p, |
| 140 | )(lambda ctxt, debug_info, view, debug_view, progress, progress_ctxt: cls._parse_info(debug_info, view, debug_view, lambda cur, max: progress(progress_ctxt, cur, max), parse_info)) |
| 141 | |
| 142 | # Don't let our callbacks get garbage collected |
| 143 | global _debug_info_parsers |
| 144 | _debug_info_parsers[len(_debug_info_parsers)] = (is_valid_cb, parse_info_cb) |
| 145 | parser = core.BNRegisterDebugInfoParser(name, is_valid_cb, parse_info_cb, None) |
| 146 | assert parser is not None, "core.BNRegisterDebugInfoParser is not None" |
| 147 | parser_ref = core.BNNewDebugInfoParserReference(parser) |
| 148 | assert parser_ref is not None, "core.BNNewDebugInfoParserReference returned None" |
| 149 | return DebugInfoParser(parser_ref) |
| 150 | |
| 151 | |
| 152 | class DebugInfoParser(object, metaclass=_DebugInfoParserMetaClass): |
nothing calls this directly
no test coverage detected