diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/binaryview.py | 4 | ||||
| -rw-r--r-- | python/generator.cpp | 25 | ||||
| -rw-r--r-- | python/lowlevelil.py | 2 | ||||
| -rw-r--r-- | python/mediumlevelil.py | 2 | ||||
| -rw-r--r-- | python/pluginmanager.py | 2 | ||||
| -rw-r--r-- | python/typeprinter.py | 18 |
6 files changed, 35 insertions, 18 deletions
diff --git a/python/binaryview.py b/python/binaryview.py index f9afe2b8..47deb136 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -7161,7 +7161,7 @@ class BinaryView: :rtype: None """ value = ctypes.c_char_p() - string_type = ctypes.c_int() + string_type = core.StringTypeEnum() result = core.BNCheckForStringAnnotationType(self.handle, addr, value, string_type, allow_short_strings, allow_large_strings, child_width) if result: result = value.value.decode("utf-8") @@ -10591,7 +10591,7 @@ to a the type "tagRECT" found in the typelibrary "winX64common" if not isinstance(buffer, databuffer.DataBuffer): raise TypeError("buffer must be an instance of databuffer.DataBuffer") string = ctypes.c_char_p() - string_type = ctypes.c_int() + string_type = core.StringTypeEnum() if arch is not None: arch = arch.handle if not core.BNStringifyUnicodeData(self.handle, arch, buffer.handle, null_terminates, allow_short_strings, ctypes.byref(string), ctypes.byref(string_type)): diff --git a/python/generator.cpp b/python/generator.cpp index 6dd983b4..45ca1e4a 100644 --- a/python/generator.cpp +++ b/python/generator.cpp @@ -363,7 +363,23 @@ int main(int argc, char* argv[]) if (name.size() > 2 && name.substr(0, 2) == "BN") name = name.substr(2); - fprintf(out, "%sEnum = ctypes.c_int\n", name.c_str()); + const char* ctypesType = nullptr; + switch (i.second->GetWidth()) + { + case 1: + ctypesType = i.second->IsSigned() ? "ctypes.c_int8" : "ctypes.c_uint8"; + break; + case 2: + ctypesType = i.second->IsSigned() ? "ctypes.c_int16" : "ctypes.c_uint16"; + break; + case 4: + ctypesType = i.second->IsSigned() ? "ctypes.c_int32" : "ctypes.c_uint32"; + break; + default: + ctypesType = i.second->IsSigned() ? "ctypes.c_int64" : "ctypes.c_uint64"; + break; + } + fprintf(out, "%sEnum = %s\n", name.c_str(), ctypesType); fprintf(enums, "\n\nclass %s(enum.IntEnum):\n", name.c_str()); for (auto& j : i.second->GetEnumeration()->GetMembers()) @@ -465,9 +481,10 @@ int main(int argc, char* argv[]) // Check for a string result, these will be automatically wrapped to free the string // memory and return a Python string - bool stringResult = (i.second->GetChildType()->GetClass() == PointerTypeClass) - && (i.second->GetChildType()->GetChildType()->GetWidth() == 1) - && (i.second->GetChildType()->GetChildType()->IsSigned()); + bool stringResult = i.second->GetChildType()->GetClass() == PointerTypeClass + && i.second->GetChildType()->GetChildType()->GetClass() == IntegerTypeClass + && i.second->GetChildType()->GetChildType()->GetWidth() == 1 + && i.second->GetChildType()->GetChildType()->IsSigned(); // Pointer returns will be automatically wrapped to return None on null pointer bool pointerResult = (i.second->GetChildType()->GetClass() == PointerTypeClass); // Enum returns will automatically cast to the enum type diff --git a/python/lowlevelil.py b/python/lowlevelil.py index 565ca6a2..f0b130c3 100644 --- a/python/lowlevelil.py +++ b/python/lowlevelil.py @@ -871,7 +871,7 @@ class LowLevelILInstruction(BaseILInstruction): if options is None: options = [] idx = 0 - option_array = (ctypes.c_int * len(options))() + option_array = (core.DataFlowQueryOptionEnum * len(options))() for option in options: option_array[idx] = option idx += 1 diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index 61c0bf1b..a38ec0ea 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -822,7 +822,7 @@ class MediumLevelILInstruction(BaseILInstruction): if options is None: options = [] idx = 0 - option_array = (ctypes.c_int * len(options))() + option_array = (core.DataFlowQueryOptionEnum * len(options))() for option in options: option_array[idx] = option idx += 1 diff --git a/python/pluginmanager.py b/python/pluginmanager.py index 62066397..75f7bfe2 100644 --- a/python/pluginmanager.py +++ b/python/pluginmanager.py @@ -34,7 +34,7 @@ class RepoPlugin: ``RepoPlugin`` is mostly read-only, however you can install/uninstall enable/disable plugins. RepoPlugins are created by parsing the plugins.json in a plugin repository. """ - def __init__(self, handle: core.BNRepoPluginHandle): + def __init__(self, handle: 'core.BNRepoPluginHandle'): self.handle = handle def __del__(self): diff --git a/python/typeprinter.py b/python/typeprinter.py index 091cd803..c73fddd1 100644 --- a/python/typeprinter.py +++ b/python/typeprinter.py @@ -316,7 +316,7 @@ class TypePrinter(metaclass=_TypePrinterMetaclass): i += 1 result = ctypes.c_char_p() - core.BNTypePrinterDefaultPrintAllTypes(self.handle, cpp_names, cpp_types, len(types_), data.handle, padding_cols, ctypes.c_int(escaping), result) + core.BNTypePrinterDefaultPrintAllTypes(self.handle, cpp_names, cpp_types, len(types_), data.handle, padding_cols, core.TokenEscapingTypeEnum(escaping), result) return core.pyNativeStr(result.value) def get_type_tokens(self, type: types.Type, platform: Optional[_platform.Platform] = None, name: types.QualifiedNameType = "", base_confidence: int = core.max_confidence, escaping: TokenEscapingType = TokenEscapingType.BackticksTokenEscapingType) -> List[_function.InstructionTextToken]: @@ -451,7 +451,7 @@ class CoreTypePrinter(TypePrinter): count = ctypes.c_ulonglong() name_cpp = name._to_core_struct() result_cpp = ctypes.POINTER(core.BNInstructionTextToken)() - if not core.BNGetTypePrinterTypeTokens(self.handle, type.handle, None if platform is None else platform.handle, name_cpp, base_confidence, ctypes.c_int(escaping), result_cpp, count): + if not core.BNGetTypePrinterTypeTokens(self.handle, type.handle, None if platform is None else platform.handle, name_cpp, base_confidence, core.TokenEscapingTypeEnum(escaping), result_cpp, count): raise RuntimeError("BNGetTypePrinterTypeTokens returned False") result = _function.InstructionTextToken._from_core_struct(result_cpp, count.value) @@ -467,7 +467,7 @@ class CoreTypePrinter(TypePrinter): parent_type_cpp = None if parent_type is not None: parent_type_cpp = parent_type.handle - if not core.BNGetTypePrinterTypeTokensBeforeName(self.handle, type.handle, None if platform is None else platform.handle, base_confidence, parent_type_cpp, ctypes.c_int(escaping), result_cpp, count): + if not core.BNGetTypePrinterTypeTokensBeforeName(self.handle, type.handle, None if platform is None else platform.handle, base_confidence, parent_type_cpp, core.TokenEscapingTypeEnum(escaping), result_cpp, count): raise RuntimeError("BNGetTypePrinterTypeTokensBeforeName returned False") result = _function.InstructionTextToken._from_core_struct(result_cpp, count.value) @@ -483,7 +483,7 @@ class CoreTypePrinter(TypePrinter): parent_type_cpp = None if parent_type is not None: parent_type_cpp = parent_type.handle - if not core.BNGetTypePrinterTypeTokensAfterName(self.handle, type.handle, None if platform is None else platform.handle, base_confidence, parent_type_cpp, ctypes.c_int(escaping), result_cpp, count): + if not core.BNGetTypePrinterTypeTokensAfterName(self.handle, type.handle, None if platform is None else platform.handle, base_confidence, parent_type_cpp, core.TokenEscapingTypeEnum(escaping), result_cpp, count): raise RuntimeError("BNGetTypePrinterTypeTokensAfterName returned False") result = _function.InstructionTextToken._from_core_struct(result_cpp, count.value) @@ -496,7 +496,7 @@ class CoreTypePrinter(TypePrinter): if not isinstance(name, types.QualifiedName): name = types.QualifiedName(name) result_cpp = ctypes.c_char_p() - if not core.BNGetTypePrinterTypeString(self.handle, type.handle, None if platform is None else platform.handle, name._to_core_struct(), ctypes.c_int(escaping), result_cpp): + if not core.BNGetTypePrinterTypeString(self.handle, type.handle, None if platform is None else platform.handle, name._to_core_struct(), core.TokenEscapingTypeEnum(escaping), result_cpp): raise RuntimeError("BNGetTypePrinterTypeString returned False") result = core.pyNativeStr(result_cpp.value) @@ -506,7 +506,7 @@ class CoreTypePrinter(TypePrinter): def get_type_string_before_name(self, type: types.Type, platform: Optional[_platform.Platform] = None, escaping: TokenEscapingType = TokenEscapingType.BackticksTokenEscapingType) -> str: result_cpp = ctypes.c_char_p() - if not core.BNGetTypePrinterTypeStringBeforeName(self.handle, type.handle, None if platform is None else platform.handle, ctypes.c_int(escaping), result_cpp): + if not core.BNGetTypePrinterTypeStringBeforeName(self.handle, type.handle, None if platform is None else platform.handle, core.TokenEscapingTypeEnum(escaping), result_cpp): raise RuntimeError("BNGetTypePrinterTypeStringBeforeName returned False") result = core.pyNativeStr(result_cpp.value) @@ -516,7 +516,7 @@ class CoreTypePrinter(TypePrinter): def get_type_string_after_name(self, type: types.Type, platform: Optional[_platform.Platform] = None, escaping: TokenEscapingType = TokenEscapingType.BackticksTokenEscapingType) -> str: result_cpp = ctypes.c_char_p() - if not core.BNGetTypePrinterTypeStringAfterName(self.handle, type.handle, None if platform is None else platform.handle, ctypes.c_int(escaping), result_cpp): + if not core.BNGetTypePrinterTypeStringAfterName(self.handle, type.handle, None if platform is None else platform.handle, core.TokenEscapingTypeEnum(escaping), result_cpp): raise RuntimeError("BNGetTypePrinterTypeStringAfterName returned False") result = core.pyNativeStr(result_cpp.value) @@ -532,7 +532,7 @@ class CoreTypePrinter(TypePrinter): name = types.QualifiedName(name) count = ctypes.c_ulonglong() core_lines = ctypes.POINTER(core.BNTypeDefinitionLine)() - if not core.BNGetTypePrinterTypeLines(self.handle, type.handle, container.handle, name._to_core_struct(), padding_cols, collapsed, ctypes.c_int(escaping), core_lines, count): + if not core.BNGetTypePrinterTypeLines(self.handle, type.handle, container.handle, name._to_core_struct(), padding_cols, collapsed, core.TokenEscapingTypeEnum(escaping), core_lines, count): raise RuntimeError("BNGetTypePrinterTypeLines returned False") lines = [] for i in range(count.value): @@ -552,5 +552,5 @@ class CoreTypePrinter(TypePrinter): i += 1 result = ctypes.c_char_p() - core.BNTypePrinterPrintAllTypes(self.handle, cpp_names, cpp_types, len(types_), data.handle, padding_cols, ctypes.c_int(escaping), result) + core.BNTypePrinterPrintAllTypes(self.handle, cpp_names, cpp_types, len(types_), data.handle, padding_cols, core.TokenEscapingTypeEnum(escaping), result) return core.pyNativeStr(result.value) |
