MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / __init__

Method __init__

python/metadata.py:32–70  ·  view source on GitHub ↗

The 'raw' parameter is no longer needed it was a workaround for a Python 2 limitation. To pass raw data into this API, simply use a `bytes` object.

(
	    self, value: Optional[MetadataValueType] = None, signed: Optional[bool] = None, raw: Optional[bool] = None,
	    handle: Optional[core.BNMetadata] = None
	)

Source from the content-addressed store, hash-verified

30
31class Metadata:
32 def __init__(
33 self, value: Optional[MetadataValueType] = None, signed: Optional[bool] = None, raw: Optional[bool] = None,
34 handle: Optional[core.BNMetadata] = None
35 ):
36 """
37 The 'raw' parameter is no longer needed it was a workaround for a Python 2 limitation.
38 To pass raw data into this API, simply use a `bytes` object.
39 """
40 if handle is not None:
41 self.handle = handle
42 elif isinstance(value, Metadata):
43 # If the value is already a Metadata object, reuse its handle
44 self.handle = value.handle
45 elif isinstance(value, bool):
46 self.handle = core.BNCreateMetadataBooleanData(value)
47 elif isinstance(value, int):
48 if signed:
49 self.handle = core.BNCreateMetadataSignedIntegerData(value)
50 else:
51 self.handle = core.BNCreateMetadataUnsignedIntegerData(value)
52 elif isinstance(value, str):
53 self.handle = core.BNCreateMetadataStringData(value)
54 elif isinstance(value, bytes):
55 buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value)
56 self.handle = core.BNCreateMetadataRawData(buffer, len(value))
57 elif isinstance(value, float):
58 self.handle = core.BNCreateMetadataDoubleData(value)
59 elif isinstance(value, (list, tuple)):
60 self.handle = core.BNCreateMetadataOfType(MetadataType.ArrayDataType)
61 for elm in value:
62 md = Metadata(elm, signed, raw)
63 core.BNMetadataArrayAppend(self.handle, md.handle)
64 elif isinstance(value, dict):
65 self.handle = core.BNCreateMetadataOfType(MetadataType.KeyValueDataType)
66 for elm in value:
67 md = Metadata(value[elm], signed, raw)
68 core.BNMetadataSetValueForKey(self.handle, str(elm), md.handle)
69 else:
70 raise ValueError(f"{type(value)} is not a supported type: int, bool, str, bytes, float, list, tuple, dict, or Metadata")
71
72 def __len__(self):
73 if self.is_array or self.is_dict or self.is_string or self.is_bytes:

Callers

nothing calls this directly

Calls 1

MetadataClass · 0.70

Tested by

no test coverage detected