mirror of
https://github.com/justinian/jsix.git
synced 2025-12-09 16:04:32 -08:00
Add parse_memmap.py script
This commit is contained in:
60
scripts/parse_memmap.py
Executable file
60
scripts/parse_memmap.py
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from struct import unpack_from, calcsize
|
||||
import sys
|
||||
|
||||
memory_type_names = {
|
||||
0: "EfiReservedMemoryType",
|
||||
1: "EfiLoaderCode",
|
||||
2: "EfiLoaderData",
|
||||
3: "EfiBootServicesCode",
|
||||
4: "EfiBootServicesData",
|
||||
5: "EfiRuntimeServicesCode",
|
||||
6: "EfiRuntimeServicesData",
|
||||
7: "EfiConventionalMemory",
|
||||
8: "EfiUnusableMemory",
|
||||
9: "EfiACPIReclaimMemory",
|
||||
10: "EfiACPIMemoryNVS",
|
||||
11: "EfiMemoryMappedIO",
|
||||
12: "EfiMemoryMappedIOPortSpace",
|
||||
13: "EfiPalCode",
|
||||
14: "EfiPersistentMemory",
|
||||
|
||||
0x80000000: "Kernel Image",
|
||||
0x80000001: "Kernel Data",
|
||||
}
|
||||
|
||||
EFI_MEMORY_UC = 0x0000000000000001
|
||||
EFI_MEMORY_WC = 0x0000000000000002
|
||||
EFI_MEMORY_WT = 0x0000000000000004
|
||||
EFI_MEMORY_WB = 0x0000000000000008
|
||||
EFI_MEMORY_UCE = 0x0000000000000010
|
||||
EFI_MEMORY_WP = 0x0000000000001000
|
||||
EFI_MEMORY_RP = 0x0000000000002000
|
||||
EFI_MEMORY_XP = 0x0000000000004000
|
||||
EFI_MEMORY_NV = 0x0000000000008000
|
||||
EFI_MEMORY_MORE_RELIABLE = 0x0000000000010000
|
||||
EFI_MEMORY_RO = 0x0000000000020000
|
||||
EFI_MEMORY_RUNTIME = 0x8000000000000000
|
||||
|
||||
fmt = "LQQQQQ"
|
||||
size = calcsize(fmt)
|
||||
|
||||
print("Descriptor size: {} bytes\n".format(size))
|
||||
if size != 48:
|
||||
sys.exit(1)
|
||||
|
||||
data = open(sys.argv[1], 'rb').read()
|
||||
length = len(data)
|
||||
consumed = 0
|
||||
|
||||
while length - consumed > size:
|
||||
memtype, phys, virt, pages, attr, pad = unpack_from(fmt, data, consumed)
|
||||
consumed += size
|
||||
if pages == 0: break
|
||||
|
||||
memtype = memory_type_names.get(memtype, "{:016x}".format(memtype))
|
||||
runtime = {EFI_MEMORY_RUNTIME: "*"}.get(attr & EFI_MEMORY_RUNTIME, " ")
|
||||
|
||||
print("{:>23}{} {:016x} {:016x} [{:4d}]".format(memtype, runtime, phys, virt, pages))
|
||||
|
||||
Reference in New Issue
Block a user