Exemplo n.º 1
0
 def __init__(self, value=None, signed=None, raw=None, handle=None):
     if handle is not None:
         self.handle = handle
     elif isinstance(value, int):
         if signed:
             self.handle = core.BNCreateMetadataSignedIntegerData(value)
         else:
             self.handle = core.BNCreateMetadataUnsignedIntegerData(value)
     elif isinstance(value, bool):
         self.handle = core.BNCreateMetadataBooleanData(value)
     elif isinstance(value, str):
         if raw:
             buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(
                 value.encode('charmap'))
             self.handle = core.BNCreateMetadataRawData(buffer, len(value))
         else:
             self.handle = core.BNCreateMetadataStringData(value)
     elif isinstance(value, float):
         self.handle = core.BNCreateMetadataDoubleData(value)
     elif isinstance(value, list):
         self.handle = core.BNCreateMetadataOfType(
             MetadataType.ArrayDataType)
         for elm in value:
             md = Metadata(elm, signed, raw)
             core.BNMetadataArrayAppend(self.handle, md.handle)
     elif isinstance(value, dict):
         self.handle = core.BNCreateMetadataOfType(
             MetadataType.KeyValueDataType)
         for elm in value:
             md = Metadata(value[elm], signed, raw)
             core.BNMetadataSetValueForKey(self.handle, str(elm), md.handle)
     else:
         raise ValueError(
             "List doesn't not contain type of: int, bool, str, float, list, dict"
         )
Exemplo n.º 2
0
 def __init__(self, value=None, signed=None, raw=None, handle=None):
     if handle is not None:
         self.handle = handle
     elif isinstance(value, numbers.Integral):
         if signed:
             self.handle = core.BNCreateMetadataSignedIntegerData(value)
         else:
             self.handle = core.BNCreateMetadataUnsignedIntegerData(value)
     elif isinstance(value, bool):
         self.handle = core.BNCreateMetadataBooleanData(value)
     elif isinstance(value, (str, bytes)):
         if raw:
             if isinstance(value, str):
                 value = bytes(bytearray(ord(i) for i in value))
             buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value)
             self.handle = core.BNCreateMetadataRawData(buffer, len(value))
         else:
             self.handle = core.BNCreateMetadataStringData(value)
     elif isinstance(value, float):
         self.handle = core.BNCreateMetadataDoubleData(value)
     elif isinstance(value, (list, tuple)):
         self.handle = core.BNCreateMetadataOfType(
             MetadataType.ArrayDataType)
         for elm in value:
             md = Metadata(elm, signed, raw)
             core.BNMetadataArrayAppend(self.handle, md.handle)
     elif isinstance(value, dict):
         self.handle = core.BNCreateMetadataOfType(
             MetadataType.KeyValueDataType)
         for elm in value:
             md = Metadata(value[elm], signed, raw)
             core.BNMetadataSetValueForKey(self.handle, str(elm), md.handle)
     else:
         raise ValueError(
             "{} doesn't contain type of: int, bool, str, float, list, dict"
             .format(type(value).__name__))