diff options
| author | Xusheng <xusheng@vector35.com> | 2022-12-20 17:15:03 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2022-12-21 11:42:54 +0800 |
| commit | 0e5e2fad380cdda9e53294d90f7e0fd90c959280 (patch) | |
| tree | 54e7d187d8409d8f4fccf9a3e8a0e5e90e962fad /python/binaryview.py | |
| parent | 74dfc90a4291ff12228288e45bdbfe714869bac3 (diff) | |
Add support for adding magic values into expression parser
Diffstat (limited to 'python/binaryview.py')
| -rw-r--r-- | python/binaryview.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/python/binaryview.py b/python/binaryview.py index c744b670..287b4395 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -4740,6 +4740,43 @@ class BinaryView: return _types.Type.create(core.BNNewTypeReference(result.type), confidence=result.confidence) + def add_expression_parser_magic_value(self, name: str, value: int) -> None: + core.BNAddExpressionParserMagicValue(self.handle, name, value) + + def remove_expression_parser_magic_value(self, name: str) -> None: + core.BNRemoveExpressionParserMagicValue(self.handle, name) + + def add_expression_parser_magic_values(self, names: List[str], values: List[int]) -> None: + if len(names) == 0 or len(values) == 0 or (not len(names) == len(values)): + return + + names_buf = (ctypes.c_char_p * len(names))() + for i in range(0, len(names)): + names_buf[i] = names[i].encode('charmap') + + values_buf = (ctypes.c_ulonglong * len(values))() + for i in range(0, len(values)): + values_buf[i] = values[i] + + core.BNAddExpressionParserMagicValues(self.handle, names_buf, values_buf, len(names)) + + def remove_expression_parser_magic_values(self, names: List[str]) -> None: + if len(names) == 0: + return + + names_buf = (ctypes.c_char_p * len(names))() + for i in range(0, len(names)): + names_buf[i] = names[i].encode('charmap') + + core.BNRemoveExpressionParserMagicValues(self.handle, names_buf, len(names)) + + def get_expression_parser_magic_value(self, name: str) -> Optional[int]: + result = ctypes.c_ulonglong() + if not core.BNGetExpressionParserMagicValue(self.handle, name, result): + return None + + return result.value + def get_callers(self, addr: int) -> Generator[ReferenceSource, None, None]: """ ``get_callers`` returns a list of ReferenceSource objects (xrefs or cross-references) that call the provided virtual address. |
