Beispiel #1
0
    def __str__(self):
        return """
Header (Windows)
----------------
VendorGuid= {{{}}}
Size      = 0x{:08X}
DataOffset= 0x{:08X}
DataSize  = 0x{:08X}
Attributes= 0x{:08X}
""".format( EFI_GUID_STR(self.guid), self.Size, self.DataOffset, self.DataSize, self.Attributes )
Beispiel #2
0
def getEFIvariables_NtEnumerateSystemEnvironmentValuesEx2(nvram_buf):
    start = 0
    buffer = nvram_buf
    bsize = len(buffer)
    header_fmt = "<IIII16s"
    header_size = struct.calcsize(header_fmt)
    variables = dict()
    off = 0
    while (off + header_size) < bsize:
        efi_var_hdr = EFI_HDR_WIN(
            *struct.unpack_from(header_fmt, buffer[off:off + header_size]))

        next_var_offset = off + efi_var_hdr.Size
        efi_var_buf = buffer[off:next_var_offset]
        efi_var_data = buffer[off + efi_var_hdr.DataOffset:off +
                              efi_var_hdr.DataOffset + efi_var_hdr.DataSize]

        #efi_var_name = "".join( buffer[ start + header_size : start + efi_var_hdr.DataOffset ] ).decode('utf-16-le')
        str_fmt = "{:d}s".format(efi_var_hdr.DataOffset - header_size)
        s, = struct.unpack(
            str_fmt, buffer[off + header_size:off + efi_var_hdr.DataOffset])
        if sys.version_info[0] < 3:
            efi_var_name = unicode(s, "utf-16-le",
                                   errors="replace").split(u'\u0000')[0]
        else:
            efi_var_name = str(s, "utf-16-le",
                               errors="replace").split(u'\u0000')[0]

        if efi_var_name not in variables.keys():
            variables[efi_var_name] = []
        #                                off, buf,         hdr,         data,         guid,                           attrs
        variables[efi_var_name].append(
            (off, efi_var_buf, efi_var_hdr, efi_var_data,
             EFI_GUID_STR(efi_var_hdr.guid), efi_var_hdr.Attributes))

        if 0 == efi_var_hdr.Size: break
        off = next_var_offset

    return variables