mirror of
https://github.com/qilingframework/qiling.git
synced 2026-10-12 02:21:40 +00:00
Adjust indentation after convertion to spaces
This commit is contained in:
@@ -1,25 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
from .UefiBaseType import *
|
||||
from .ProcessorBind import *
|
||||
from .UefiBaseType import EFI_PHYSICAL_ADDRESS
|
||||
from .ProcessorBind import UINT64, STRUCT
|
||||
|
||||
EFI_SMRAM_OPEN = 0x00000001
|
||||
EFI_SMRAM_CLOSED = 0x00000002
|
||||
EFI_SMRAM_LOCKED = 0x00000004
|
||||
EFI_CACHEABLE = 0x00000008
|
||||
EFI_ALLOCATED = 0x00000010
|
||||
EFI_NEEDS_TESTING = 0x00000020
|
||||
EFI_NEEDS_ECC_INITIALIZATION = 0x00000040
|
||||
EFI_SMRAM_OPEN = 0x00000001
|
||||
EFI_SMRAM_CLOSED = 0x00000002
|
||||
EFI_SMRAM_LOCKED = 0x00000004
|
||||
EFI_CACHEABLE = 0x00000008
|
||||
EFI_ALLOCATED = 0x00000010
|
||||
EFI_NEEDS_TESTING = 0x00000020
|
||||
EFI_NEEDS_ECC_INITIALIZATION = 0x00000040
|
||||
|
||||
class EFI_SMRAM_DESCRIPTOR(STRUCT):
|
||||
_fields_ = [
|
||||
('PhysicalStart', EFI_PHYSICAL_ADDRESS),
|
||||
('CpuStart', EFI_PHYSICAL_ADDRESS),
|
||||
('PhysicalSize', UINT64),
|
||||
('RegionState', UINT64)
|
||||
('PhysicalStart', EFI_PHYSICAL_ADDRESS),
|
||||
('CpuStart', EFI_PHYSICAL_ADDRESS),
|
||||
('PhysicalSize', UINT64),
|
||||
('RegionState', UINT64)
|
||||
]
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -23,17 +23,17 @@ EFI_VIRTUAL_ADDRESS = UINT64
|
||||
|
||||
class EFI_TIME(STRUCT):
|
||||
_fields_ = [
|
||||
('Year', UINT16),
|
||||
('Month', UINT8),
|
||||
('Day', UINT8),
|
||||
('Hour', UINT8),
|
||||
('Minute', UINT8),
|
||||
('Second', UINT8),
|
||||
('Pad1', UINT8),
|
||||
('Nanosecond', UINT32),
|
||||
('TimeZone', UINT16),
|
||||
('Daylight', UINT8),
|
||||
('Pad2', UINT8)
|
||||
('Year', UINT16),
|
||||
('Month', UINT8),
|
||||
('Day', UINT8),
|
||||
('Hour', UINT8),
|
||||
('Minute', UINT8),
|
||||
('Second', UINT8),
|
||||
('Pad1', UINT8),
|
||||
('Nanosecond', UINT32),
|
||||
('TimeZone', UINT16),
|
||||
('Daylight', UINT8),
|
||||
('Pad2', UINT8)
|
||||
]
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -8,11 +8,11 @@ from .ProcessorBind import *
|
||||
# @see: MdePkg\Include\Uefi\UefiMultiPhase.h
|
||||
class EFI_TABLE_HEADER(STRUCT):
|
||||
_fields_ = [
|
||||
('Signature', UINT64),
|
||||
('Revision', UINT32),
|
||||
('HeaderSize', UINT32),
|
||||
('CRC32', UINT32),
|
||||
('Reserved', UINT32)
|
||||
('Signature', UINT64),
|
||||
('Revision', UINT32),
|
||||
('HeaderSize', UINT32),
|
||||
('CRC32', UINT32),
|
||||
('Reserved', UINT32)
|
||||
]
|
||||
|
||||
class EFI_RESET_TYPE(ENUM):
|
||||
|
||||
+148
-148
@@ -1,6 +1,6 @@
|
||||
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -48,62 +48,62 @@ class EFI_TIME_CAPABILITIES(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('Resolution', UINT32),
|
||||
('Accuracy', UINT32),
|
||||
('SetsToZero', BOOLEAN),
|
||||
('Resolution', UINT32),
|
||||
('Accuracy', UINT32),
|
||||
('SetsToZero', BOOLEAN),
|
||||
]
|
||||
|
||||
class EFI_MEMORY_DESCRIPTOR(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('Type', UINT32),
|
||||
('PhysicalStart', EFI_PHYSICAL_ADDRESS),
|
||||
('VirtualStart', EFI_VIRTUAL_ADDRESS),
|
||||
('NumberOfPages', UINT64),
|
||||
('Attribute', UINT64)
|
||||
('Type', UINT32),
|
||||
('PhysicalStart', EFI_PHYSICAL_ADDRESS),
|
||||
('VirtualStart', EFI_VIRTUAL_ADDRESS),
|
||||
('NumberOfPages', UINT64),
|
||||
('Attribute', UINT64)
|
||||
]
|
||||
|
||||
class EFI_CAPSULE_HEADER(STRUCT):
|
||||
_fields_ = [
|
||||
('CapsuleGuid', EFI_GUID),
|
||||
('HeaderSize', UINT32),
|
||||
('Flags', UINT32),
|
||||
('CapsuleImageSize', UINT32)
|
||||
('CapsuleGuid', EFI_GUID),
|
||||
('HeaderSize', UINT32),
|
||||
('Flags', UINT32),
|
||||
('CapsuleImageSize', UINT32)
|
||||
]
|
||||
|
||||
EFI_GET_TIME = FUNCPTR(EFI_STATUS, PTR(EFI_TIME), PTR(EFI_TIME_CAPABILITIES))
|
||||
EFI_SET_TIME = FUNCPTR(EFI_STATUS, PTR(EFI_TIME))
|
||||
EFI_GET_WAKEUP_TIME = FUNCPTR(EFI_STATUS, PTR(BOOLEAN), PTR(BOOLEAN), PTR(EFI_TIME))
|
||||
EFI_SET_WAKEUP_TIME = FUNCPTR(EFI_STATUS, BOOLEAN, PTR(EFI_TIME))
|
||||
EFI_SET_VIRTUAL_ADDRESS_MAP = FUNCPTR(EFI_STATUS, UINTN, UINTN, UINT32, PTR(EFI_MEMORY_DESCRIPTOR))
|
||||
EFI_CONVERT_POINTER = FUNCPTR(EFI_STATUS, UINTN, PTR(PTR(VOID)))
|
||||
EFI_GET_VARIABLE = FUNCPTR(EFI_STATUS, PTR(CHAR16), PTR(EFI_GUID), PTR(UINT32), PTR(UINTN), PTR(VOID))
|
||||
EFI_GET_NEXT_VARIABLE_NAME = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(CHAR16), PTR(EFI_GUID))
|
||||
EFI_SET_VARIABLE = FUNCPTR(EFI_STATUS, PTR(CHAR16), PTR(EFI_GUID), UINT32, UINTN, PTR(VOID))
|
||||
EFI_GET_NEXT_HIGH_MONO_COUNT = FUNCPTR(EFI_STATUS, PTR(UINT32))
|
||||
EFI_RESET_SYSTEM = FUNCPTR(VOID, EFI_RESET_TYPE, EFI_STATUS, UINTN, PTR(VOID))
|
||||
EFI_UPDATE_CAPSULE = FUNCPTR(EFI_STATUS, PTR(PTR(EFI_CAPSULE_HEADER)), UINTN, EFI_PHYSICAL_ADDRESS)
|
||||
EFI_QUERY_CAPSULE_CAPABILITIES = FUNCPTR(EFI_STATUS, PTR(PTR(EFI_CAPSULE_HEADER)), UINTN, PTR(UINT64), PTR(EFI_RESET_TYPE))
|
||||
EFI_QUERY_VARIABLE_INFO = FUNCPTR(EFI_STATUS, UINT32, PTR(UINT64), PTR(UINT64), PTR(UINT64))
|
||||
EFI_GET_TIME = FUNCPTR(EFI_STATUS, PTR(EFI_TIME), PTR(EFI_TIME_CAPABILITIES))
|
||||
EFI_SET_TIME = FUNCPTR(EFI_STATUS, PTR(EFI_TIME))
|
||||
EFI_GET_WAKEUP_TIME = FUNCPTR(EFI_STATUS, PTR(BOOLEAN), PTR(BOOLEAN), PTR(EFI_TIME))
|
||||
EFI_SET_WAKEUP_TIME = FUNCPTR(EFI_STATUS, BOOLEAN, PTR(EFI_TIME))
|
||||
EFI_SET_VIRTUAL_ADDRESS_MAP = FUNCPTR(EFI_STATUS, UINTN, UINTN, UINT32, PTR(EFI_MEMORY_DESCRIPTOR))
|
||||
EFI_CONVERT_POINTER = FUNCPTR(EFI_STATUS, UINTN, PTR(PTR(VOID)))
|
||||
EFI_GET_VARIABLE = FUNCPTR(EFI_STATUS, PTR(CHAR16), PTR(EFI_GUID), PTR(UINT32), PTR(UINTN), PTR(VOID))
|
||||
EFI_GET_NEXT_VARIABLE_NAME = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(CHAR16), PTR(EFI_GUID))
|
||||
EFI_SET_VARIABLE = FUNCPTR(EFI_STATUS, PTR(CHAR16), PTR(EFI_GUID), UINT32, UINTN, PTR(VOID))
|
||||
EFI_GET_NEXT_HIGH_MONO_COUNT = FUNCPTR(EFI_STATUS, PTR(UINT32))
|
||||
EFI_RESET_SYSTEM = FUNCPTR(VOID, EFI_RESET_TYPE, EFI_STATUS, UINTN, PTR(VOID))
|
||||
EFI_UPDATE_CAPSULE = FUNCPTR(EFI_STATUS, PTR(PTR(EFI_CAPSULE_HEADER)), UINTN, EFI_PHYSICAL_ADDRESS)
|
||||
EFI_QUERY_CAPSULE_CAPABILITIES = FUNCPTR(EFI_STATUS, PTR(PTR(EFI_CAPSULE_HEADER)), UINTN, PTR(UINT64), PTR(EFI_RESET_TYPE))
|
||||
EFI_QUERY_VARIABLE_INFO = FUNCPTR(EFI_STATUS, UINT32, PTR(UINT64), PTR(UINT64), PTR(UINT64))
|
||||
|
||||
class EFI_RUNTIME_SERVICES(STRUCT):
|
||||
_fields_ = [
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('GetTime', EFI_GET_TIME),
|
||||
('SetTime', EFI_SET_TIME),
|
||||
('GetWakeupTime', EFI_GET_WAKEUP_TIME),
|
||||
('SetWakeupTime', EFI_SET_WAKEUP_TIME),
|
||||
('SetVirtualAddressMap', EFI_SET_VIRTUAL_ADDRESS_MAP),
|
||||
('ConvertPointer', EFI_CONVERT_POINTER),
|
||||
('GetVariable', EFI_GET_VARIABLE),
|
||||
('GetNextVariableName', EFI_GET_NEXT_VARIABLE_NAME),
|
||||
('SetVariable', EFI_SET_VARIABLE),
|
||||
('GetNextHighMonotonicCount', EFI_GET_NEXT_HIGH_MONO_COUNT),
|
||||
('ResetSystem', EFI_RESET_SYSTEM),
|
||||
('UpdateCapsule', EFI_UPDATE_CAPSULE),
|
||||
('QueryCapsuleCapabilities', EFI_QUERY_CAPSULE_CAPABILITIES),
|
||||
('QueryVariableInfo', EFI_QUERY_VARIABLE_INFO)
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('GetTime', EFI_GET_TIME),
|
||||
('SetTime', EFI_SET_TIME),
|
||||
('GetWakeupTime', EFI_GET_WAKEUP_TIME),
|
||||
('SetWakeupTime', EFI_SET_WAKEUP_TIME),
|
||||
('SetVirtualAddressMap', EFI_SET_VIRTUAL_ADDRESS_MAP),
|
||||
('ConvertPointer', EFI_CONVERT_POINTER),
|
||||
('GetVariable', EFI_GET_VARIABLE),
|
||||
('GetNextVariableName', EFI_GET_NEXT_VARIABLE_NAME),
|
||||
('SetVariable', EFI_SET_VARIABLE),
|
||||
('GetNextHighMonotonicCount', EFI_GET_NEXT_HIGH_MONO_COUNT),
|
||||
('ResetSystem', EFI_RESET_SYSTEM),
|
||||
('UpdateCapsule', EFI_UPDATE_CAPSULE),
|
||||
('QueryCapsuleCapabilities', EFI_QUERY_CAPSULE_CAPABILITIES),
|
||||
('QueryVariableInfo', EFI_QUERY_VARIABLE_INFO)
|
||||
]
|
||||
|
||||
EFI_EVENT_NOTIFY = FUNCPTR(VOID, EFI_EVENT, PTR(VOID))
|
||||
@@ -112,109 +112,109 @@ EFI_EVENT_NOTIFY = FUNCPTR(VOID, EFI_EVENT, PTR(VOID))
|
||||
class EFI_DEVICE_PATH_PROTOCOL(STRUCT):
|
||||
_fields_ = [
|
||||
('Type', UINT8),
|
||||
('SubType', UINT8),
|
||||
('Length', UINT8 * 2)
|
||||
('SubType', UINT8),
|
||||
('Length', UINT8 * 2)
|
||||
]
|
||||
|
||||
class EFI_OPEN_PROTOCOL_INFORMATION_ENTRY(STRUCT):
|
||||
_fields_ = [
|
||||
('AgentHandle', EFI_HANDLE),
|
||||
('ControllerHandle',EFI_HANDLE),
|
||||
('Attributes', UINT32),
|
||||
('AgentHandle', EFI_HANDLE),
|
||||
('ControllerHandle', EFI_HANDLE),
|
||||
('Attributes', UINT32),
|
||||
('OpenCount', UINT32)
|
||||
]
|
||||
|
||||
EFI_RAISE_TPL = FUNCPTR(EFI_TPL, EFI_TPL)
|
||||
EFI_RESTORE_TPL = FUNCPTR(VOID, EFI_TPL)
|
||||
EFI_ALLOCATE_PAGES = FUNCPTR(EFI_STATUS, EFI_ALLOCATE_TYPE, EFI_MEMORY_TYPE, UINTN, PTR(EFI_PHYSICAL_ADDRESS))
|
||||
EFI_FREE_PAGES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINTN)
|
||||
EFI_GET_MEMORY_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(EFI_MEMORY_DESCRIPTOR), PTR(UINTN), PTR(UINTN), PTR(UINT32))
|
||||
EFI_ALLOCATE_POOL = FUNCPTR(EFI_STATUS, EFI_MEMORY_TYPE, UINTN, PTR(PTR(VOID)))
|
||||
EFI_FREE_POOL = FUNCPTR(EFI_STATUS, PTR(VOID))
|
||||
EFI_CREATE_EVENT = FUNCPTR(EFI_STATUS, UINT32, EFI_TPL, EFI_EVENT_NOTIFY, PTR(VOID), PTR(EFI_EVENT))
|
||||
EFI_SET_TIMER = FUNCPTR(EFI_STATUS, EFI_EVENT, EFI_TIMER_DELAY, UINT64)
|
||||
EFI_WAIT_FOR_EVENT = FUNCPTR(EFI_STATUS, UINTN, PTR(EFI_EVENT), PTR(UINTN))
|
||||
EFI_SIGNAL_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_CLOSE_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_CHECK_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_INSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE), PTR(EFI_GUID), EFI_INTERFACE_TYPE, PTR(VOID))
|
||||
EFI_REINSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(VOID), PTR(VOID))
|
||||
EFI_UNINSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(VOID))
|
||||
EFI_HANDLE_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(VOID)))
|
||||
EFI_REGISTER_PROTOCOL_NOTIFY = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), EFI_EVENT, PTR(PTR(VOID)))
|
||||
EFI_LOCATE_HANDLE = FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(EFI_HANDLE))
|
||||
EFI_LOCATE_DEVICE_PATH = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(PTR(EFI_DEVICE_PATH_PROTOCOL)), PTR(EFI_HANDLE))
|
||||
EFI_INSTALL_CONFIGURATION_TABLE = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID))
|
||||
EFI_IMAGE_LOAD = FUNCPTR(EFI_STATUS, BOOLEAN, EFI_HANDLE, PTR(EFI_DEVICE_PATH_PROTOCOL), PTR(VOID) , UINTN, PTR(EFI_HANDLE))
|
||||
EFI_IMAGE_START = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(UINTN), PTR(PTR(CHAR16)))
|
||||
EFI_EXIT = FUNCPTR(EFI_STATUS, EFI_HANDLE, EFI_STATUS, UINTN, PTR(CHAR16))
|
||||
EFI_IMAGE_UNLOAD = FUNCPTR(EFI_STATUS, EFI_HANDLE)
|
||||
EFI_EXIT_BOOT_SERVICES = FUNCPTR(EFI_STATUS, EFI_HANDLE, UINTN)
|
||||
EFI_GET_NEXT_MONOTONIC_COUNT = FUNCPTR(EFI_STATUS, PTR(UINT64))
|
||||
EFI_STALL = FUNCPTR(EFI_STATUS, UINTN)
|
||||
EFI_SET_WATCHDOG_TIMER = FUNCPTR(EFI_STATUS, UINTN, UINT64, UINTN, PTR(CHAR16))
|
||||
EFI_CONNECT_CONTROLLER = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_HANDLE), PTR(EFI_DEVICE_PATH_PROTOCOL), BOOLEAN)
|
||||
EFI_DISCONNECT_CONTROLLER = FUNCPTR(EFI_STATUS, EFI_HANDLE, EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_OPEN_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(VOID)), EFI_HANDLE, EFI_HANDLE, UINT32)
|
||||
EFI_CLOSE_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_OPEN_PROTOCOL_INFORMATION = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(EFI_OPEN_PROTOCOL_INFORMATION_ENTRY)), PTR(UINTN))
|
||||
EFI_PROTOCOLS_PER_HANDLE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(PTR(PTR(EFI_GUID))), PTR(UINTN))
|
||||
EFI_LOCATE_HANDLE_BUFFER = FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(PTR(EFI_HANDLE)))
|
||||
EFI_LOCATE_PROTOCOL = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(PTR(VOID)))
|
||||
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES = FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE)) # ...
|
||||
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES = FUNCPTR(EFI_STATUS, EFI_HANDLE) # ...
|
||||
EFI_CALCULATE_CRC32 = FUNCPTR(EFI_STATUS, PTR(VOID), UINTN, PTR(UINT32))
|
||||
EFI_COPY_MEM = FUNCPTR(VOID, PTR(VOID), PTR(VOID), UINTN)
|
||||
EFI_SET_MEM = FUNCPTR(VOID, PTR(VOID), UINTN, UINT8)
|
||||
EFI_CREATE_EVENT_EX = FUNCPTR(EFI_STATUS, UINT32, EFI_TPL, EFI_EVENT_NOTIFY, PTR(VOID), PTR(EFI_GUID), PTR(EFI_EVENT))
|
||||
EFI_RAISE_TPL = FUNCPTR(EFI_TPL, EFI_TPL)
|
||||
EFI_RESTORE_TPL = FUNCPTR(VOID, EFI_TPL)
|
||||
EFI_ALLOCATE_PAGES = FUNCPTR(EFI_STATUS, EFI_ALLOCATE_TYPE, EFI_MEMORY_TYPE, UINTN, PTR(EFI_PHYSICAL_ADDRESS))
|
||||
EFI_FREE_PAGES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINTN)
|
||||
EFI_GET_MEMORY_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(EFI_MEMORY_DESCRIPTOR), PTR(UINTN), PTR(UINTN), PTR(UINT32))
|
||||
EFI_ALLOCATE_POOL = FUNCPTR(EFI_STATUS, EFI_MEMORY_TYPE, UINTN, PTR(PTR(VOID)))
|
||||
EFI_FREE_POOL = FUNCPTR(EFI_STATUS, PTR(VOID))
|
||||
EFI_CREATE_EVENT = FUNCPTR(EFI_STATUS, UINT32, EFI_TPL, EFI_EVENT_NOTIFY, PTR(VOID), PTR(EFI_EVENT))
|
||||
EFI_SET_TIMER = FUNCPTR(EFI_STATUS, EFI_EVENT, EFI_TIMER_DELAY, UINT64)
|
||||
EFI_WAIT_FOR_EVENT = FUNCPTR(EFI_STATUS, UINTN, PTR(EFI_EVENT), PTR(UINTN))
|
||||
EFI_SIGNAL_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_CLOSE_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_CHECK_EVENT = FUNCPTR(EFI_STATUS, EFI_EVENT)
|
||||
EFI_INSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE), PTR(EFI_GUID), EFI_INTERFACE_TYPE, PTR(VOID))
|
||||
EFI_REINSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(VOID), PTR(VOID))
|
||||
EFI_UNINSTALL_PROTOCOL_INTERFACE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(VOID))
|
||||
EFI_HANDLE_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(VOID)))
|
||||
EFI_REGISTER_PROTOCOL_NOTIFY = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), EFI_EVENT, PTR(PTR(VOID)))
|
||||
EFI_LOCATE_HANDLE = FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(EFI_HANDLE))
|
||||
EFI_LOCATE_DEVICE_PATH = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(PTR(EFI_DEVICE_PATH_PROTOCOL)), PTR(EFI_HANDLE))
|
||||
EFI_INSTALL_CONFIGURATION_TABLE = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID))
|
||||
EFI_IMAGE_LOAD = FUNCPTR(EFI_STATUS, BOOLEAN, EFI_HANDLE, PTR(EFI_DEVICE_PATH_PROTOCOL), PTR(VOID) , UINTN, PTR(EFI_HANDLE))
|
||||
EFI_IMAGE_START = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(UINTN), PTR(PTR(CHAR16)))
|
||||
EFI_EXIT = FUNCPTR(EFI_STATUS, EFI_HANDLE, EFI_STATUS, UINTN, PTR(CHAR16))
|
||||
EFI_IMAGE_UNLOAD = FUNCPTR(EFI_STATUS, EFI_HANDLE)
|
||||
EFI_EXIT_BOOT_SERVICES = FUNCPTR(EFI_STATUS, EFI_HANDLE, UINTN)
|
||||
EFI_GET_NEXT_MONOTONIC_COUNT = FUNCPTR(EFI_STATUS, PTR(UINT64))
|
||||
EFI_STALL = FUNCPTR(EFI_STATUS, UINTN)
|
||||
EFI_SET_WATCHDOG_TIMER = FUNCPTR(EFI_STATUS, UINTN, UINT64, UINTN, PTR(CHAR16))
|
||||
EFI_CONNECT_CONTROLLER = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_HANDLE), PTR(EFI_DEVICE_PATH_PROTOCOL), BOOLEAN)
|
||||
EFI_DISCONNECT_CONTROLLER = FUNCPTR(EFI_STATUS, EFI_HANDLE, EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_OPEN_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(VOID)), EFI_HANDLE, EFI_HANDLE, UINT32)
|
||||
EFI_CLOSE_PROTOCOL = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_OPEN_PROTOCOL_INFORMATION = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID), PTR(PTR(EFI_OPEN_PROTOCOL_INFORMATION_ENTRY)), PTR(UINTN))
|
||||
EFI_PROTOCOLS_PER_HANDLE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(PTR(PTR(EFI_GUID))), PTR(UINTN))
|
||||
EFI_LOCATE_HANDLE_BUFFER = FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(PTR(EFI_HANDLE)))
|
||||
EFI_LOCATE_PROTOCOL = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(PTR(VOID)))
|
||||
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES = FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE)) # ...
|
||||
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES = FUNCPTR(EFI_STATUS, EFI_HANDLE) # ...
|
||||
EFI_CALCULATE_CRC32 = FUNCPTR(EFI_STATUS, PTR(VOID), UINTN, PTR(UINT32))
|
||||
EFI_COPY_MEM = FUNCPTR(VOID, PTR(VOID), PTR(VOID), UINTN)
|
||||
EFI_SET_MEM = FUNCPTR(VOID, PTR(VOID), UINTN, UINT8)
|
||||
EFI_CREATE_EVENT_EX = FUNCPTR(EFI_STATUS, UINT32, EFI_TPL, EFI_EVENT_NOTIFY, PTR(VOID), PTR(EFI_GUID), PTR(EFI_EVENT))
|
||||
|
||||
class EFI_BOOT_SERVICES(STRUCT):
|
||||
_fields_ = [
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('RaiseTPL', EFI_RAISE_TPL),
|
||||
('RestoreTPL', EFI_RESTORE_TPL),
|
||||
('AllocatePages', EFI_ALLOCATE_PAGES),
|
||||
('FreePages', EFI_FREE_PAGES),
|
||||
('GetMemoryMap', EFI_GET_MEMORY_MAP),
|
||||
('AllocatePool', EFI_ALLOCATE_POOL),
|
||||
('FreePool', EFI_FREE_POOL),
|
||||
('CreateEvent', EFI_CREATE_EVENT),
|
||||
('SetTimer', EFI_SET_TIMER),
|
||||
('WaitForEvent', EFI_WAIT_FOR_EVENT),
|
||||
('SignalEvent', EFI_SIGNAL_EVENT),
|
||||
('CloseEvent', EFI_CLOSE_EVENT),
|
||||
('CheckEvent', EFI_CHECK_EVENT),
|
||||
('InstallProtocolInterface', EFI_INSTALL_PROTOCOL_INTERFACE),
|
||||
('ReinstallProtocolInterface', EFI_REINSTALL_PROTOCOL_INTERFACE),
|
||||
('UninstallProtocolInterface', EFI_UNINSTALL_PROTOCOL_INTERFACE),
|
||||
('HandleProtocol', EFI_HANDLE_PROTOCOL),
|
||||
('Reserved', PTR(VOID)),
|
||||
('RegisterProtocolNotify', EFI_REGISTER_PROTOCOL_NOTIFY),
|
||||
('LocateHandle', EFI_LOCATE_HANDLE),
|
||||
('LocateDevicePath', EFI_LOCATE_DEVICE_PATH),
|
||||
('InstallConfigurationTable', EFI_INSTALL_CONFIGURATION_TABLE),
|
||||
('LoadImage', EFI_IMAGE_LOAD),
|
||||
('StartImage', EFI_IMAGE_START),
|
||||
('Exit', EFI_EXIT),
|
||||
('UnloadImage', EFI_IMAGE_UNLOAD),
|
||||
('ExitBootServices', EFI_EXIT_BOOT_SERVICES),
|
||||
('GetNextMonotonicCount', EFI_GET_NEXT_MONOTONIC_COUNT),
|
||||
('Stall', EFI_STALL),
|
||||
('SetWatchdogTimer', EFI_SET_WATCHDOG_TIMER),
|
||||
('ConnectController', EFI_CONNECT_CONTROLLER),
|
||||
('DisconnectController', EFI_DISCONNECT_CONTROLLER),
|
||||
('OpenProtocol', EFI_OPEN_PROTOCOL),
|
||||
('CloseProtocol', EFI_CLOSE_PROTOCOL),
|
||||
('OpenProtocolInformation', EFI_OPEN_PROTOCOL_INFORMATION),
|
||||
('ProtocolsPerHandle', EFI_PROTOCOLS_PER_HANDLE),
|
||||
('LocateHandleBuffer', EFI_LOCATE_HANDLE_BUFFER),
|
||||
('LocateProtocol', EFI_LOCATE_PROTOCOL),
|
||||
('InstallMultipleProtocolInterfaces', EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES),
|
||||
('UninstallMultipleProtocolInterfaces', EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES),
|
||||
('CalculateCrc32', EFI_CALCULATE_CRC32),
|
||||
('CopyMem', EFI_COPY_MEM),
|
||||
('SetMem', EFI_SET_MEM),
|
||||
('CreateEventEx', EFI_CREATE_EVENT_EX)
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('RaiseTPL', EFI_RAISE_TPL),
|
||||
('RestoreTPL', EFI_RESTORE_TPL),
|
||||
('AllocatePages', EFI_ALLOCATE_PAGES),
|
||||
('FreePages', EFI_FREE_PAGES),
|
||||
('GetMemoryMap', EFI_GET_MEMORY_MAP),
|
||||
('AllocatePool', EFI_ALLOCATE_POOL),
|
||||
('FreePool', EFI_FREE_POOL),
|
||||
('CreateEvent', EFI_CREATE_EVENT),
|
||||
('SetTimer', EFI_SET_TIMER),
|
||||
('WaitForEvent', EFI_WAIT_FOR_EVENT),
|
||||
('SignalEvent', EFI_SIGNAL_EVENT),
|
||||
('CloseEvent', EFI_CLOSE_EVENT),
|
||||
('CheckEvent', EFI_CHECK_EVENT),
|
||||
('InstallProtocolInterface', EFI_INSTALL_PROTOCOL_INTERFACE),
|
||||
('ReinstallProtocolInterface', EFI_REINSTALL_PROTOCOL_INTERFACE),
|
||||
('UninstallProtocolInterface', EFI_UNINSTALL_PROTOCOL_INTERFACE),
|
||||
('HandleProtocol', EFI_HANDLE_PROTOCOL),
|
||||
('Reserved', PTR(VOID)),
|
||||
('RegisterProtocolNotify', EFI_REGISTER_PROTOCOL_NOTIFY),
|
||||
('LocateHandle', EFI_LOCATE_HANDLE),
|
||||
('LocateDevicePath', EFI_LOCATE_DEVICE_PATH),
|
||||
('InstallConfigurationTable', EFI_INSTALL_CONFIGURATION_TABLE),
|
||||
('LoadImage', EFI_IMAGE_LOAD),
|
||||
('StartImage', EFI_IMAGE_START),
|
||||
('Exit', EFI_EXIT),
|
||||
('UnloadImage', EFI_IMAGE_UNLOAD),
|
||||
('ExitBootServices', EFI_EXIT_BOOT_SERVICES),
|
||||
('GetNextMonotonicCount', EFI_GET_NEXT_MONOTONIC_COUNT),
|
||||
('Stall', EFI_STALL),
|
||||
('SetWatchdogTimer', EFI_SET_WATCHDOG_TIMER),
|
||||
('ConnectController', EFI_CONNECT_CONTROLLER),
|
||||
('DisconnectController', EFI_DISCONNECT_CONTROLLER),
|
||||
('OpenProtocol', EFI_OPEN_PROTOCOL),
|
||||
('CloseProtocol', EFI_CLOSE_PROTOCOL),
|
||||
('OpenProtocolInformation', EFI_OPEN_PROTOCOL_INFORMATION),
|
||||
('ProtocolsPerHandle', EFI_PROTOCOLS_PER_HANDLE),
|
||||
('LocateHandleBuffer', EFI_LOCATE_HANDLE_BUFFER),
|
||||
('LocateProtocol', EFI_LOCATE_PROTOCOL),
|
||||
('InstallMultipleProtocolInterfaces', EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES),
|
||||
('UninstallMultipleProtocolInterfaces', EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES),
|
||||
('CalculateCrc32', EFI_CALCULATE_CRC32),
|
||||
('CopyMem', EFI_COPY_MEM),
|
||||
('SetMem', EFI_SET_MEM),
|
||||
('CreateEventEx', EFI_CREATE_EVENT_EX)
|
||||
]
|
||||
|
||||
class EFI_CONFIGURATION_TABLE(STRUCT):
|
||||
@@ -235,19 +235,19 @@ class EFI_SYSTEM_TABLE(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('FirmwareVendor', PTR(CHAR16)),
|
||||
('FirmwareRevision', UINT32),
|
||||
('ConsoleInHandle', EFI_HANDLE),
|
||||
('ConIn', PTR(EFI_SIMPLE_TEXT_INPUT_PROTOCOL)),
|
||||
('ConsoleOutHandle', EFI_HANDLE),
|
||||
('ConOut', PTR(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL)),
|
||||
('StandardErrorHandle', EFI_HANDLE),
|
||||
('StdErr', PTR(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL)),
|
||||
('RuntimeServices', PTR(EFI_RUNTIME_SERVICES)),
|
||||
('BootServices', PTR(EFI_BOOT_SERVICES)),
|
||||
('NumberOfTableEntries', UINTN),
|
||||
('ConfigurationTable', PTR(EFI_CONFIGURATION_TABLE))
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('FirmwareVendor', PTR(CHAR16)),
|
||||
('FirmwareRevision', UINT32),
|
||||
('ConsoleInHandle', EFI_HANDLE),
|
||||
('ConIn', PTR(EFI_SIMPLE_TEXT_INPUT_PROTOCOL)),
|
||||
('ConsoleOutHandle', EFI_HANDLE),
|
||||
('ConOut', PTR(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL)),
|
||||
('StandardErrorHandle', EFI_HANDLE),
|
||||
('StdErr', PTR(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL)),
|
||||
('RuntimeServices', PTR(EFI_RUNTIME_SERVICES)),
|
||||
('BootServices', PTR(EFI_BOOT_SERVICES)),
|
||||
('NumberOfTableEntries', UINTN),
|
||||
('ConfigurationTable', PTR(EFI_CONFIGURATION_TABLE))
|
||||
]
|
||||
|
||||
__all__ = [
|
||||
|
||||
+178
-178
@@ -17,11 +17,11 @@ from qiling.os.uefi.UefiSpec import *
|
||||
from qiling.os.uefi.protocols import common
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from qiling import Qiling
|
||||
from qiling import Qiling
|
||||
|
||||
|
||||
@dxeapi(params = {
|
||||
"NewTpl" : ULONGLONG # EFI_TPL
|
||||
"NewTpl": ULONGLONG # EFI_TPL
|
||||
})
|
||||
def hook_RaiseTPL(ql: Qiling, address: int, params):
|
||||
prev_tpl = ql.loader.tpl
|
||||
@@ -30,16 +30,16 @@ def hook_RaiseTPL(ql: Qiling, address: int, params):
|
||||
return prev_tpl
|
||||
|
||||
@dxeapi(params = {
|
||||
"OldTpl": ULONGLONG # EFI_TPL
|
||||
"OldTpl": ULONGLONG # EFI_TPL
|
||||
})
|
||||
def hook_RestoreTPL(ql: Qiling, address: int, params):
|
||||
ql.loader.tpl = params["OldTpl"]
|
||||
|
||||
@dxeapi(params = {
|
||||
"type" : INT, # EFI_ALLOCATE_TYPE
|
||||
"MemoryType": INT, # EFI_MEMORY_TYPE
|
||||
"Pages" : ULONGLONG, # UINTN
|
||||
"Memory" : POINTER # PTR(EFI_PHYSICAL_ADDRESS)
|
||||
"type": INT, # EFI_ALLOCATE_TYPE
|
||||
"MemoryType": INT, # EFI_MEMORY_TYPE
|
||||
"Pages": ULONGLONG, # UINTN
|
||||
"Memory": POINTER # PTR(EFI_PHYSICAL_ADDRESS)
|
||||
})
|
||||
def hook_AllocatePages(ql: Qiling, address: int, params):
|
||||
alloc_size = params["Pages"] * PAGE_SIZE
|
||||
@@ -61,8 +61,8 @@ def hook_AllocatePages(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Memory" : ULONGLONG, # EFI_PHYSICAL_ADDRESS
|
||||
"Pages" : ULONGLONG # UINTN
|
||||
"Memory": ULONGLONG, # EFI_PHYSICAL_ADDRESS
|
||||
"Pages": ULONGLONG # UINTN
|
||||
})
|
||||
def hook_FreePages(ql: Qiling, address: int, params):
|
||||
address = params["Memory"]
|
||||
@@ -72,19 +72,19 @@ def hook_FreePages(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if ret else EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"MemoryMapSize" : POINTER, # PTR(UINTN)
|
||||
"MemoryMap" : POINTER, # PTR(EFI_MEMORY_DESCRIPTOR)
|
||||
"MapKey" : POINTER, # PTR(UINTN)
|
||||
"DescriptorSize" : POINTER, # PTR(UINTN)
|
||||
"DescriptorVersion" : POINTER # PTR(UINT32)
|
||||
"MemoryMapSize": POINTER, # PTR(UINTN)
|
||||
"MemoryMap": POINTER, # PTR(EFI_MEMORY_DESCRIPTOR)
|
||||
"MapKey": POINTER, # PTR(UINTN)
|
||||
"DescriptorSize": POINTER, # PTR(UINTN)
|
||||
"DescriptorVersion": POINTER # PTR(UINT32)
|
||||
})
|
||||
def hook_GetMemoryMap(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"PoolType" : INT, # EFI_MEMORY_TYPE
|
||||
"Size" : INT, # UINTN
|
||||
"Buffer" : POINTER # PTR(PTR(VOID))
|
||||
"PoolType": INT, # EFI_MEMORY_TYPE
|
||||
"Size": INT, # UINTN
|
||||
"Buffer": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_AllocatePool(ql: Qiling, address: int, params):
|
||||
# TODO: allocate memory acording to "PoolType"
|
||||
@@ -97,7 +97,7 @@ def hook_AllocatePool(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if address else EFI_OUT_OF_RESOURCES
|
||||
|
||||
@dxeapi(params = {
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_FreePool(ql: Qiling, address: int, params):
|
||||
Buffer = params["Buffer"]
|
||||
@@ -107,33 +107,33 @@ def hook_FreePool(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if ret else EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"Type" : UINT, # UINT32
|
||||
"NotifyTpl" : UINT, # EFI_TPL
|
||||
"NotifyFunction": POINTER, # EFI_EVENT_NOTIFY
|
||||
"NotifyContext" : POINTER, # PTR(VOID)
|
||||
"Event" : POINTER # PTR(EFI_EVENT)
|
||||
"Type": UINT, # UINT32
|
||||
"NotifyTpl": UINT, # EFI_TPL
|
||||
"NotifyFunction": POINTER, # EFI_EVENT_NOTIFY
|
||||
"NotifyContext": POINTER, # PTR(VOID)
|
||||
"Event": POINTER # PTR(EFI_EVENT)
|
||||
})
|
||||
def hook_CreateEvent(ql: Qiling, address: int, params):
|
||||
return CreateEvent(ql, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Event" : POINTER, # EFI_EVENT
|
||||
"Type" : ULONGLONG, # EFI_TIMER_DELAY
|
||||
"TriggerTime" : ULONGLONG # UINT64
|
||||
"Event": POINTER, # EFI_EVENT
|
||||
"Type": ULONGLONG, # EFI_TIMER_DELAY
|
||||
"TriggerTime": ULONGLONG # UINT64
|
||||
})
|
||||
def hook_SetTimer(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"NumberOfEvents": ULONGLONG, # UINTN
|
||||
"Event" : POINTER, # PTR(EFI_EVENT)
|
||||
"Index" : POINTER, # PTR(UINTN)
|
||||
"Event": POINTER, # PTR(EFI_EVENT)
|
||||
"Index": POINTER, # PTR(UINTN)
|
||||
})
|
||||
def hook_WaitForEvent(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Event": POINTER # EFI_EVENT
|
||||
"Event": POINTER # EFI_EVENT
|
||||
})
|
||||
def hook_SignalEvent(ql: Qiling, address: int, params):
|
||||
event_id = params["Event"]
|
||||
@@ -146,7 +146,7 @@ def hook_SignalEvent(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Event": POINTER # EFI_EVENT
|
||||
"Event": POINTER # EFI_EVENT
|
||||
})
|
||||
def hook_CloseEvent(ql: Qiling, address: int, params):
|
||||
event_id = params["Event"]
|
||||
@@ -159,7 +159,7 @@ def hook_CloseEvent(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Event": POINTER # EFI_EVENT
|
||||
"Event": POINTER # EFI_EVENT
|
||||
})
|
||||
def hook_CheckEvent(ql: Qiling, address: int, params):
|
||||
event_id = params["Event"]
|
||||
@@ -167,19 +167,19 @@ def hook_CheckEvent(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if ql.loader.events[event_id]["Set"] else EFI_NOT_READY
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # PTR(EFI_HANDLE)
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"InterfaceType" : ULONGLONG, # EFI_INTERFACE_TYPE
|
||||
"Interface" : POINTER, # PTR(VOID)
|
||||
"Handle": POINTER, # PTR(EFI_HANDLE)
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"InterfaceType": ULONGLONG, # EFI_INTERFACE_TYPE
|
||||
"Interface": POINTER, # PTR(VOID)
|
||||
})
|
||||
def hook_InstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
return common.InstallProtocolInterface(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"OldInterface" : POINTER, # PTR(VOID)
|
||||
"NewInterface" : POINTER # PTR(VOID)
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"OldInterface": POINTER, # PTR(VOID)
|
||||
"NewInterface": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_ReinstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
handle = params["Handle"]
|
||||
@@ -198,25 +198,25 @@ def hook_ReinstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Interface" : POINTER # PTR(VOID)
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Interface": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_UninstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
return common.UninstallProtocolInterface(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Interface" : POINTER # PTR(PTR(VOID))
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Interface": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_HandleProtocol(ql: Qiling, address: int, params):
|
||||
return common.HandleProtocol(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Event" : POINTER, # EFI_EVENT
|
||||
"Registration" : POINTER # PTR(PTR(VOID))
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Event": POINTER, # EFI_EVENT
|
||||
"Registration": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_RegisterProtocolNotify(ql: Qiling, address: int, params):
|
||||
event = params['Event']
|
||||
@@ -230,54 +230,54 @@ def hook_RegisterProtocolNotify(ql: Qiling, address: int, params):
|
||||
return EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"SearchKey" : POINTER, # PTR(VOID)
|
||||
"BufferSize": POINTER, # PTR(UINTN)
|
||||
"Buffer" : POINTER # PTR(EFI_HANDLE)
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"SearchKey": POINTER, # PTR(VOID)
|
||||
"BufferSize": POINTER, # PTR(UINTN)
|
||||
"Buffer": POINTER # PTR(EFI_HANDLE)
|
||||
})
|
||||
def hook_LocateHandle(ql: Qiling, address: int, params):
|
||||
return common.LocateHandle(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"DevicePath": POINTER, # PTR(PTR(EFI_DEVICE_PATH_PROTOCOL))
|
||||
"Device" : POINTER # PTR(EFI_HANDLE)
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"DevicePath": POINTER, # PTR(PTR(EFI_DEVICE_PATH_PROTOCOL))
|
||||
"Device": POINTER # PTR(EFI_HANDLE)
|
||||
})
|
||||
def hook_LocateDevicePath(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID, # PTR(EFI_GUID)
|
||||
"Table" : POINTER # PTR(VOID)
|
||||
"Guid": GUID, # PTR(EFI_GUID)
|
||||
"Table": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_InstallConfigurationTable(ql: Qiling, address: int, params):
|
||||
return common.InstallConfigurationTable(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"BootPolicy" : BOOL, # BOOLEAN
|
||||
"ParentImageHandle" : POINTER, # EFI_HANDLE
|
||||
"DevicePath" : POINTER, # PTR(EFI_DEVICE_PATH_PROTOCOL)
|
||||
"SourceBuffer" : POINTER, # PTR(VOID)
|
||||
"SourceSize" : ULONGLONG, # UINTN
|
||||
"ImageHandle" : POINTER # PTR(EFI_HANDLE)
|
||||
"BootPolicy": BOOL, # BOOLEAN
|
||||
"ParentImageHandle": POINTER, # EFI_HANDLE
|
||||
"DevicePath": POINTER, # PTR(EFI_DEVICE_PATH_PROTOCOL)
|
||||
"SourceBuffer": POINTER, # PTR(VOID)
|
||||
"SourceSize": ULONGLONG, # UINTN
|
||||
"ImageHandle": POINTER # PTR(EFI_HANDLE)
|
||||
})
|
||||
def hook_LoadImage(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ImageHandle" : POINTER, # EFI_HANDLE
|
||||
"ExitDataSize" : POINTER, # PTR(UINTN)
|
||||
"ExitData" : POINTER # PTR(PTR(CHAR16))
|
||||
"ImageHandle": POINTER, # EFI_HANDLE
|
||||
"ExitDataSize": POINTER, # PTR(UINTN)
|
||||
"ExitData": POINTER # PTR(PTR(CHAR16))
|
||||
})
|
||||
def hook_StartImage(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ImageHandle" : POINTER, # EFI_HANDLE
|
||||
"ExitStatus" : ULONGLONG, # EFI_STATUS
|
||||
"ExitDataSize" : ULONGLONG, # UINTN
|
||||
"ExitData" : POINTER # PTR(CHAR16)
|
||||
"ImageHandle": POINTER, # EFI_HANDLE
|
||||
"ExitStatus": ULONGLONG, # EFI_STATUS
|
||||
"ExitDataSize": ULONGLONG, # UINTN
|
||||
"ExitData": POINTER # PTR(CHAR16)
|
||||
})
|
||||
def hook_Exit(ql: Qiling, address: int, params):
|
||||
ql.emu_stop()
|
||||
@@ -285,25 +285,25 @@ def hook_Exit(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ImageHandle" : POINTER # EFI_HANDLE
|
||||
"ImageHandle": POINTER # EFI_HANDLE
|
||||
})
|
||||
def hook_UnloadImage(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ImageHandle" : POINTER, # EFI_HANDLE
|
||||
"MapKey" : ULONGLONG # UINTN
|
||||
"ImageHandle": POINTER, # EFI_HANDLE
|
||||
"MapKey": ULONGLONG # UINTN
|
||||
})
|
||||
def hook_ExitBootServices(ql: Qiling, address: int, params):
|
||||
ql.emu_stop()
|
||||
|
||||
# TODO: cleanup BS tableas and data, and notify signal list gEfiEventExitBootServicesGuid
|
||||
# TODO: cleanup BS tables and data, and notify signal list gEfiEventExitBootServicesGuid
|
||||
# @see: MdeModulePkg\Core\Dxe\DxeMain\DxeMain.c, CoreExitBootServices
|
||||
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Count": POINTER # PTR(UINT64)
|
||||
"Count": POINTER # PTR(UINT64)
|
||||
})
|
||||
def hook_GetNextMonotonicCount(ql: Qiling, address: int, params):
|
||||
out = params["Count"]
|
||||
@@ -314,80 +314,80 @@ def hook_GetNextMonotonicCount(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Microseconds": ULONGLONG # UINTN
|
||||
"Microseconds": ULONGLONG # UINTN
|
||||
})
|
||||
def hook_Stall(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Timeout" : ULONGLONG, # UINTN
|
||||
"WatchdogCode" : ULONGLONG, # UINT64
|
||||
"DataSize" : ULONGLONG, # UINTN
|
||||
"WatchdogData" : POINTER # PTR(CHAR16)
|
||||
"Timeout": ULONGLONG, # UINTN
|
||||
"WatchdogCode": ULONGLONG, # UINT64
|
||||
"DataSize": ULONGLONG, # UINTN
|
||||
"WatchdogData": POINTER # PTR(CHAR16)
|
||||
})
|
||||
def hook_SetWatchdogTimer(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ControllerHandle" : POINTER, # EFI_HANDLE
|
||||
"DriverImageHandle" : POINTER, #PTR(EFI_HANDLE)
|
||||
"RemainingDevicePath" : POINTER, # PTR(EFI_DEVICE_PATH_PROTOCOL)
|
||||
"Recursive" : BOOL # BOOLEAN
|
||||
"ControllerHandle": POINTER, # EFI_HANDLE
|
||||
"DriverImageHandle": POINTER, #PTR(EFI_HANDLE)
|
||||
"RemainingDevicePath": POINTER, # PTR(EFI_DEVICE_PATH_PROTOCOL)
|
||||
"Recursive": BOOL # BOOLEAN
|
||||
})
|
||||
def hook_ConnectController(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"ControllerHandle" : POINTER, # EFI_HANDLE
|
||||
"DriverImageHandle" : POINTER, # EFI_HANDLE
|
||||
"ChildHandle" : POINTER # EFI_HANDLE
|
||||
"ControllerHandle": POINTER, # EFI_HANDLE
|
||||
"DriverImageHandle": POINTER, # EFI_HANDLE
|
||||
"ChildHandle": POINTER # EFI_HANDLE
|
||||
})
|
||||
def hook_DisconnectController(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Interface" : POINTER, # PTR(PTR(VOID))
|
||||
"AgentHandle" : POINTER, # EFI_HANDLE
|
||||
"ControllerHandle" : POINTER, # EFI_HANDLE
|
||||
"Attributes" : UINT # UINT32
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Interface": POINTER, # PTR(PTR(VOID))
|
||||
"AgentHandle": POINTER, # EFI_HANDLE
|
||||
"ControllerHandle": POINTER, # EFI_HANDLE
|
||||
"Attributes": UINT # UINT32
|
||||
})
|
||||
def hook_OpenProtocol(ql: Qiling, address: int, params):
|
||||
return common.LocateProtocol(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"AgentHandle" : POINTER, # EFI_HANDLE
|
||||
"ControllerHandle" : POINTER # EFI_HANDLE
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"AgentHandle": POINTER, # EFI_HANDLE
|
||||
"ControllerHandle": POINTER # EFI_HANDLE
|
||||
})
|
||||
def hook_CloseProtocol(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"EntryBuffer" : POINTER, # PTR(PTR(EFI_OPEN_PROTOCOL_INFORMATION_ENTRY))
|
||||
"EntryCount" : POINTER # PTR(UINTN)
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"EntryBuffer": POINTER, # PTR(PTR(EFI_OPEN_PROTOCOL_INFORMATION_ENTRY))
|
||||
"EntryCount": POINTER # PTR(UINTN)
|
||||
})
|
||||
def hook_OpenProtocolInformation(ql: Qiling, address: int, params):
|
||||
return EFI_NOT_FOUND
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"ProtocolBuffer" : POINTER, # PTR(PTR(PTR(EFI_GUID)))
|
||||
"ProtocolBufferCount" : POINTER # PTR(UINTN)
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"ProtocolBuffer": POINTER, # PTR(PTR(PTR(EFI_GUID)))
|
||||
"ProtocolBufferCount": POINTER # PTR(UINTN)
|
||||
})
|
||||
def hook_ProtocolsPerHandle(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"SearchKey" : POINTER, # PTR(VOID)
|
||||
"NoHandles" : POINTER, # PTR(UINTN)
|
||||
"Buffer" : POINTER # PTR(PTR(EFI_HANDLE))
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"SearchKey": POINTER, # PTR(VOID)
|
||||
"NoHandles": POINTER, # PTR(UINTN)
|
||||
"Buffer": POINTER # PTR(PTR(EFI_HANDLE))
|
||||
})
|
||||
def hook_LocateHandleBuffer(ql: Qiling, address: int, params):
|
||||
buffer_size, handles = common.LocateHandles(ql.loader.dxe_context, params)
|
||||
@@ -409,15 +409,15 @@ def hook_LocateHandleBuffer(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Registration" : POINTER, # PTR(VOID)
|
||||
"Interface" : POINTER # PTR(PTR(VOID))
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Registration": POINTER, # PTR(VOID)
|
||||
"Interface": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_LocateProtocol(ql: Qiling, address: int, params):
|
||||
return common.LocateProtocol(ql.loader.dxe_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER # PTR(EFI_HANDLE)
|
||||
"Handle": POINTER # PTR(EFI_HANDLE)
|
||||
# ...
|
||||
})
|
||||
def hook_InstallMultipleProtocolInterfaces(ql: Qiling, address: int, params):
|
||||
@@ -447,7 +447,7 @@ def hook_InstallMultipleProtocolInterfaces(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER # EFI_HANDLE
|
||||
"Handle": POINTER # EFI_HANDLE
|
||||
# ...
|
||||
})
|
||||
def hook_UninstallMultipleProtocolInterfaces(ql: Qiling, address: int, params):
|
||||
@@ -477,9 +477,9 @@ def hook_UninstallMultipleProtocolInterfaces(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Data" : POINTER, # PTR(VOID)
|
||||
"DataSize" : ULONGLONG, # UINTN
|
||||
"Crc32" : POINTER # PTR(UINT32)
|
||||
"Data": POINTER, # PTR(VOID)
|
||||
"DataSize": ULONGLONG, # UINTN
|
||||
"Crc32": POINTER # PTR(UINT32)
|
||||
})
|
||||
def hook_CalculateCrc32(ql: Qiling, address: int, params):
|
||||
data = ql.mem.read(params['Data'], params['DataSize'])
|
||||
@@ -488,9 +488,9 @@ def hook_CalculateCrc32(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Destination" : POINTER, # PTR(VOID)
|
||||
"Source" : POINTER, # PTR(VOID)
|
||||
"Length" : SIZE_T # UINTN
|
||||
"Destination": POINTER, # PTR(VOID)
|
||||
"Source": POINTER, # PTR(VOID)
|
||||
"Length": SIZE_T # UINTN
|
||||
})
|
||||
def hook_CopyMem(ql: Qiling, address: int, params):
|
||||
dst = params["Destination"]
|
||||
@@ -500,9 +500,9 @@ def hook_CopyMem(ql: Qiling, address: int, params):
|
||||
ql.mem.write(dst, bytes(ql.mem.read(src, length)))
|
||||
|
||||
@dxeapi(params = {
|
||||
"Buffer": POINTER, # PTR(VOID)
|
||||
"Size" : SIZE_T, # UINTN
|
||||
"Value" : BYTE # UINT8
|
||||
"Buffer": POINTER, # PTR(VOID)
|
||||
"Size": SIZE_T, # UINTN
|
||||
"Value": BYTE # UINT8
|
||||
})
|
||||
def hook_SetMem(ql: Qiling, address: int, params):
|
||||
buffer = params["Buffer"]
|
||||
@@ -512,12 +512,12 @@ def hook_SetMem(ql: Qiling, address: int, params):
|
||||
ql.mem.write(buffer, bytes([value]) * size)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Type" : UINT, # UINT32
|
||||
"NotifyTpl" : ULONGLONG,# EFI_TPL
|
||||
"NotifyFunction": POINTER, # EFI_EVENT_NOTIFY
|
||||
"NotifyContext" : POINTER, # PTR(VOID)
|
||||
"EventGroup" : GUID, # PTR(EFI_GUID)
|
||||
"Event" : POINTER # PTR(EFI_EVENT)
|
||||
"Type": UINT, # UINT32
|
||||
"NotifyTpl": ULONGLONG, # EFI_TPL
|
||||
"NotifyFunction": POINTER, # EFI_EVENT_NOTIFY
|
||||
"NotifyContext": POINTER, # PTR(VOID)
|
||||
"EventGroup": GUID, # PTR(EFI_GUID)
|
||||
"Event": POINTER # PTR(EFI_EVENT)
|
||||
})
|
||||
def hook_CreateEventEx(ql: Qiling, address: int, params):
|
||||
return CreateEvent(ql, params)
|
||||
@@ -526,9 +526,9 @@ def CreateEvent(ql: Qiling, params):
|
||||
event_id = len(ql.loader.events)
|
||||
event_dic = {
|
||||
"NotifyFunction": params["NotifyFunction"],
|
||||
"CallbackArgs" : [event_id, params["NotifyContext"]],
|
||||
"Guid" : "",
|
||||
"Set" : False
|
||||
"CallbackArgs": [event_id, params["NotifyContext"]],
|
||||
"Guid": "",
|
||||
"Set": False
|
||||
}
|
||||
|
||||
if "EventGroup" in params:
|
||||
@@ -543,51 +543,51 @@ def initialize(ql: Qiling, gBS: int):
|
||||
descriptor = {
|
||||
'struct' : EFI_BOOT_SERVICES,
|
||||
'fields' : (
|
||||
('Hdr', None),
|
||||
('RaiseTPL', hook_RaiseTPL),
|
||||
('RestoreTPL', hook_RestoreTPL),
|
||||
('AllocatePages', hook_AllocatePages),
|
||||
('FreePages', hook_FreePages),
|
||||
('GetMemoryMap', hook_GetMemoryMap),
|
||||
('AllocatePool', hook_AllocatePool),
|
||||
('FreePool', hook_FreePool),
|
||||
('CreateEvent', hook_CreateEvent),
|
||||
('SetTimer', hook_SetTimer),
|
||||
('WaitForEvent', hook_WaitForEvent),
|
||||
('SignalEvent', hook_SignalEvent),
|
||||
('CloseEvent', hook_CloseEvent),
|
||||
('CheckEvent', hook_CheckEvent),
|
||||
('InstallProtocolInterface', hook_InstallProtocolInterface),
|
||||
('ReinstallProtocolInterface', hook_ReinstallProtocolInterface),
|
||||
('UninstallProtocolInterface', hook_UninstallProtocolInterface),
|
||||
('HandleProtocol', hook_HandleProtocol),
|
||||
('Reserved', None),
|
||||
('RegisterProtocolNotify', hook_RegisterProtocolNotify),
|
||||
('LocateHandle', hook_LocateHandle),
|
||||
('LocateDevicePath', hook_LocateDevicePath),
|
||||
('InstallConfigurationTable', hook_InstallConfigurationTable),
|
||||
('LoadImage', hook_LoadImage),
|
||||
('StartImage', hook_StartImage),
|
||||
('Exit', hook_Exit),
|
||||
('UnloadImage', hook_UnloadImage),
|
||||
('ExitBootServices', hook_ExitBootServices),
|
||||
('GetNextMonotonicCount', hook_GetNextMonotonicCount),
|
||||
('Stall', hook_Stall),
|
||||
('SetWatchdogTimer', hook_SetWatchdogTimer),
|
||||
('ConnectController', hook_ConnectController),
|
||||
('DisconnectController', hook_DisconnectController),
|
||||
('OpenProtocol', hook_OpenProtocol),
|
||||
('CloseProtocol', hook_CloseProtocol),
|
||||
('OpenProtocolInformation', hook_OpenProtocolInformation),
|
||||
('ProtocolsPerHandle', hook_ProtocolsPerHandle),
|
||||
('LocateHandleBuffer', hook_LocateHandleBuffer),
|
||||
('LocateProtocol', hook_LocateProtocol),
|
||||
('InstallMultipleProtocolInterfaces', hook_InstallMultipleProtocolInterfaces),
|
||||
('UninstallMultipleProtocolInterfaces', hook_UninstallMultipleProtocolInterfaces),
|
||||
('CalculateCrc32', hook_CalculateCrc32),
|
||||
('CopyMem', hook_CopyMem),
|
||||
('SetMem', hook_SetMem),
|
||||
('CreateEventEx', hook_CreateEventEx)
|
||||
('Hdr', None),
|
||||
('RaiseTPL', hook_RaiseTPL),
|
||||
('RestoreTPL', hook_RestoreTPL),
|
||||
('AllocatePages', hook_AllocatePages),
|
||||
('FreePages', hook_FreePages),
|
||||
('GetMemoryMap', hook_GetMemoryMap),
|
||||
('AllocatePool', hook_AllocatePool),
|
||||
('FreePool', hook_FreePool),
|
||||
('CreateEvent', hook_CreateEvent),
|
||||
('SetTimer', hook_SetTimer),
|
||||
('WaitForEvent', hook_WaitForEvent),
|
||||
('SignalEvent', hook_SignalEvent),
|
||||
('CloseEvent', hook_CloseEvent),
|
||||
('CheckEvent', hook_CheckEvent),
|
||||
('InstallProtocolInterface', hook_InstallProtocolInterface),
|
||||
('ReinstallProtocolInterface', hook_ReinstallProtocolInterface),
|
||||
('UninstallProtocolInterface', hook_UninstallProtocolInterface),
|
||||
('HandleProtocol', hook_HandleProtocol),
|
||||
('Reserved', None),
|
||||
('RegisterProtocolNotify', hook_RegisterProtocolNotify),
|
||||
('LocateHandle', hook_LocateHandle),
|
||||
('LocateDevicePath', hook_LocateDevicePath),
|
||||
('InstallConfigurationTable', hook_InstallConfigurationTable),
|
||||
('LoadImage', hook_LoadImage),
|
||||
('StartImage', hook_StartImage),
|
||||
('Exit', hook_Exit),
|
||||
('UnloadImage', hook_UnloadImage),
|
||||
('ExitBootServices', hook_ExitBootServices),
|
||||
('GetNextMonotonicCount', hook_GetNextMonotonicCount),
|
||||
('Stall', hook_Stall),
|
||||
('SetWatchdogTimer', hook_SetWatchdogTimer),
|
||||
('ConnectController', hook_ConnectController),
|
||||
('DisconnectController', hook_DisconnectController),
|
||||
('OpenProtocol', hook_OpenProtocol),
|
||||
('CloseProtocol', hook_CloseProtocol),
|
||||
('OpenProtocolInformation', hook_OpenProtocolInformation),
|
||||
('ProtocolsPerHandle', hook_ProtocolsPerHandle),
|
||||
('LocateHandleBuffer', hook_LocateHandleBuffer),
|
||||
('LocateProtocol', hook_LocateProtocol),
|
||||
('InstallMultipleProtocolInterfaces', hook_InstallMultipleProtocolInterfaces),
|
||||
('UninstallMultipleProtocolInterfaces', hook_UninstallMultipleProtocolInterfaces),
|
||||
('CalculateCrc32', hook_CalculateCrc32),
|
||||
('CopyMem', hook_CopyMem),
|
||||
('SetMem', hook_SetMem),
|
||||
('CreateEventEx', hook_CreateEventEx)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+35
-35
@@ -1,46 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
EFI_MAX_BIT = (1 << 63)
|
||||
EFI_SUCCESS = 0
|
||||
|
||||
EFI_LOAD_ERROR = EFI_MAX_BIT | 1
|
||||
EFI_INVALID_PARAMETER = EFI_MAX_BIT | 2
|
||||
EFI_UNSUPPORTED = EFI_MAX_BIT | 3
|
||||
EFI_BAD_BUFFER_SIZE = EFI_MAX_BIT | 4
|
||||
EFI_BUFFER_TOO_SMALL = EFI_MAX_BIT | 5
|
||||
EFI_NOT_READY = EFI_MAX_BIT | 6
|
||||
EFI_DEVICE_ERROR = EFI_MAX_BIT | 7
|
||||
EFI_WRITE_PROTECTED = EFI_MAX_BIT | 8
|
||||
EFI_OUT_OF_RESOURCES = EFI_MAX_BIT | 9
|
||||
EFI_VOLUME_CORRUPTED = EFI_MAX_BIT | 10
|
||||
EFI_VOLUME_FULL = EFI_MAX_BIT | 11
|
||||
EFI_NO_MEDIA = EFI_MAX_BIT | 12
|
||||
EFI_MEDIA_CHANGED = EFI_MAX_BIT | 13
|
||||
EFI_NOT_FOUND = EFI_MAX_BIT | 14
|
||||
EFI_ACCESS_DENIED = EFI_MAX_BIT | 15
|
||||
EFI_NO_RESPONSE = EFI_MAX_BIT | 16
|
||||
EFI_NO_MAPPING = EFI_MAX_BIT | 17
|
||||
EFI_TIMEOUT = EFI_MAX_BIT | 18
|
||||
EFI_NOT_STARTED = EFI_MAX_BIT | 19
|
||||
EFI_ALREADY_STARTED = EFI_MAX_BIT | 20
|
||||
EFI_ABORTED = EFI_MAX_BIT | 21
|
||||
EFI_ICMP_ERROR = EFI_MAX_BIT | 22
|
||||
EFI_TFTP_ERROR = EFI_MAX_BIT | 23
|
||||
EFI_PROTOCOL_ERROR = EFI_MAX_BIT | 24
|
||||
EFI_INCOMPATIBLE_VERSION = EFI_MAX_BIT | 25
|
||||
EFI_SECURITY_VIOLATION = EFI_MAX_BIT | 26
|
||||
EFI_CRC_ERROR = EFI_MAX_BIT | 27
|
||||
EFI_END_OF_MEDIA = EFI_MAX_BIT | 28
|
||||
EFI_END_OF_FILE = EFI_MAX_BIT | 31
|
||||
EFI_INVALID_LANGUAGE = EFI_MAX_BIT | 32
|
||||
EFI_LOAD_ERROR = EFI_MAX_BIT | 1
|
||||
EFI_INVALID_PARAMETER = EFI_MAX_BIT | 2
|
||||
EFI_UNSUPPORTED = EFI_MAX_BIT | 3
|
||||
EFI_BAD_BUFFER_SIZE = EFI_MAX_BIT | 4
|
||||
EFI_BUFFER_TOO_SMALL = EFI_MAX_BIT | 5
|
||||
EFI_NOT_READY = EFI_MAX_BIT | 6
|
||||
EFI_DEVICE_ERROR = EFI_MAX_BIT | 7
|
||||
EFI_WRITE_PROTECTED = EFI_MAX_BIT | 8
|
||||
EFI_OUT_OF_RESOURCES = EFI_MAX_BIT | 9
|
||||
EFI_VOLUME_CORRUPTED = EFI_MAX_BIT | 10
|
||||
EFI_VOLUME_FULL = EFI_MAX_BIT | 11
|
||||
EFI_NO_MEDIA = EFI_MAX_BIT | 12
|
||||
EFI_MEDIA_CHANGED = EFI_MAX_BIT | 13
|
||||
EFI_NOT_FOUND = EFI_MAX_BIT | 14
|
||||
EFI_ACCESS_DENIED = EFI_MAX_BIT | 15
|
||||
EFI_NO_RESPONSE = EFI_MAX_BIT | 16
|
||||
EFI_NO_MAPPING = EFI_MAX_BIT | 17
|
||||
EFI_TIMEOUT = EFI_MAX_BIT | 18
|
||||
EFI_NOT_STARTED = EFI_MAX_BIT | 19
|
||||
EFI_ALREADY_STARTED = EFI_MAX_BIT | 20
|
||||
EFI_ABORTED = EFI_MAX_BIT | 21
|
||||
EFI_ICMP_ERROR = EFI_MAX_BIT | 22
|
||||
EFI_TFTP_ERROR = EFI_MAX_BIT | 23
|
||||
EFI_PROTOCOL_ERROR = EFI_MAX_BIT | 24
|
||||
EFI_INCOMPATIBLE_VERSION = EFI_MAX_BIT | 25
|
||||
EFI_SECURITY_VIOLATION = EFI_MAX_BIT | 26
|
||||
EFI_CRC_ERROR = EFI_MAX_BIT | 27
|
||||
EFI_END_OF_MEDIA = EFI_MAX_BIT | 28
|
||||
EFI_END_OF_FILE = EFI_MAX_BIT | 31
|
||||
EFI_INVALID_LANGUAGE = EFI_MAX_BIT | 32
|
||||
|
||||
EFI_WARN_UNKNOWN_GLYPH = EFI_MAX_BIT | 1
|
||||
EFI_WARN_DELETE_FAILURE = EFI_MAX_BIT | 2
|
||||
EFI_WARN_WRITE_FAILURE = EFI_MAX_BIT | 3
|
||||
EFI_WARN_BUFFER_TOO_SMALL = EFI_MAX_BIT | 4
|
||||
EFI_WARN_UNKNOWN_GLYPH = EFI_MAX_BIT | 1
|
||||
EFI_WARN_DELETE_FAILURE = EFI_MAX_BIT | 2
|
||||
EFI_WARN_WRITE_FAILURE = EFI_MAX_BIT | 3
|
||||
EFI_WARN_BUFFER_TOO_SMALL = EFI_MAX_BIT | 4
|
||||
|
||||
# @see: MdePkg\Include\Base.h
|
||||
EFI_ERROR = lambda status: (status & EFI_MAX_BIT) != 0
|
||||
|
||||
+85
-85
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -28,13 +28,13 @@ class EFI_GCD_MEMORY_SPACE_DESCRIPTOR(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('BaseAddress', EFI_PHYSICAL_ADDRESS),
|
||||
('Length', UINT64),
|
||||
('Capabilities', UINT64),
|
||||
('Attributes', UINT64),
|
||||
('GcdMemoryType', EFI_GCD_MEMORY_TYPE),
|
||||
('ImageHandle', EFI_HANDLE),
|
||||
('DeviceHandle', EFI_HANDLE)
|
||||
('BaseAddress', EFI_PHYSICAL_ADDRESS),
|
||||
('Length', UINT64),
|
||||
('Capabilities', UINT64),
|
||||
('Attributes', UINT64),
|
||||
('GcdMemoryType', EFI_GCD_MEMORY_TYPE),
|
||||
('ImageHandle', EFI_HANDLE),
|
||||
('DeviceHandle', EFI_HANDLE)
|
||||
]
|
||||
|
||||
class EFI_GCD_IO_TYPE(ENUM):
|
||||
@@ -49,11 +49,11 @@ class EFI_GCD_IO_SPACE_DESCRIPTOR(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('BaseAddress', EFI_PHYSICAL_ADDRESS),
|
||||
('Length', UINT64),
|
||||
('GcdIoType', EFI_GCD_IO_TYPE),
|
||||
('ImageHandle', EFI_HANDLE),
|
||||
('DeviceHandle', EFI_HANDLE)
|
||||
('BaseAddress', EFI_PHYSICAL_ADDRESS),
|
||||
('Length', UINT64),
|
||||
('GcdIoType', EFI_GCD_IO_TYPE),
|
||||
('ImageHandle', EFI_HANDLE),
|
||||
('DeviceHandle', EFI_HANDLE)
|
||||
]
|
||||
|
||||
class EFI_GCD_ALLOCATE_TYPE(ENUM):
|
||||
@@ -66,46 +66,46 @@ class EFI_GCD_ALLOCATE_TYPE(ENUM):
|
||||
'EfiGcdMaxAllocateType'
|
||||
]
|
||||
|
||||
EFI_ADD_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_MEMORY_TYPE, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
EFI_ALLOCATE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_ALLOCATE_TYPE, EFI_GCD_MEMORY_TYPE, UINTN, UINT64, PTR(EFI_PHYSICAL_ADDRESS), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_FREE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_REMOVE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_GET_MEMORY_SPACE_DESCRIPTOR = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, PTR(EFI_GCD_MEMORY_SPACE_DESCRIPTOR))
|
||||
EFI_SET_MEMORY_SPACE_ATTRIBUTES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
EFI_GET_MEMORY_SPACE_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(PTR(EFI_GCD_MEMORY_SPACE_DESCRIPTOR)))
|
||||
EFI_ADD_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_IO_TYPE, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_ALLOCATE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_ALLOCATE_TYPE, EFI_GCD_IO_TYPE, UINTN, UINT64, PTR(EFI_PHYSICAL_ADDRESS), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_FREE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_REMOVE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_GET_IO_SPACE_DESCRIPTOR = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, PTR(EFI_GCD_IO_SPACE_DESCRIPTOR))
|
||||
EFI_GET_IO_SPACE_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(PTR(EFI_GCD_IO_SPACE_DESCRIPTOR)))
|
||||
EFI_DISPATCH = FUNCPTR(EFI_STATUS)
|
||||
EFI_SCHEDULE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID))
|
||||
EFI_TRUST = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID))
|
||||
EFI_PROCESS_FIRMWARE_VOLUME = FUNCPTR(EFI_STATUS, PTR(VOID), UINTN, PTR(EFI_HANDLE))
|
||||
EFI_SET_MEMORY_SPACE_CAPABILITIES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
EFI_ADD_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_MEMORY_TYPE, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
EFI_ALLOCATE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_ALLOCATE_TYPE, EFI_GCD_MEMORY_TYPE, UINTN, UINT64, PTR(EFI_PHYSICAL_ADDRESS), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_FREE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_REMOVE_MEMORY_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_GET_MEMORY_SPACE_DESCRIPTOR = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, PTR(EFI_GCD_MEMORY_SPACE_DESCRIPTOR))
|
||||
EFI_SET_MEMORY_SPACE_ATTRIBUTES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
EFI_GET_MEMORY_SPACE_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(PTR(EFI_GCD_MEMORY_SPACE_DESCRIPTOR)))
|
||||
EFI_ADD_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_IO_TYPE, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_ALLOCATE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_GCD_ALLOCATE_TYPE, EFI_GCD_IO_TYPE, UINTN, UINT64, PTR(EFI_PHYSICAL_ADDRESS), EFI_HANDLE, EFI_HANDLE)
|
||||
EFI_FREE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_REMOVE_IO_SPACE = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64)
|
||||
EFI_GET_IO_SPACE_DESCRIPTOR = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, PTR(EFI_GCD_IO_SPACE_DESCRIPTOR))
|
||||
EFI_GET_IO_SPACE_MAP = FUNCPTR(EFI_STATUS, PTR(UINTN), PTR(PTR(EFI_GCD_IO_SPACE_DESCRIPTOR)))
|
||||
EFI_DISPATCH = FUNCPTR(EFI_STATUS)
|
||||
EFI_SCHEDULE = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID))
|
||||
EFI_TRUST = FUNCPTR(EFI_STATUS, EFI_HANDLE, PTR(EFI_GUID))
|
||||
EFI_PROCESS_FIRMWARE_VOLUME = FUNCPTR(EFI_STATUS, PTR(VOID), UINTN, PTR(EFI_HANDLE))
|
||||
EFI_SET_MEMORY_SPACE_CAPABILITIES = FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINT64, UINT64)
|
||||
|
||||
class EFI_DXE_SERVICES(STRUCT):
|
||||
_fields_ = [
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('AddMemorySpace', EFI_ADD_MEMORY_SPACE),
|
||||
('AllocateMemorySpace', EFI_ALLOCATE_MEMORY_SPACE),
|
||||
('FreeMemorySpace', EFI_FREE_MEMORY_SPACE),
|
||||
('RemoveMemorySpace', EFI_REMOVE_MEMORY_SPACE),
|
||||
('GetMemorySpaceDescriptor', EFI_GET_MEMORY_SPACE_DESCRIPTOR),
|
||||
('SetMemorySpaceAttributes', EFI_SET_MEMORY_SPACE_ATTRIBUTES),
|
||||
('GetMemorySpaceMap', EFI_GET_MEMORY_SPACE_MAP),
|
||||
('AddIoSpace', EFI_ADD_IO_SPACE),
|
||||
('AllocateIoSpace', EFI_ALLOCATE_IO_SPACE),
|
||||
('FreeIoSpace', EFI_FREE_IO_SPACE),
|
||||
('RemoveIoSpace', EFI_REMOVE_IO_SPACE),
|
||||
('GetIoSpaceDescriptor', EFI_GET_IO_SPACE_DESCRIPTOR),
|
||||
('GetIoSpaceMap', EFI_GET_IO_SPACE_MAP),
|
||||
('Dispatch', EFI_DISPATCH),
|
||||
('Schedule', EFI_SCHEDULE),
|
||||
('Trust', EFI_TRUST),
|
||||
('ProcessFirmwareVolume', EFI_PROCESS_FIRMWARE_VOLUME),
|
||||
('SetMemorySpaceCapabilities', EFI_SET_MEMORY_SPACE_CAPABILITIES)
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('AddMemorySpace', EFI_ADD_MEMORY_SPACE),
|
||||
('AllocateMemorySpace', EFI_ALLOCATE_MEMORY_SPACE),
|
||||
('FreeMemorySpace', EFI_FREE_MEMORY_SPACE),
|
||||
('RemoveMemorySpace', EFI_REMOVE_MEMORY_SPACE),
|
||||
('GetMemorySpaceDescriptor', EFI_GET_MEMORY_SPACE_DESCRIPTOR),
|
||||
('SetMemorySpaceAttributes', EFI_SET_MEMORY_SPACE_ATTRIBUTES),
|
||||
('GetMemorySpaceMap', EFI_GET_MEMORY_SPACE_MAP),
|
||||
('AddIoSpace', EFI_ADD_IO_SPACE),
|
||||
('AllocateIoSpace', EFI_ALLOCATE_IO_SPACE),
|
||||
('FreeIoSpace', EFI_FREE_IO_SPACE),
|
||||
('RemoveIoSpace', EFI_REMOVE_IO_SPACE),
|
||||
('GetIoSpaceDescriptor', EFI_GET_IO_SPACE_DESCRIPTOR),
|
||||
('GetIoSpaceMap', EFI_GET_IO_SPACE_MAP),
|
||||
('Dispatch', EFI_DISPATCH),
|
||||
('Schedule', EFI_SCHEDULE),
|
||||
('Trust', EFI_TRUST),
|
||||
('ProcessFirmwareVolume', EFI_PROCESS_FIRMWARE_VOLUME),
|
||||
('SetMemorySpaceCapabilities', EFI_SET_MEMORY_SPACE_CAPABILITIES)
|
||||
]
|
||||
|
||||
@dxeapi(params={
|
||||
@@ -122,9 +122,9 @@ def hook_AddMemorySpace(ctx, address, params):
|
||||
"a1": ULONGLONG,
|
||||
"a2": ULONGLONG,
|
||||
"a3": ULONGLONG,
|
||||
"a4": POINTER, #POINTER_T(ctypes.c_uint64)
|
||||
"a5": POINTER, #POINTER_T(None)
|
||||
"a6": POINTER, #POINTER_T(None)
|
||||
"a4": POINTER, # POINTER_T(ctypes.c_uint64)
|
||||
"a5": POINTER, # POINTER_T(None)
|
||||
"a6": POINTER, # POINTER_T(None)
|
||||
})
|
||||
def hook_AllocateMemorySpace(ctx, address, params):
|
||||
return EFI_OUT_OF_RESOURCES
|
||||
@@ -145,7 +145,7 @@ def hook_RemoveMemorySpace(ctx, address, params):
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": ULONGLONG,
|
||||
"a1": POINTER, #POINTER_T(struct_EFI_GCD_MEMORY_SPACE_DESCRIPTOR)
|
||||
"a1": POINTER, # POINTER_T(struct_EFI_GCD_MEMORY_SPACE_DESCRIPTOR)
|
||||
})
|
||||
def hook_GetMemorySpaceDescriptor(ctx, address, params):
|
||||
return EFI_UNSUPPORTED
|
||||
@@ -159,8 +159,8 @@ def hook_SetMemorySpaceAttributes(ctx, address, params):
|
||||
return EFI_UNSUPPORTED
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": POINTER, #POINTER_T(ctypes.c_uint64)
|
||||
"a1": POINTER, #POINTER_T(POINTER_T(struct_EFI_GCD_MEMORY_SPACE_DESCRIPTOR))
|
||||
"a0": POINTER, # POINTER_T(ctypes.c_uint64)
|
||||
"a1": POINTER, # POINTER_T(POINTER_T(struct_EFI_GCD_MEMORY_SPACE_DESCRIPTOR))
|
||||
})
|
||||
def hook_GetMemorySpaceMap(ctx, address, params):
|
||||
return EFI_UNSUPPORTED
|
||||
@@ -178,9 +178,9 @@ def hook_AddIoSpace(ctx, address, params):
|
||||
"a1": ULONGLONG,
|
||||
"a2": ULONGLONG,
|
||||
"a3": ULONGLONG,
|
||||
"a4": POINTER, #POINTER_T(ctypes.c_uint64)
|
||||
"a5": POINTER, #POINTER_T(None)
|
||||
"a6": POINTER, #POINTER_T(None)
|
||||
"a4": POINTER, # POINTER_T(ctypes.c_uint64)
|
||||
"a5": POINTER, # POINTER_T(None)
|
||||
"a6": POINTER, # POINTER_T(None)
|
||||
})
|
||||
def hook_AllocateIoSpace(ctx, address, params):
|
||||
return EFI_OUT_OF_RESOURCES
|
||||
@@ -201,14 +201,14 @@ def hook_RemoveIoSpace(ctx, address, params):
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": ULONGLONG,
|
||||
"a1": POINTER, #POINTER_T(struct_EFI_GCD_IO_SPACE_DESCRIPTOR)
|
||||
"a1": POINTER, # POINTER_T(struct_EFI_GCD_IO_SPACE_DESCRIPTOR)
|
||||
})
|
||||
def hook_GetIoSpaceDescriptor(ctx, address, params):
|
||||
return EFI_NOT_FOUND
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": POINTER, #POINTER_T(ctypes.c_uint64)
|
||||
"a1": POINTER, #POINTER_T(POINTER_T(struct_EFI_GCD_IO_SPACE_DESCRIPTOR))
|
||||
"a0": POINTER, # POINTER_T(ctypes.c_uint64)
|
||||
"a1": POINTER, # POINTER_T(POINTER_T(struct_EFI_GCD_IO_SPACE_DESCRIPTOR))
|
||||
})
|
||||
def hook_GetIoSpaceMap(ctx, address, params):
|
||||
return EFI_OUT_OF_RESOURCES
|
||||
@@ -219,23 +219,23 @@ def hook_Dispatch(ctx, address, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": POINTER, #POINTER_T(None)
|
||||
"a0": POINTER, # POINTER_T(None)
|
||||
"a1": GUID,
|
||||
})
|
||||
def hook_Schedule(ctx, address, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": POINTER, #POINTER_T(None)
|
||||
"a0": POINTER, # POINTER_T(None)
|
||||
"a1": GUID,
|
||||
})
|
||||
def hook_Trust(ctx, address, params):
|
||||
return EFI_NOT_FOUND
|
||||
|
||||
@dxeapi(params={
|
||||
"a0": POINTER, #POINTER_T(None)
|
||||
"a0": POINTER, # POINTER_T(None)
|
||||
"a1": ULONGLONG,
|
||||
"a2": POINTER, #POINTER_T(POINTER_T(None))
|
||||
"a2": POINTER, # POINTER_T(POINTER_T(None))
|
||||
})
|
||||
def hook_ProcessFirmwareVolume(ctx, address, params):
|
||||
return EFI_OUT_OF_RESOURCES
|
||||
@@ -252,25 +252,25 @@ def initialize(ql: Qiling, gDS: int):
|
||||
descriptor = {
|
||||
'struct' : EFI_DXE_SERVICES,
|
||||
'fields' : (
|
||||
('Hdr', None),
|
||||
('AddMemorySpace', hook_AddMemorySpace),
|
||||
('AllocateMemorySpace', hook_AllocateMemorySpace),
|
||||
('FreeMemorySpace', hook_FreeMemorySpace),
|
||||
('RemoveMemorySpace', hook_RemoveMemorySpace),
|
||||
('GetMemorySpaceDescriptor', hook_GetMemorySpaceDescriptor),
|
||||
('SetMemorySpaceAttributes', hook_SetMemorySpaceAttributes),
|
||||
('GetMemorySpaceMap', hook_GetMemorySpaceMap),
|
||||
('AddIoSpace', hook_AddIoSpace),
|
||||
('AllocateIoSpace', hook_AllocateIoSpace),
|
||||
('FreeIoSpace', hook_FreeIoSpace),
|
||||
('RemoveIoSpace', hook_RemoveIoSpace),
|
||||
('GetIoSpaceDescriptor', hook_GetIoSpaceDescriptor),
|
||||
('GetIoSpaceMap', hook_GetIoSpaceMap),
|
||||
('Dispatch', hook_Dispatch),
|
||||
('Schedule', hook_Schedule),
|
||||
('Trust', hook_Trust),
|
||||
('ProcessFirmwareVolume', hook_ProcessFirmwareVolume),
|
||||
('SetMemorySpaceCapabilities', hook_SetMemorySpaceCapabilities)
|
||||
('Hdr', None),
|
||||
('AddMemorySpace', hook_AddMemorySpace),
|
||||
('AllocateMemorySpace', hook_AllocateMemorySpace),
|
||||
('FreeMemorySpace', hook_FreeMemorySpace),
|
||||
('RemoveMemorySpace', hook_RemoveMemorySpace),
|
||||
('GetMemorySpaceDescriptor', hook_GetMemorySpaceDescriptor),
|
||||
('SetMemorySpaceAttributes', hook_SetMemorySpaceAttributes),
|
||||
('GetMemorySpaceMap', hook_GetMemorySpaceMap),
|
||||
('AddIoSpace', hook_AddIoSpace),
|
||||
('AllocateIoSpace', hook_AllocateIoSpace),
|
||||
('FreeIoSpace', hook_FreeIoSpace),
|
||||
('RemoveIoSpace', hook_RemoveIoSpace),
|
||||
('GetIoSpaceDescriptor', hook_GetIoSpaceDescriptor),
|
||||
('GetIoSpaceMap', hook_GetIoSpaceMap),
|
||||
('Dispatch', hook_Dispatch),
|
||||
('Schedule', hook_Schedule),
|
||||
('Trust', hook_Trust),
|
||||
('ProcessFirmwareVolume', hook_ProcessFirmwareVolume),
|
||||
('SetMemorySpaceCapabilities', hook_SetMemorySpaceCapabilities)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -9,20 +9,20 @@ from qiling.os.uefi.utils import GetEfiConfigurationTable, CompareGuid, str_to_g
|
||||
from qiling.os.uefi.UefiBaseType import STRUCT, EFI_GUID, UINT32, UINT16
|
||||
|
||||
EFI_HOB_TYPE_HANDOFF = 0x0001
|
||||
EFI_HOB_TYPE_GUID_EXTENSION = 0x0004
|
||||
EFI_HOB_TYPE_GUID_EXTENSION = 0x0004
|
||||
EFI_HOB_TYPE_END_OF_HOB_LIST = 0xffff
|
||||
|
||||
class EFI_HOB_GENERIC_HEADER(STRUCT):
|
||||
_fields_ = [
|
||||
('HobType', UINT16),
|
||||
('HobLength', UINT16),
|
||||
('Reserved', UINT32)
|
||||
('HobType', UINT16),
|
||||
('HobLength', UINT16),
|
||||
('Reserved', UINT32)
|
||||
]
|
||||
|
||||
class EFI_HOB_GUID_TYPE(STRUCT):
|
||||
_fields_ = [
|
||||
('Header', EFI_HOB_GENERIC_HEADER),
|
||||
('Name', EFI_GUID)
|
||||
('Header', EFI_HOB_GENERIC_HEADER),
|
||||
('Name', EFI_GUID)
|
||||
]
|
||||
|
||||
def GetHobList(ql: Qiling, context: UefiContext) -> int:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -14,17 +14,17 @@ class EFI_LOADED_IMAGE_PROTOCOL(STRUCT):
|
||||
_fields_ = [
|
||||
('Revision', UINT32),
|
||||
('ParentHandle', EFI_HANDLE),
|
||||
('SystemTable', PTR(EFI_SYSTEM_TABLE)),
|
||||
('SystemTable', PTR(EFI_SYSTEM_TABLE)),
|
||||
('DeviceHandle', EFI_HANDLE),
|
||||
('FilePath', PTR(EFI_DEVICE_PATH_PROTOCOL)),
|
||||
('Reserved', PTR(VOID)),
|
||||
('LoadOptionsSize', UINT32),
|
||||
('LoadOptions', PTR(VOID)),
|
||||
('ImageBase', PTR(VOID)),
|
||||
('ImageSize', UINT64),
|
||||
('ImageCodeType', EFI_MEMORY_TYPE),
|
||||
('ImageDataType', EFI_MEMORY_TYPE),
|
||||
('Unload', EFI_IMAGE_UNLOAD)
|
||||
('Reserved', PTR(VOID)),
|
||||
('LoadOptionsSize', UINT32),
|
||||
('LoadOptions', PTR(VOID)),
|
||||
('ImageBase', PTR(VOID)),
|
||||
('ImageSize', UINT64),
|
||||
('ImageCodeType', EFI_MEMORY_TYPE),
|
||||
('ImageDataType', EFI_MEMORY_TYPE),
|
||||
('Unload', EFI_IMAGE_UNLOAD)
|
||||
]
|
||||
|
||||
def make_descriptor(fields):
|
||||
@@ -34,16 +34,16 @@ def make_descriptor(fields):
|
||||
"fields" : (
|
||||
('Revision', 0x1000),
|
||||
('ParentHandle', 0),
|
||||
('SystemTable', fields['gST']),
|
||||
('SystemTable', fields['gST']),
|
||||
('DeviceHandle', fields['image_base']),
|
||||
('FilePath', 0), # This is a handle to a complex path object, skip it for now.
|
||||
('LoadOptionsSize', 0),
|
||||
('LoadOptions', 0),
|
||||
('ImageBase', fields['image_base']),
|
||||
('ImageSize', fields['image_size']),
|
||||
('ImageCodeType', EFI_MEMORY_TYPE.EfiLoaderCode),
|
||||
('ImageDataType', EFI_MEMORY_TYPE.EfiLoaderData),
|
||||
('Unload', 0)
|
||||
('LoadOptionsSize', 0),
|
||||
('LoadOptions', 0),
|
||||
('ImageBase', fields['image_base']),
|
||||
('ImageSize', fields['image_size']),
|
||||
('ImageCodeType', EFI_MEMORY_TYPE.EfiLoaderCode),
|
||||
('ImageDataType', EFI_MEMORY_TYPE.EfiLoaderData),
|
||||
('Unload', 0)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ class EFI_SMM_ACCESS2_PROTOCOL(STRUCT):
|
||||
]
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER
|
||||
"This": POINTER
|
||||
})
|
||||
def hook_Open(ql: Qiling, address: int, params):
|
||||
ql.loader.smm_context.tseg_open = True
|
||||
@@ -43,7 +43,7 @@ def hook_Open(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER
|
||||
"This": POINTER
|
||||
})
|
||||
def hook_Close(ql: Qiling, address: int, params):
|
||||
ql.loader.smm_context.tseg_open = False
|
||||
@@ -51,7 +51,7 @@ def hook_Close(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER
|
||||
"This": POINTER
|
||||
})
|
||||
def hook_Lock(ql: Qiling, address: int, params):
|
||||
ql.loader.smm_context.tseg_locked = True
|
||||
@@ -80,9 +80,9 @@ def _coalesce(seq):
|
||||
return res
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER, # PTR(EFI_SMM_ACCESS2_PROTOCOL)
|
||||
"MmramMapSize" : POINTER, # IN OUT PTR(UINTN)
|
||||
"MmramMap" : POINTER # OUT PTR(EFI_MMRAM_DESCRIPTOR)
|
||||
"This": POINTER, # PTR(EFI_SMM_ACCESS2_PROTOCOL)
|
||||
"MmramMapSize": POINTER, # IN OUT PTR(UINTN)
|
||||
"MmramMap": POINTER # OUT PTR(EFI_MMRAM_DESCRIPTOR)
|
||||
})
|
||||
def hook_GetCapabilities(ql: Qiling, address: int, params):
|
||||
heap = ql.loader.smm_context.heap
|
||||
@@ -148,8 +148,8 @@ descriptor = {
|
||||
"struct" : EFI_SMM_ACCESS2_PROTOCOL,
|
||||
"fields" : (
|
||||
("Open", hook_Open),
|
||||
("Close", hook_Close),
|
||||
("Close", hook_Close),
|
||||
("Lock", hook_Lock),
|
||||
("GetCapabilities", hook_GetCapabilities)
|
||||
("GetCapabilities", hook_GetCapabilities)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -17,13 +17,13 @@ class EFI_SMM_BASE2_PROTOCOL(STRUCT):
|
||||
EFI_SMM_BASE2_PROTOCOL = STRUCT
|
||||
|
||||
_fields_ = [
|
||||
('InSmm', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_BASE2_PROTOCOL), PTR(BOOLEAN))),
|
||||
('GetSmstLocation', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_BASE2_PROTOCOL), PTR(PTR(EFI_SMM_SYSTEM_TABLE2)))),
|
||||
('InSmm', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_BASE2_PROTOCOL), PTR(BOOLEAN))),
|
||||
('GetSmstLocation', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_BASE2_PROTOCOL), PTR(PTR(EFI_SMM_SYSTEM_TABLE2)))),
|
||||
]
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER,
|
||||
"InSmram" : POINTER
|
||||
"This": POINTER,
|
||||
"InSmram": POINTER
|
||||
})
|
||||
def hook_InSmm(ql: Qiling, address: int, params):
|
||||
ql.log.debug(f'InSmram = {ql.os.smm.active}')
|
||||
@@ -33,8 +33,8 @@ def hook_InSmm(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER,
|
||||
"Smst" : POINTER
|
||||
"This": POINTER,
|
||||
"Smst": POINTER
|
||||
})
|
||||
def hook_GetSmstLocation(ql: Qiling, address: int, params):
|
||||
Smst = params["Smst"]
|
||||
@@ -50,7 +50,7 @@ descriptor = {
|
||||
"guid" : "f4ccbfb7-f6e0-47fd-9dd4-10a8f150c191",
|
||||
"struct" : EFI_SMM_BASE2_PROTOCOL,
|
||||
"fields" : (
|
||||
("InSmm", hook_InSmm),
|
||||
("GetSmstLocation", hook_GetSmstLocation)
|
||||
("InSmm", hook_InSmm),
|
||||
("GetSmstLocation", hook_GetSmstLocation)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -12,96 +12,96 @@ from ..const import *
|
||||
# @see: MdePkg/Include/Protocol/MmCpu.h
|
||||
class EFI_SMM_SAVE_STATE_REGISTER(ENUM_UC):
|
||||
_members_ = {
|
||||
# note: members names were shorten from 'EFI_SMM_SAVE_STATE_REGISTER_regname' to just 'regname'
|
||||
'GDTBASE' : 4,
|
||||
'IDTBASE' : 5,
|
||||
'LDTBASE' : 6,
|
||||
'GDTLIMIT' : 7,
|
||||
'IDTLIMIT' : 8,
|
||||
'LDTLIMIT' : 9,
|
||||
'LDTINFO' : 10,
|
||||
# note: members names were shorten from 'EFI_SMM_SAVE_STATE_REGISTER_regname' to just 'regname'
|
||||
'GDTBASE': 4,
|
||||
'IDTBASE': 5,
|
||||
'LDTBASE': 6,
|
||||
'GDTLIMIT': 7,
|
||||
'IDTLIMIT': 8,
|
||||
'LDTLIMIT': 9,
|
||||
'LDTINFO': 10,
|
||||
|
||||
'ES' : 20,
|
||||
'CS' : 21,
|
||||
'SS' : 22,
|
||||
'DS' : 23,
|
||||
'FS' : 24,
|
||||
'GS' : 25,
|
||||
'LDTR_SEL' : 26,
|
||||
'TR_SEL' : 27,
|
||||
'DR7' : 28,
|
||||
'DR6' : 29,
|
||||
'R8' : 30,
|
||||
'R9' : 31,
|
||||
'R10' : 32,
|
||||
'R11' : 33,
|
||||
'R12' : 34,
|
||||
'R13' : 35,
|
||||
'R14' : 36,
|
||||
'R15' : 37,
|
||||
'RAX' : 38,
|
||||
'RBX' : 39,
|
||||
'RCX' : 40,
|
||||
'RDX' : 41,
|
||||
'RSP' : 42,
|
||||
'RBP' : 43,
|
||||
'RSI' : 44,
|
||||
'RDI' : 45,
|
||||
'RIP' : 46,
|
||||
'ES': 20,
|
||||
'CS': 21,
|
||||
'SS': 22,
|
||||
'DS': 23,
|
||||
'FS': 24,
|
||||
'GS': 25,
|
||||
'LDTR_SEL': 26,
|
||||
'TR_SEL': 27,
|
||||
'DR7': 28,
|
||||
'DR6': 29,
|
||||
'R8': 30,
|
||||
'R9': 31,
|
||||
'R10': 32,
|
||||
'R11': 33,
|
||||
'R12': 34,
|
||||
'R13': 35,
|
||||
'R14': 36,
|
||||
'R15': 37,
|
||||
'RAX': 38,
|
||||
'RBX': 39,
|
||||
'RCX': 40,
|
||||
'RDX': 41,
|
||||
'RSP': 42,
|
||||
'RBP': 43,
|
||||
'RSI': 44,
|
||||
'RDI': 45,
|
||||
'RIP': 46,
|
||||
|
||||
'RFLAGS' : 51,
|
||||
'CR0' : 52,
|
||||
'CR3' : 53,
|
||||
'CR4' : 54,
|
||||
'RFLAGS': 51,
|
||||
'CR0': 52,
|
||||
'CR3': 53,
|
||||
'CR4': 54,
|
||||
|
||||
'FCW' : 256,
|
||||
'FSW' : 257,
|
||||
'FTW' : 258,
|
||||
'OPCODE' : 259,
|
||||
'FP_EIP' : 260,
|
||||
'FP_CS' : 261,
|
||||
'FCW': 256,
|
||||
'FSW': 257,
|
||||
'FTW': 258,
|
||||
'OPCODE': 259,
|
||||
'FP_EIP': 260,
|
||||
'FP_CS': 261,
|
||||
'DATAOFFSET': 262,
|
||||
'FP_DS' : 263,
|
||||
'MM0' : 264,
|
||||
'MM1' : 265,
|
||||
'MM2' : 266,
|
||||
'MM3' : 267,
|
||||
'MM4' : 268,
|
||||
'MM5' : 269,
|
||||
'MM6' : 270,
|
||||
'MM7' : 271,
|
||||
'XMM0' : 272,
|
||||
'XMM1' : 273,
|
||||
'XMM2' : 274,
|
||||
'XMM3' : 275,
|
||||
'XMM4' : 276,
|
||||
'XMM5' : 277,
|
||||
'XMM6' : 278,
|
||||
'XMM7' : 279,
|
||||
'XMM8' : 280,
|
||||
'XMM9' : 281,
|
||||
'XMM10' : 282,
|
||||
'XMM11' : 283,
|
||||
'XMM12' : 284,
|
||||
'XMM13' : 285,
|
||||
'XMM14' : 286,
|
||||
'XMM15' : 287,
|
||||
'FP_DS': 263,
|
||||
'MM0': 264,
|
||||
'MM1': 265,
|
||||
'MM2': 266,
|
||||
'MM3': 267,
|
||||
'MM4': 268,
|
||||
'MM5': 269,
|
||||
'MM6': 270,
|
||||
'MM7': 271,
|
||||
'XMM0': 272,
|
||||
'XMM1': 273,
|
||||
'XMM2': 274,
|
||||
'XMM3': 275,
|
||||
'XMM4': 276,
|
||||
'XMM5': 277,
|
||||
'XMM6': 278,
|
||||
'XMM7': 279,
|
||||
'XMM8': 280,
|
||||
'XMM9': 281,
|
||||
'XMM10': 282,
|
||||
'XMM11': 283,
|
||||
'XMM12': 284,
|
||||
'XMM13': 285,
|
||||
'XMM14': 286,
|
||||
'XMM15': 287,
|
||||
|
||||
'IO' : 512,
|
||||
'LMA' : 513,
|
||||
'PROCESSOR_ID' : 514
|
||||
'IO': 512,
|
||||
'LMA': 513,
|
||||
'PROCESSOR_ID': 514
|
||||
}
|
||||
|
||||
# EFI_SUCCESS The register was written from Save State
|
||||
# EFI_NOT_FOUND The register is not defined for the Save State of Processor
|
||||
# EFI_INVALID_PARAMETER ProcessorIndex or Width is not correct
|
||||
# EFI_SUCCESS The register was written from Save State
|
||||
# EFI_NOT_FOUND The register is not defined for the Save State of Processor
|
||||
# EFI_INVALID_PARAMETER ProcessorIndex or Width is not correct
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER, # EFI_SMM_CPU_PROTOCOL
|
||||
"Width" : ULONGLONG,# UINTN
|
||||
"Register" : INT, # EFI_SMM_SAVE_STATE_REGISTER
|
||||
"CpuIndex" : ULONGLONG,# UINTN
|
||||
"Buffer" : POINTER # PTR(VOID)
|
||||
"This": POINTER, # EFI_SMM_CPU_PROTOCOL
|
||||
"Width": ULONGLONG, # UINTN
|
||||
"Register": INT, # EFI_SMM_SAVE_STATE_REGISTER
|
||||
"CpuIndex": ULONGLONG, # UINTN
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SmmReadSaveState(ql: Qiling, address: int, params):
|
||||
Width = params['Width']
|
||||
@@ -119,11 +119,11 @@ def hook_SmmReadSaveState(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER, # EFI_SMM_CPU_PROTOCOL
|
||||
"Width" : ULONGLONG,# UINTN
|
||||
"Register" : INT, # EFI_SMM_SAVE_STATE_REGISTER
|
||||
"CpuIndex" : ULONGLONG,# UINTN
|
||||
"Buffer" : POINTER # PTR(VOID)
|
||||
"This": POINTER, # EFI_SMM_CPU_PROTOCOL
|
||||
"Width": ULONGLONG, # UINTN
|
||||
"Register": INT, # EFI_SMM_SAVE_STATE_REGISTER
|
||||
"CpuIndex": ULONGLONG, # UINTN
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SmmWriteSaveState(ql: Qiling, address: int, params):
|
||||
Width = params['Width']
|
||||
@@ -144,15 +144,15 @@ class EFI_SMM_CPU_PROTOCOL(STRUCT):
|
||||
EFI_SMM_CPU_PROTOCOL = STRUCT
|
||||
|
||||
_fields_ = [
|
||||
('SmmReadSaveState', FUNCPTR(PTR(EFI_SMM_CPU_PROTOCOL), UINTN, EFI_SMM_SAVE_STATE_REGISTER, UINTN, PTR(VOID))),
|
||||
('SmmWriteSaveState', FUNCPTR(PTR(EFI_SMM_CPU_PROTOCOL), UINTN, EFI_SMM_SAVE_STATE_REGISTER, UINTN, PTR(VOID)))
|
||||
('SmmReadSaveState', FUNCPTR(PTR(EFI_SMM_CPU_PROTOCOL), UINTN, EFI_SMM_SAVE_STATE_REGISTER, UINTN, PTR(VOID))),
|
||||
('SmmWriteSaveState', FUNCPTR(PTR(EFI_SMM_CPU_PROTOCOL), UINTN, EFI_SMM_SAVE_STATE_REGISTER, UINTN, PTR(VOID)))
|
||||
]
|
||||
|
||||
descriptor = {
|
||||
"guid" : "eb346b97-975f-4a9f-8b22-f8e92bb3d569",
|
||||
"struct" : EFI_SMM_CPU_PROTOCOL,
|
||||
"fields" : (
|
||||
("SmmReadSaveState", hook_SmmReadSaveState),
|
||||
("SmmWriteSaveState", hook_SmmWriteSaveState)
|
||||
("SmmReadSaveState", hook_SmmReadSaveState),
|
||||
("SmmWriteSaveState", hook_SmmWriteSaveState)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ class EFI_SMM_SW_CONTEXT(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('SwSmiCpuIndex', UINTN), # index of the cpu which generated the swsmi
|
||||
('CommandPort', UINT8), # port number used to trigger the swsmi
|
||||
('DataPort', UINT8) # irrelevant
|
||||
('SwSmiCpuIndex', UINTN), # index of the cpu which generated the swsmi
|
||||
('CommandPort', UINT8), # port number used to trigger the swsmi
|
||||
('DataPort', UINT8) # irrelevant
|
||||
]
|
||||
|
||||
# @file: MdePkg\Include\Protocol\SmmSwDispatch2.h
|
||||
@@ -35,15 +35,15 @@ class EFI_SMM_SW_DISPATCH2_PROTOCOL(STRUCT):
|
||||
|
||||
_fields_ = [
|
||||
('Register', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_SW_DISPATCH2_PROTOCOL), EFI_SMM_HANDLER_ENTRY_POINT2, PTR(EFI_SMM_SW_REGISTER_CONTEXT), PTR(EFI_HANDLE))),
|
||||
('UnRegister', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_SW_DISPATCH2_PROTOCOL), EFI_HANDLE)),
|
||||
('MaximumSwiValue', UINTN)
|
||||
('UnRegister', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_SW_DISPATCH2_PROTOCOL), EFI_HANDLE)),
|
||||
('MaximumSwiValue', UINTN)
|
||||
]
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER, # PTR(EFI_SMM_SW_DISPATCH2_PROTOCOL)
|
||||
"DispatchFunction" : POINTER, # EFI_SMM_HANDLER_ENTRY_POINT2
|
||||
"RegisterContext" : POINTER, # PTR(EFI_SMM_SW_REGISTER_CONTEXT)
|
||||
"DispatchHandle" : POINTER # PTR(EFI_HANDLE)
|
||||
"This": POINTER, # PTR(EFI_SMM_SW_DISPATCH2_PROTOCOL)
|
||||
"DispatchFunction": POINTER, # EFI_SMM_HANDLER_ENTRY_POINT2
|
||||
"RegisterContext": POINTER, # PTR(EFI_SMM_SW_REGISTER_CONTEXT)
|
||||
"DispatchHandle": POINTER # PTR(EFI_HANDLE)
|
||||
})
|
||||
def hook_Register(ql: Qiling, address: int, params):
|
||||
DispatchFunction: int = params['DispatchFunction']
|
||||
@@ -83,8 +83,8 @@ def hook_Register(ql: Qiling, address: int, params):
|
||||
ql.mem.write_ptr(DispatchHandle, Handle)
|
||||
|
||||
args = {
|
||||
'DispatchHandle' : Handle,
|
||||
'RegisterContext' : SwRegisterContext
|
||||
'DispatchHandle': Handle,
|
||||
'RegisterContext': SwRegisterContext
|
||||
}
|
||||
|
||||
handlers[idx] = (DispatchFunction, args)
|
||||
@@ -92,8 +92,8 @@ def hook_Register(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"This" : POINTER,
|
||||
"DispatchHandle" : POINTER
|
||||
"This": POINTER,
|
||||
"DispatchHandle": POINTER
|
||||
})
|
||||
def hook_UnRegister(ql: Qiling, address: int, params):
|
||||
DispatchHandle: int = params['DispatchHandle']
|
||||
@@ -116,7 +116,7 @@ descriptor = {
|
||||
"struct" : EFI_SMM_SW_DISPATCH2_PROTOCOL,
|
||||
"fields" : (
|
||||
("Register", hook_Register),
|
||||
("UnRegister", hook_UnRegister),
|
||||
('MaximumSwiValue', MAXIMUM_SWI_VALUE)
|
||||
("UnRegister", hook_UnRegister),
|
||||
('MaximumSwiValue', MAXIMUM_SWI_VALUE)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -10,287 +10,287 @@ from ..UefiBaseType import *
|
||||
|
||||
PCD_PROTOCOL_CALLBACK = FUNCPTR(VOID, PTR(EFI_GUID), UINTN, PTR(VOID), UINTN)
|
||||
|
||||
PCD_PROTOCOL_SET_SKU = FUNCPTR(VOID, UINTN)
|
||||
PCD_PROTOCOL_SET_SKU = FUNCPTR(VOID, UINTN)
|
||||
PCD_PROTOCOL_GET8 = FUNCPTR(UINT8, UINTN)
|
||||
PCD_PROTOCOL_GET16 = FUNCPTR(UINT16, UINTN)
|
||||
PCD_PROTOCOL_GET32 = FUNCPTR(UINT32, UINTN)
|
||||
PCD_PROTOCOL_GET64 = FUNCPTR(UINT64, UINTN)
|
||||
PCD_PROTOCOL_GET_POINTER = FUNCPTR(PTR(VOID), UINTN)
|
||||
PCD_PROTOCOL_GET_BOOLEAN = FUNCPTR(BOOLEAN, UINTN)
|
||||
PCD_PROTOCOL_GET16 = FUNCPTR(UINT16, UINTN)
|
||||
PCD_PROTOCOL_GET32 = FUNCPTR(UINT32, UINTN)
|
||||
PCD_PROTOCOL_GET64 = FUNCPTR(UINT64, UINTN)
|
||||
PCD_PROTOCOL_GET_POINTER = FUNCPTR(PTR(VOID), UINTN)
|
||||
PCD_PROTOCOL_GET_BOOLEAN = FUNCPTR(BOOLEAN, UINTN)
|
||||
PCD_PROTOCOL_GET_SIZE = FUNCPTR(UINTN, UINTN)
|
||||
PCD_PROTOCOL_GET_EX_8 = FUNCPTR(UINT8, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_16 = FUNCPTR(UINT16, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_32 = FUNCPTR(UINT32, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_64 = FUNCPTR(UINT64, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_POINTER = FUNCPTR(PTR(VOID), PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_BOOLEAN = FUNCPTR(BOOLEAN, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_SIZE = FUNCPTR(UINTN, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_16 = FUNCPTR(UINT16, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_32 = FUNCPTR(UINT32, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_64 = FUNCPTR(UINT64, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_POINTER = FUNCPTR(PTR(VOID), PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_BOOLEAN = FUNCPTR(BOOLEAN, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_GET_EX_SIZE = FUNCPTR(UINTN, PTR(EFI_GUID), UINTN)
|
||||
PCD_PROTOCOL_SET8 = FUNCPTR(EFI_STATUS, UINTN, UINT8)
|
||||
PCD_PROTOCOL_SET16 = FUNCPTR(EFI_STATUS, UINTN, UINT16)
|
||||
PCD_PROTOCOL_SET32 = FUNCPTR(EFI_STATUS, UINTN, UINT32)
|
||||
PCD_PROTOCOL_SET64 = FUNCPTR(EFI_STATUS, UINTN, UINT64)
|
||||
PCD_PROTOCOL_SET_POINTER = FUNCPTR(EFI_STATUS, UINTN, PTR(UINTN), PTR(VOID))
|
||||
PCD_PROTOCOL_SET_BOOLEAN = FUNCPTR(EFI_STATUS, UINTN, BOOLEAN)
|
||||
PCD_PROTOCOL_SET16 = FUNCPTR(EFI_STATUS, UINTN, UINT16)
|
||||
PCD_PROTOCOL_SET32 = FUNCPTR(EFI_STATUS, UINTN, UINT32)
|
||||
PCD_PROTOCOL_SET64 = FUNCPTR(EFI_STATUS, UINTN, UINT64)
|
||||
PCD_PROTOCOL_SET_POINTER = FUNCPTR(EFI_STATUS, UINTN, PTR(UINTN), PTR(VOID))
|
||||
PCD_PROTOCOL_SET_BOOLEAN = FUNCPTR(EFI_STATUS, UINTN, BOOLEAN)
|
||||
PCD_PROTOCOL_SET_EX_8 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT8)
|
||||
PCD_PROTOCOL_SET_EX_16 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT16)
|
||||
PCD_PROTOCOL_SET_EX_32 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT32)
|
||||
PCD_PROTOCOL_SET_EX_64 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT64)
|
||||
PCD_PROTOCOL_SET_EX_POINTER = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PTR(UINTN), PTR(VOID))
|
||||
PCD_PROTOCOL_SET_EX_BOOLEAN = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, BOOLEAN)
|
||||
PCD_PROTOCOL_CALLBACK_ONSET = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PCD_PROTOCOL_CALLBACK)
|
||||
PCD_PROTOCOL_CANCEL_CALLBACK= FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PCD_PROTOCOL_CALLBACK)
|
||||
PCD_PROTOCOL_GET_NEXT_TOKEN = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(UINTN))
|
||||
PCD_PROTOCOL_SET_EX_16 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT16)
|
||||
PCD_PROTOCOL_SET_EX_32 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT32)
|
||||
PCD_PROTOCOL_SET_EX_64 = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, UINT64)
|
||||
PCD_PROTOCOL_SET_EX_POINTER = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PTR(UINTN), PTR(VOID))
|
||||
PCD_PROTOCOL_SET_EX_BOOLEAN = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, BOOLEAN)
|
||||
PCD_PROTOCOL_CALLBACK_ONSET = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PCD_PROTOCOL_CALLBACK)
|
||||
PCD_PROTOCOL_CANCEL_CALLBACK = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), UINTN, PCD_PROTOCOL_CALLBACK)
|
||||
PCD_PROTOCOL_GET_NEXT_TOKEN = FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(UINTN))
|
||||
PCD_PROTOCOL_GET_NEXT_TOKENSPACE = FUNCPTR(EFI_STATUS, PTR(PTR(EFI_GUID)))
|
||||
|
||||
class PCD_PROTOCOL(STRUCT):
|
||||
_fields_ = [
|
||||
('SetSku', PCD_PROTOCOL_SET_SKU),
|
||||
('Get8', PCD_PROTOCOL_GET8),
|
||||
('Get16', PCD_PROTOCOL_GET16),
|
||||
('Get32', PCD_PROTOCOL_GET32),
|
||||
('Get64', PCD_PROTOCOL_GET64),
|
||||
('GetPtr', PCD_PROTOCOL_GET_POINTER),
|
||||
('GetBool', PCD_PROTOCOL_GET_BOOLEAN),
|
||||
('GetSize', PCD_PROTOCOL_GET_SIZE),
|
||||
('Get8Ex', PCD_PROTOCOL_GET_EX_8),
|
||||
('Get16Ex', PCD_PROTOCOL_GET_EX_16),
|
||||
('Get32Ex', PCD_PROTOCOL_GET_EX_32),
|
||||
('Get64Ex', PCD_PROTOCOL_GET_EX_64),
|
||||
('GetPtrEx', PCD_PROTOCOL_GET_EX_POINTER),
|
||||
('GetBoolEx', PCD_PROTOCOL_GET_EX_BOOLEAN),
|
||||
('GetSizeEx', PCD_PROTOCOL_GET_EX_SIZE),
|
||||
('Set8', PCD_PROTOCOL_SET8),
|
||||
('Set16', PCD_PROTOCOL_SET16),
|
||||
('Set32', PCD_PROTOCOL_SET32),
|
||||
('Set64', PCD_PROTOCOL_SET64),
|
||||
('SetPtr', PCD_PROTOCOL_SET_POINTER),
|
||||
('SetBool', PCD_PROTOCOL_SET_BOOLEAN),
|
||||
('Set8Ex', PCD_PROTOCOL_SET_EX_8),
|
||||
('Set16Ex', PCD_PROTOCOL_SET_EX_16),
|
||||
('Set32Ex', PCD_PROTOCOL_SET_EX_32),
|
||||
('Set64Ex', PCD_PROTOCOL_SET_EX_64),
|
||||
('SetPtrEx', PCD_PROTOCOL_SET_EX_POINTER),
|
||||
('SetBoolEx', PCD_PROTOCOL_SET_EX_BOOLEAN),
|
||||
('CallbackOnSet', PCD_PROTOCOL_CALLBACK_ONSET),
|
||||
('CancelCallback', PCD_PROTOCOL_CANCEL_CALLBACK),
|
||||
('GetNextToken', PCD_PROTOCOL_GET_NEXT_TOKEN),
|
||||
('GetNextTokenSpace', PCD_PROTOCOL_GET_NEXT_TOKENSPACE)
|
||||
('SetSku', PCD_PROTOCOL_SET_SKU),
|
||||
('Get8', PCD_PROTOCOL_GET8),
|
||||
('Get16', PCD_PROTOCOL_GET16),
|
||||
('Get32', PCD_PROTOCOL_GET32),
|
||||
('Get64', PCD_PROTOCOL_GET64),
|
||||
('GetPtr', PCD_PROTOCOL_GET_POINTER),
|
||||
('GetBool', PCD_PROTOCOL_GET_BOOLEAN),
|
||||
('GetSize', PCD_PROTOCOL_GET_SIZE),
|
||||
('Get8Ex', PCD_PROTOCOL_GET_EX_8),
|
||||
('Get16Ex', PCD_PROTOCOL_GET_EX_16),
|
||||
('Get32Ex', PCD_PROTOCOL_GET_EX_32),
|
||||
('Get64Ex', PCD_PROTOCOL_GET_EX_64),
|
||||
('GetPtrEx', PCD_PROTOCOL_GET_EX_POINTER),
|
||||
('GetBoolEx', PCD_PROTOCOL_GET_EX_BOOLEAN),
|
||||
('GetSizeEx', PCD_PROTOCOL_GET_EX_SIZE),
|
||||
('Set8', PCD_PROTOCOL_SET8),
|
||||
('Set16', PCD_PROTOCOL_SET16),
|
||||
('Set32', PCD_PROTOCOL_SET32),
|
||||
('Set64', PCD_PROTOCOL_SET64),
|
||||
('SetPtr', PCD_PROTOCOL_SET_POINTER),
|
||||
('SetBool', PCD_PROTOCOL_SET_BOOLEAN),
|
||||
('Set8Ex', PCD_PROTOCOL_SET_EX_8),
|
||||
('Set16Ex', PCD_PROTOCOL_SET_EX_16),
|
||||
('Set32Ex', PCD_PROTOCOL_SET_EX_32),
|
||||
('Set64Ex', PCD_PROTOCOL_SET_EX_64),
|
||||
('SetPtrEx', PCD_PROTOCOL_SET_EX_POINTER),
|
||||
('SetBoolEx', PCD_PROTOCOL_SET_EX_BOOLEAN),
|
||||
('CallbackOnSet', PCD_PROTOCOL_CALLBACK_ONSET),
|
||||
('CancelCallback', PCD_PROTOCOL_CANCEL_CALLBACK),
|
||||
('GetNextToken', PCD_PROTOCOL_GET_NEXT_TOKEN),
|
||||
('GetNextTokenSpace', PCD_PROTOCOL_GET_NEXT_TOKENSPACE)
|
||||
]
|
||||
|
||||
@dxeapi(params = {
|
||||
"SkuId" : UINT
|
||||
"SkuId": UINT
|
||||
})
|
||||
def hook_SetSku(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get8(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get16(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get32(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get64(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetPtr(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetBool(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetSize(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get8Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get16Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get32Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_Get64Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetPtrEx(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetBoolEx(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT
|
||||
})
|
||||
def hook_GetSizeEx(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set8(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set16(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set32(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set64(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"SizeOfValue" : POINTER,
|
||||
"Buffer" : POINTER
|
||||
"TokenNumber": UINT,
|
||||
"SizeOfValue": POINTER,
|
||||
"Buffer": POINTER
|
||||
})
|
||||
def hook_SetPtr(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_SetBool(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set8Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set16Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set32Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_Set64Ex(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"SizeOfValue" : POINTER,
|
||||
"Buffer" : POINTER
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"SizeOfValue": POINTER,
|
||||
"Buffer": POINTER
|
||||
})
|
||||
def hook_SetPtrEx(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"Value" : INT
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"Value": INT
|
||||
})
|
||||
def hook_SetBoolEx(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"CallBackFunction" : POINTER
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"CallBackFunction": POINTER
|
||||
})
|
||||
def hook_CallbackOnSet(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : UINT,
|
||||
"CallBackFunction" : POINTER
|
||||
"Guid": GUID,
|
||||
"TokenNumber": UINT,
|
||||
"CallBackFunction": POINTER
|
||||
})
|
||||
def hook_CancelCallback(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID,
|
||||
"TokenNumber" : POINTER
|
||||
"Guid": GUID,
|
||||
"TokenNumber": POINTER
|
||||
})
|
||||
def hook_GetNextToken(ql, address, params):
|
||||
pass
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : POINTER
|
||||
"Guid": POINTER
|
||||
})
|
||||
def hook_GetNextTokenSpace(ql, address, params):
|
||||
pass
|
||||
@@ -299,36 +299,36 @@ descriptor = {
|
||||
"guid" : "11b34006-d85b-4d0a-a290-d5a571310ef7",
|
||||
"struct" : PCD_PROTOCOL,
|
||||
"fields" : (
|
||||
('SetSku', hook_SetSku),
|
||||
('Get8', hook_Get8),
|
||||
('Get16', hook_Get16),
|
||||
('Get32', hook_Get32),
|
||||
('Get64', hook_Get64),
|
||||
('GetPtr', hook_GetPtr),
|
||||
('GetBool', hook_GetBool),
|
||||
('GetSize', hook_GetSize),
|
||||
('Get8Ex', hook_Get8Ex),
|
||||
('Get16Ex', hook_Get16Ex),
|
||||
('Get32Ex', hook_Get32Ex),
|
||||
('Get64Ex', hook_Get64Ex),
|
||||
('GetPtrEx', hook_GetPtrEx),
|
||||
('GetBoolEx', hook_GetBoolEx),
|
||||
('GetSizeEx', hook_GetSizeEx),
|
||||
('Set8', hook_Set8),
|
||||
('Set16', hook_Set16),
|
||||
('Set32', hook_Set32),
|
||||
('Set64', hook_Set64),
|
||||
('SetPtr', hook_SetPtr),
|
||||
('SetBool', hook_SetBool),
|
||||
('Set8Ex', hook_Set8Ex),
|
||||
('Set16Ex', hook_Set16Ex),
|
||||
('Set32Ex', hook_Set32Ex),
|
||||
('Set64Ex', hook_Set64Ex),
|
||||
('SetPtrEx', hook_SetPtrEx),
|
||||
('SetBoolEx', hook_SetBoolEx),
|
||||
('CallbackOnSet', hook_CallbackOnSet),
|
||||
('CancelCallback', hook_CancelCallback),
|
||||
('GetNextToken', hook_GetNextToken),
|
||||
('GetNextTokenSpace', hook_GetNextTokenSpace)
|
||||
('SetSku', hook_SetSku),
|
||||
('Get8', hook_Get8),
|
||||
('Get16', hook_Get16),
|
||||
('Get32', hook_Get32),
|
||||
('Get64', hook_Get64),
|
||||
('GetPtr', hook_GetPtr),
|
||||
('GetBool', hook_GetBool),
|
||||
('GetSize', hook_GetSize),
|
||||
('Get8Ex', hook_Get8Ex),
|
||||
('Get16Ex', hook_Get16Ex),
|
||||
('Get32Ex', hook_Get32Ex),
|
||||
('Get64Ex', hook_Get64Ex),
|
||||
('GetPtrEx', hook_GetPtrEx),
|
||||
('GetBoolEx', hook_GetBoolEx),
|
||||
('GetSizeEx', hook_GetSizeEx),
|
||||
('Set8', hook_Set8),
|
||||
('Set16', hook_Set16),
|
||||
('Set32', hook_Set32),
|
||||
('Set64', hook_Set64),
|
||||
('SetPtr', hook_SetPtr),
|
||||
('SetBool', hook_SetBool),
|
||||
('Set8Ex', hook_Set8Ex),
|
||||
('Set16Ex', hook_Set16Ex),
|
||||
('Set32Ex', hook_Set32Ex),
|
||||
('Set64Ex', hook_Set64Ex),
|
||||
('SetPtrEx', hook_SetPtrEx),
|
||||
('SetBoolEx', hook_SetBoolEx),
|
||||
('CallbackOnSet', hook_CallbackOnSet),
|
||||
('CancelCallback', hook_CancelCallback),
|
||||
('GetNextToken', hook_GetNextToken),
|
||||
('GetNextTokenSpace', hook_GetNextTokenSpace)
|
||||
)
|
||||
}
|
||||
|
||||
+57
-57
@@ -15,8 +15,8 @@ from .UefiBaseType import EFI_TIME
|
||||
from .UefiSpec import *
|
||||
|
||||
@dxeapi(params={
|
||||
"Time" : POINTER, # OUT PTR(EFI_TIME)
|
||||
"Capabilities" : POINTER # OUT PTR(EFI_TIME_CAPABILITIES)
|
||||
"Time": POINTER, # OUT PTR(EFI_TIME)
|
||||
"Capabilities": POINTER # OUT PTR(EFI_TIME_CAPABILITIES)
|
||||
})
|
||||
def hook_GetTime(ql: Qiling, address: int, params):
|
||||
Time = params['Time']
|
||||
@@ -45,48 +45,48 @@ def hook_GetTime(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"Time": POINTER # IN PTR(EFI_TIME)
|
||||
"Time": POINTER # IN PTR(EFI_TIME)
|
||||
})
|
||||
def hook_SetTime(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"Enabled" : POINTER, # OUT PTR(BOOLEAN)
|
||||
"Pending" : POINTER, # OUT PTR(BOOLEAN)
|
||||
"Time" : POINTER # OUT PTR(EFI_TIME)
|
||||
"Enabled": POINTER, # OUT PTR(BOOLEAN)
|
||||
"Pending": POINTER, # OUT PTR(BOOLEAN)
|
||||
"Time": POINTER # OUT PTR(EFI_TIME)
|
||||
})
|
||||
def hook_GetWakeupTime(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"Enable": BOOL, # BOOLEAN
|
||||
"Time" : POINTER # PTR(EFI_TIME)
|
||||
"Enable": BOOL, # BOOLEAN
|
||||
"Time": POINTER # PTR(EFI_TIME)
|
||||
})
|
||||
def hook_SetWakeupTime(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"MemoryMapSize" : UINT, # UINTN
|
||||
"DescriptorSize" : UINT, # UINTN
|
||||
"DescriptorVersion" : UINT, # UINT32
|
||||
"VirtualMap" : POINTER # PTR(EFI_MEMORY_DESCRIPTOR)
|
||||
"MemoryMapSize": UINT, # UINTN
|
||||
"DescriptorSize": UINT, # UINTN
|
||||
"DescriptorVersion": UINT, # UINT32
|
||||
"VirtualMap": POINTER # PTR(EFI_MEMORY_DESCRIPTOR)
|
||||
})
|
||||
def hook_SetVirtualAddressMap(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"DebugDisposition" : UINT, # UINTN
|
||||
"Address" : POINTER # OUT PTR(PTR(VOID))
|
||||
"DebugDisposition": UINT, # UINTN
|
||||
"Address": POINTER # OUT PTR(PTR(VOID))
|
||||
})
|
||||
def hook_ConvertPointer(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"VariableName" : WSTRING, # PTR(CHAR16)
|
||||
"VendorGuid" : GUID, # PTR(EFI_GUID)
|
||||
"Attributes" : POINTER, # OUT PTR(UINT32)
|
||||
"DataSize" : POINTER, # IN OUT PTR(UINTN)
|
||||
"Data" : POINTER # OUT PTR(VOID)
|
||||
"VariableName": WSTRING, # PTR(CHAR16)
|
||||
"VendorGuid": GUID, # PTR(EFI_GUID)
|
||||
"Attributes": POINTER, # OUT PTR(UINT32)
|
||||
"DataSize": POINTER, # IN OUT PTR(UINTN)
|
||||
"Data": POINTER # OUT PTR(VOID)
|
||||
})
|
||||
def hook_GetVariable(ql: Qiling, address: int, params):
|
||||
name = params['VariableName']
|
||||
@@ -113,9 +113,9 @@ def hook_GetVariable(ql: Qiling, address: int, params):
|
||||
return EFI_NOT_FOUND
|
||||
|
||||
@dxeapi(params={
|
||||
"VariableNameSize" : POINTER, # IN OUT PTR(UINTN)
|
||||
"VariableName" : POINTER, # IN OUT PTR(CHAR16)
|
||||
"VendorGuid" : GUID # IN OUT PTR(EFI_GUID)
|
||||
"VariableNameSize": POINTER, # IN OUT PTR(UINTN)
|
||||
"VariableName": POINTER, # IN OUT PTR(CHAR16)
|
||||
"VendorGuid": GUID # IN OUT PTR(EFI_GUID)
|
||||
})
|
||||
def hook_GetNextVariableName(ql: Qiling, address: int, params):
|
||||
var_name_size = params["VariableNameSize"]
|
||||
@@ -153,11 +153,11 @@ def hook_GetNextVariableName(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"VariableName" : WSTRING, # PTR(CHAR16)
|
||||
"VendorGuid" : GUID, # PTR(EFI_GUID)
|
||||
"Attributes" : UINT, # UINT32
|
||||
"DataSize" : UINT, # UINTN
|
||||
"Data" : POINTER # PTR(VOID)
|
||||
"VariableName": WSTRING, # PTR(CHAR16)
|
||||
"VendorGuid": GUID, # PTR(EFI_GUID)
|
||||
"Attributes": UINT, # UINT32
|
||||
"DataSize": UINT, # UINTN
|
||||
"Data": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SetVariable(ql: Qiling, address: int, params):
|
||||
ql.env[params['VariableName']] = bytes(ql.mem.read(params['Data'], params['DataSize']))
|
||||
@@ -176,10 +176,10 @@ def hook_GetNextHighMonotonicCount(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"ResetType" : INT, # EFI_RESET_TYPE
|
||||
"ResetStatus" : INT, # EFI_STATUS
|
||||
"DataSize" : UINT, # UINTN
|
||||
"ResetData" : POINTER # PTR(VOID)
|
||||
"ResetType": INT, # EFI_RESET_TYPE
|
||||
"ResetStatus": INT, # EFI_STATUS
|
||||
"DataSize": UINT, # UINTN
|
||||
"ResetData": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_ResetSystem(ql: Qiling, address: int, params):
|
||||
ql.emu_stop()
|
||||
@@ -187,27 +187,27 @@ def hook_ResetSystem(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"CapsuleHeaderArray": POINTER, # PTR(PTR(EFI_CAPSULE_HEADER))
|
||||
"CapsuleCount" : UINT, # UINTN
|
||||
"ScatterGatherList" : ULONGLONG # EFI_PHYSICAL_ADDRESS
|
||||
"CapsuleHeaderArray": POINTER, # PTR(PTR(EFI_CAPSULE_HEADER))
|
||||
"CapsuleCount": UINT, # UINTN
|
||||
"ScatterGatherList": ULONGLONG # EFI_PHYSICAL_ADDRESS
|
||||
})
|
||||
def hook_UpdateCapsule(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"CapsuleHeaderArray": POINTER, # PTR(PTR(EFI_CAPSULE_HEADER))
|
||||
"CapsuleCount" : UINT, # UINTN
|
||||
"MaximumCapsuleSize": POINTER, # OUT PTR(UINT64)
|
||||
"ResetType" : POINTER # OUT PTR(EFI_RESET_TYPE)
|
||||
"CapsuleHeaderArray": POINTER, # PTR(PTR(EFI_CAPSULE_HEADER))
|
||||
"CapsuleCount": UINT, # UINTN
|
||||
"MaximumCapsuleSize": POINTER, # OUT PTR(UINT64)
|
||||
"ResetType": POINTER # OUT PTR(EFI_RESET_TYPE)
|
||||
})
|
||||
def hook_QueryCapsuleCapabilities(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params={
|
||||
"Attributes" : UINT, # UINT32
|
||||
"MaximumVariableStorageSize" : POINTER, # OUT PTR(UINT64)
|
||||
"RemainingVariableStorageSize" : POINTER, # OUT PTR(UINT64)
|
||||
"MaximumVariableSize" : POINTER # OUT PTR(UINT64)
|
||||
"Attributes": UINT, # UINT32
|
||||
"MaximumVariableStorageSize": POINTER, # OUT PTR(UINT64)
|
||||
"RemainingVariableStorageSize": POINTER, # OUT PTR(UINT64)
|
||||
"MaximumVariableSize": POINTER # OUT PTR(UINT64)
|
||||
})
|
||||
def hook_QueryVariableInfo(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
@@ -216,21 +216,21 @@ def initialize(ql: Qiling, gRT: int):
|
||||
descriptor = {
|
||||
'struct' : EFI_RUNTIME_SERVICES,
|
||||
'fields' : (
|
||||
('Hdr', None),
|
||||
('GetTime', hook_GetTime),
|
||||
('SetTime', hook_SetTime),
|
||||
('GetWakeupTime', hook_GetWakeupTime),
|
||||
('SetWakeupTime', hook_SetWakeupTime),
|
||||
('SetVirtualAddressMap', hook_SetVirtualAddressMap),
|
||||
('ConvertPointer', hook_ConvertPointer),
|
||||
('GetVariable', hook_GetVariable),
|
||||
('GetNextVariableName', hook_GetNextVariableName),
|
||||
('SetVariable', hook_SetVariable),
|
||||
('GetNextHighMonotonicCount', hook_GetNextHighMonotonicCount),
|
||||
('ResetSystem', hook_ResetSystem),
|
||||
('UpdateCapsule', hook_UpdateCapsule),
|
||||
('QueryCapsuleCapabilities', hook_QueryCapsuleCapabilities),
|
||||
('QueryVariableInfo', hook_QueryVariableInfo)
|
||||
('Hdr', None),
|
||||
('GetTime', hook_GetTime),
|
||||
('SetTime', hook_SetTime),
|
||||
('GetWakeupTime', hook_GetWakeupTime),
|
||||
('SetWakeupTime', hook_SetWakeupTime),
|
||||
('SetVirtualAddressMap', hook_SetVirtualAddressMap),
|
||||
('ConvertPointer', hook_ConvertPointer),
|
||||
('GetVariable', hook_GetVariable),
|
||||
('GetNextVariableName', hook_GetNextVariableName),
|
||||
('SetVariable', hook_SetVariable),
|
||||
('GetNextHighMonotonicCount', hook_GetNextHighMonotonicCount),
|
||||
('ResetSystem', hook_ResetSystem),
|
||||
('UpdateCapsule', hook_UpdateCapsule),
|
||||
('QueryCapsuleCapabilities', hook_QueryCapsuleCapabilities),
|
||||
('QueryVariableInfo', hook_QueryVariableInfo)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+46
-46
@@ -18,46 +18,46 @@ class SaveStateArea:
|
||||
#
|
||||
# see: Intel SDM vol. 3 chapter 30.4.1.1
|
||||
offsets = {
|
||||
EFI_SMM_SAVE_STATE_REGISTER.GDTBASE : 0x7E8C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.IDTBASE : 0x7E94,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.LDTBASE : 0x7E9C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.GDTBASE: 0x7E8C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.IDTBASE: 0x7E94,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.LDTBASE: 0x7E9C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.GDTLIMIT: 0x7DD0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.IDTLIMIT: 0x7DD8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.LDTLIMIT: 0x7DD4,
|
||||
# EFI_SMM_SAVE_STATE_REGISTER.LDTINFO : ?,
|
||||
# EFI_SMM_SAVE_STATE_REGISTER.LDTINFO: ?,
|
||||
|
||||
EFI_SMM_SAVE_STATE_REGISTER.ES : 0x7FA8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CS : 0x7FAC,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.SS : 0x7FB0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DS : 0x7FB4,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.FS : 0x7FB8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.GS : 0x7FBC,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.ES: 0x7FA8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CS: 0x7FAC,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.SS: 0x7FB0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DS: 0x7FB4,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.FS: 0x7FB8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.GS: 0x7FBC,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.LDTR_SEL: 0x7FC0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.TR_SEL : 0x7FC4,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DR7 : 0x7FC8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DR6 : 0x7FD0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R8 : 0x7F54,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R9 : 0x7F4C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R10 : 0x7F44,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R11 : 0x7F3C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R12 : 0x7F34,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R13 : 0x7F2C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R14 : 0x7F24,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R15 : 0x7F1C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RAX : 0x7F5C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RBX : 0x7F74,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RCX : 0x7F64,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RDX : 0x7F6C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RSP : 0x7F7C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RBP : 0x7F84,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RSI : 0x7F8C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RDI : 0x7F94,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RIP : 0x7FD8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.TR_SEL: 0x7FC4,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DR7: 0x7FC8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.DR6: 0x7FD0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R8: 0x7F54,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R9: 0x7F4C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R10: 0x7F44,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R11: 0x7F3C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R12: 0x7F34,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R13: 0x7F2C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R14: 0x7F24,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.R15: 0x7F1C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RAX: 0x7F5C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RBX: 0x7F74,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RCX: 0x7F64,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RDX: 0x7F6C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RSP: 0x7F7C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RBP: 0x7F84,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RSI: 0x7F8C,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RDI: 0x7F94,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RIP: 0x7FD8,
|
||||
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RFLAGS : 0x7FE8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR0 : 0x7FF8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR3 : 0x7FF0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR4 : 0x7E40
|
||||
EFI_SMM_SAVE_STATE_REGISTER.RFLAGS: 0x7FE8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR0: 0x7FF8,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR3: 0x7FF0,
|
||||
EFI_SMM_SAVE_STATE_REGISTER.CR4: 0x7E40
|
||||
}
|
||||
|
||||
def __init__(self, ql: Qiling):
|
||||
@@ -88,14 +88,14 @@ class SaveStateArea:
|
||||
|
||||
class SmmEnv:
|
||||
SSA_REG_MAP = {
|
||||
UC_X86_REG_ES : (4, EFI_SMM_SAVE_STATE_REGISTER.ES),
|
||||
UC_X86_REG_CS : (4, EFI_SMM_SAVE_STATE_REGISTER.CS),
|
||||
UC_X86_REG_SS : (4, EFI_SMM_SAVE_STATE_REGISTER.SS),
|
||||
UC_X86_REG_DS : (4, EFI_SMM_SAVE_STATE_REGISTER.DS),
|
||||
UC_X86_REG_FS : (4, EFI_SMM_SAVE_STATE_REGISTER.FS),
|
||||
UC_X86_REG_GS : (4, EFI_SMM_SAVE_STATE_REGISTER.GS),
|
||||
UC_X86_REG_R8 : (8, EFI_SMM_SAVE_STATE_REGISTER.R8),
|
||||
UC_X86_REG_R9 : (8, EFI_SMM_SAVE_STATE_REGISTER.R9),
|
||||
UC_X86_REG_ES : (4, EFI_SMM_SAVE_STATE_REGISTER.ES),
|
||||
UC_X86_REG_CS : (4, EFI_SMM_SAVE_STATE_REGISTER.CS),
|
||||
UC_X86_REG_SS : (4, EFI_SMM_SAVE_STATE_REGISTER.SS),
|
||||
UC_X86_REG_DS : (4, EFI_SMM_SAVE_STATE_REGISTER.DS),
|
||||
UC_X86_REG_FS : (4, EFI_SMM_SAVE_STATE_REGISTER.FS),
|
||||
UC_X86_REG_GS : (4, EFI_SMM_SAVE_STATE_REGISTER.GS),
|
||||
UC_X86_REG_R8 : (8, EFI_SMM_SAVE_STATE_REGISTER.R8),
|
||||
UC_X86_REG_R9 : (8, EFI_SMM_SAVE_STATE_REGISTER.R9),
|
||||
UC_X86_REG_R10 : (8, EFI_SMM_SAVE_STATE_REGISTER.R10),
|
||||
UC_X86_REG_R11 : (8, EFI_SMM_SAVE_STATE_REGISTER.R11),
|
||||
UC_X86_REG_R12 : (8, EFI_SMM_SAVE_STATE_REGISTER.R12),
|
||||
@@ -213,10 +213,10 @@ class SmmEnv:
|
||||
|
||||
self.enter()
|
||||
|
||||
DispatchHandle = args['DispatchHandle']
|
||||
Context = heap.alloc(EFI_SMM_SW_REGISTER_CONTEXT.sizeof())
|
||||
CommBuffer = heap.alloc(EFI_SMM_SW_CONTEXT.sizeof())
|
||||
CommBufferSize = heap.alloc(ql.arch.pointersize)
|
||||
DispatchHandle = args['DispatchHandle']
|
||||
Context = heap.alloc(EFI_SMM_SW_REGISTER_CONTEXT.sizeof())
|
||||
CommBuffer = heap.alloc(EFI_SMM_SW_CONTEXT.sizeof())
|
||||
CommBufferSize = heap.alloc(ql.arch.pointersize)
|
||||
|
||||
# setup Context
|
||||
args['RegisterContext'].saveTo(ql, Context)
|
||||
|
||||
+98
-98
@@ -33,14 +33,14 @@ class EFI_MM_IO_ACCESS(STRUCT):
|
||||
EFI_SMM_CPU_IO2_PROTOCOL = STRUCT
|
||||
|
||||
_fields_ = [
|
||||
('Read', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_CPU_IO2_PROTOCOL), EFI_MM_IO_WIDTH, UINT64, UINTN, PTR(VOID))),
|
||||
('Write', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_CPU_IO2_PROTOCOL), EFI_MM_IO_WIDTH, UINT64, UINTN, PTR(VOID))),
|
||||
('Read', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_CPU_IO2_PROTOCOL), EFI_MM_IO_WIDTH, UINT64, UINTN, PTR(VOID))),
|
||||
('Write', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_CPU_IO2_PROTOCOL), EFI_MM_IO_WIDTH, UINT64, UINTN, PTR(VOID))),
|
||||
]
|
||||
|
||||
class EFI_SMM_CPU_IO2_PROTOCOL(STRUCT):
|
||||
_fields_ = [
|
||||
('Mem', EFI_MM_IO_ACCESS),
|
||||
('Io', EFI_MM_IO_ACCESS)
|
||||
('Mem', EFI_MM_IO_ACCESS),
|
||||
('Io', EFI_MM_IO_ACCESS)
|
||||
]
|
||||
|
||||
class EFI_SMM_SYSTEM_TABLE2(STRUCT):
|
||||
@@ -48,45 +48,45 @@ class EFI_SMM_SYSTEM_TABLE2(STRUCT):
|
||||
_pack_ = 8
|
||||
|
||||
_fields_ = [
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('SmmFirmwareVendor', PTR(CHAR16)),
|
||||
('SmmFirmwareRevision', UINT32),
|
||||
('SmmInstallConfigurationTable', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_SYSTEM_TABLE2), PTR(EFI_GUID), PTR(VOID), UINTN)),
|
||||
('SmmIo', EFI_SMM_CPU_IO2_PROTOCOL),
|
||||
('SmmAllocatePool', FUNCPTR(EFI_STATUS, EFI_MEMORY_TYPE, UINTN, PTR(PTR(VOID)))),
|
||||
('SmmFreePool', FUNCPTR(EFI_STATUS, PTR(VOID))),
|
||||
('SmmAllocatePages', FUNCPTR(EFI_STATUS, EFI_ALLOCATE_TYPE, EFI_MEMORY_TYPE, UINTN, PTR(EFI_PHYSICAL_ADDRESS))),
|
||||
('SmmFreePages', FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINTN)),
|
||||
('SmmStartupThisAp', FUNCPTR(EFI_STATUS, FUNCPTR(VOID, PTR(VOID)), UINTN, PTR(VOID))),
|
||||
('CurrentlyExecutingCpu', UINTN),
|
||||
('NumberOfCpus', UINTN),
|
||||
('CpuSaveStateSize', PTR(UINTN)),
|
||||
('CpuSaveState', PTR(PTR(VOID))),
|
||||
('NumberOfTableEntries', UINTN),
|
||||
('SmmConfigurationTable', PTR(EFI_CONFIGURATION_TABLE)),
|
||||
('SmmInstallProtocolInterface', FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE), PTR(EFI_GUID), EFI_INTERFACE_TYPE, PTR(VOID))),
|
||||
('SmmUninstallProtocolInterface', FUNCPTR(EFI_STATUS, PTR(VOID), PTR(EFI_GUID), PTR(VOID))),
|
||||
('SmmHandleProtocol', FUNCPTR(EFI_STATUS, PTR(VOID), PTR(EFI_GUID), PTR(PTR(VOID)))),
|
||||
('SmmRegisterProtocolNotify', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), EFI_MM_NOTIFY_FN, PTR(PTR(VOID)))),
|
||||
('SmmLocateHandle', FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(EFI_HANDLE))),
|
||||
('SmmLocateProtocol', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(PTR(VOID)))),
|
||||
('SmiManage', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(VOID), PTR(UINTN))),
|
||||
('SmiHandlerRegister', FUNCPTR(EFI_STATUS, EFI_MM_HANDLER_ENTRY_POINT, PTR(EFI_GUID), PTR(EFI_HANDLE))),
|
||||
('SmiHandlerUnRegister', FUNCPTR(EFI_STATUS, EFI_HANDLE)),
|
||||
('Hdr', EFI_TABLE_HEADER),
|
||||
('SmmFirmwareVendor', PTR(CHAR16)),
|
||||
('SmmFirmwareRevision', UINT32),
|
||||
('SmmInstallConfigurationTable', FUNCPTR(EFI_STATUS, PTR(EFI_SMM_SYSTEM_TABLE2), PTR(EFI_GUID), PTR(VOID), UINTN)),
|
||||
('SmmIo', EFI_SMM_CPU_IO2_PROTOCOL),
|
||||
('SmmAllocatePool', FUNCPTR(EFI_STATUS, EFI_MEMORY_TYPE, UINTN, PTR(PTR(VOID)))),
|
||||
('SmmFreePool', FUNCPTR(EFI_STATUS, PTR(VOID))),
|
||||
('SmmAllocatePages', FUNCPTR(EFI_STATUS, EFI_ALLOCATE_TYPE, EFI_MEMORY_TYPE, UINTN, PTR(EFI_PHYSICAL_ADDRESS))),
|
||||
('SmmFreePages', FUNCPTR(EFI_STATUS, EFI_PHYSICAL_ADDRESS, UINTN)),
|
||||
('SmmStartupThisAp', FUNCPTR(EFI_STATUS, FUNCPTR(VOID, PTR(VOID)), UINTN, PTR(VOID))),
|
||||
('CurrentlyExecutingCpu', UINTN),
|
||||
('NumberOfCpus', UINTN),
|
||||
('CpuSaveStateSize', PTR(UINTN)),
|
||||
('CpuSaveState', PTR(PTR(VOID))),
|
||||
('NumberOfTableEntries', UINTN),
|
||||
('SmmConfigurationTable', PTR(EFI_CONFIGURATION_TABLE)),
|
||||
('SmmInstallProtocolInterface', FUNCPTR(EFI_STATUS, PTR(EFI_HANDLE), PTR(EFI_GUID), EFI_INTERFACE_TYPE, PTR(VOID))),
|
||||
('SmmUninstallProtocolInterface', FUNCPTR(EFI_STATUS, PTR(VOID), PTR(EFI_GUID), PTR(VOID))),
|
||||
('SmmHandleProtocol', FUNCPTR(EFI_STATUS, PTR(VOID), PTR(EFI_GUID), PTR(PTR(VOID)))),
|
||||
('SmmRegisterProtocolNotify', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), EFI_MM_NOTIFY_FN, PTR(PTR(VOID)))),
|
||||
('SmmLocateHandle', FUNCPTR(EFI_STATUS, EFI_LOCATE_SEARCH_TYPE, PTR(EFI_GUID), PTR(VOID), PTR(UINTN), PTR(EFI_HANDLE))),
|
||||
('SmmLocateProtocol', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(PTR(VOID)))),
|
||||
('SmiManage', FUNCPTR(EFI_STATUS, PTR(EFI_GUID), PTR(VOID), PTR(VOID), PTR(UINTN))),
|
||||
('SmiHandlerRegister', FUNCPTR(EFI_STATUS, EFI_MM_HANDLER_ENTRY_POINT, PTR(EFI_GUID), PTR(EFI_HANDLE))),
|
||||
('SmiHandlerUnRegister', FUNCPTR(EFI_STATUS, EFI_HANDLE)),
|
||||
]
|
||||
|
||||
@dxeapi(params = {
|
||||
"Guid" : GUID, # PTR(EFI_GUID)
|
||||
"Table" : POINTER # PTR(VOID)
|
||||
"Guid": GUID, # PTR(EFI_GUID)
|
||||
"Table": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SmmInstallConfigurationTable(ql: Qiling, address: int, params):
|
||||
return common.InstallConfigurationTable(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"type" : INT, # EFI_ALLOCATE_TYPE
|
||||
"MemoryType": INT, # EFI_MEMORY_TYPE
|
||||
"Pages" : ULONGLONG, # UINTN
|
||||
"Memory" : POINTER # PTR(EFI_PHYSICAL_ADDRESS)
|
||||
"type": INT, # EFI_ALLOCATE_TYPE
|
||||
"MemoryType": INT, # EFI_MEMORY_TYPE
|
||||
"Pages": ULONGLONG, # UINTN
|
||||
"Memory": POINTER # PTR(EFI_PHYSICAL_ADDRESS)
|
||||
})
|
||||
def hook_SmmAllocatePages(ql: Qiling, address: int, params):
|
||||
alloc_size = params["Pages"] * PAGE_SIZE
|
||||
@@ -108,8 +108,8 @@ def hook_SmmAllocatePages(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"Memory" : ULONGLONG, # EFI_PHYSICAL_ADDRESS
|
||||
"Pages" : ULONGLONG # UINTN
|
||||
"Memory": ULONGLONG, # EFI_PHYSICAL_ADDRESS
|
||||
"Pages": ULONGLONG # UINTN
|
||||
})
|
||||
def hook_SmmFreePages(ql: Qiling, address: int, params):
|
||||
address = params["Memory"]
|
||||
@@ -119,9 +119,9 @@ def hook_SmmFreePages(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if ret else EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"PoolType" : INT, # EFI_MEMORY_TYPE
|
||||
"Size" : INT, # UINTN
|
||||
"Buffer" : POINTER # PTR(PTR(VOID))
|
||||
"PoolType": INT, # EFI_MEMORY_TYPE
|
||||
"Size": INT, # UINTN
|
||||
"Buffer": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_SmmAllocatePool(ql: Qiling, address: int, params):
|
||||
# TODO: allocate memory acording to "PoolType"
|
||||
@@ -131,7 +131,7 @@ def hook_SmmAllocatePool(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if address else EFI_OUT_OF_RESOURCES
|
||||
|
||||
@dxeapi(params = {
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
"Buffer": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SmmFreePool(ql: Qiling, address: int, params):
|
||||
address = params["Buffer"]
|
||||
@@ -140,50 +140,50 @@ def hook_SmmFreePool(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS if ret else EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"Procedure" : POINTER,
|
||||
"CpuNumber" : INT,
|
||||
"ProcArguments" : POINTER
|
||||
"Procedure": POINTER,
|
||||
"CpuNumber": INT,
|
||||
"ProcArguments": POINTER
|
||||
})
|
||||
def hook_SmmStartupThisAp(ql: Qiling, address: int, params):
|
||||
return EFI_INVALID_PARAMETER
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # PTR(EFI_HANDLE)
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"InterfaceType" : ULONGLONG, # EFI_INTERFACE_TYPE
|
||||
"Interface" : POINTER, # PTR(VOID)
|
||||
"Handle": POINTER, # PTR(EFI_HANDLE)
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"InterfaceType": ULONGLONG, # EFI_INTERFACE_TYPE
|
||||
"Interface": POINTER, # PTR(VOID)
|
||||
})
|
||||
def hook_SmmInstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
return common.InstallProtocolInterface(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Interface" : POINTER # PTR(VOID)
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Interface": POINTER # PTR(VOID)
|
||||
})
|
||||
def hook_SmmUninstallProtocolInterface(ql: Qiling, address: int, params):
|
||||
return common.UninstallProtocolInterface(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handle" : POINTER, # EFI_HANDLE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Interface" : POINTER # PTR(PTR(VOID))
|
||||
"Handle": POINTER, # EFI_HANDLE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Interface": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_SmmHandleProtocol(ql: Qiling, address: int, params):
|
||||
return common.HandleProtocol(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Function" : POINTER, # EFI_MM_NOTIFY_FN
|
||||
"Registration" : POINTER # PTR(PTR(VOID))
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Function": POINTER, # EFI_MM_NOTIFY_FN
|
||||
"Registration": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_SmmRegisterProtocolNotify(ql: Qiling, address: int, params):
|
||||
event_id = len(ql.loader.events)
|
||||
event_dic = {
|
||||
"NotifyFunction": params["Function"],
|
||||
"CallbackArgs" : None,
|
||||
"Guid" : params["Protocol"],
|
||||
"Set" : False
|
||||
"CallbackArgs": None,
|
||||
"Guid": params["Protocol"],
|
||||
"Set": False
|
||||
}
|
||||
|
||||
ql.loader.events[event_id] = event_dic
|
||||
@@ -192,35 +192,35 @@ def hook_SmmRegisterProtocolNotify(ql: Qiling, address: int, params):
|
||||
return EFI_SUCCESS
|
||||
|
||||
@dxeapi(params = {
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"SearchKey" : POINTER, # PTR(VOID)
|
||||
"BufferSize": POINTER, # PTR(UINTN)
|
||||
"Buffer" : POINTER # PTR(EFI_HANDLE)
|
||||
"SearchType": INT, # EFI_LOCATE_SEARCH_TYPE
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"SearchKey": POINTER, # PTR(VOID)
|
||||
"BufferSize": POINTER, # PTR(UINTN)
|
||||
"Buffer": POINTER # PTR(EFI_HANDLE)
|
||||
})
|
||||
def hook_SmmLocateHandle(ql: Qiling, address: int, params):
|
||||
return common.LocateHandle(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"Protocol" : GUID, # PTR(EFI_GUID)
|
||||
"Registration" : POINTER, # PTR(VOID)
|
||||
"Interface" : POINTER # PTR(PTR(VOID))
|
||||
"Protocol": GUID, # PTR(EFI_GUID)
|
||||
"Registration": POINTER, # PTR(VOID)
|
||||
"Interface": POINTER # PTR(PTR(VOID))
|
||||
})
|
||||
def hook_SmmLocateProtocol(ql: Qiling, address: int, params):
|
||||
return common.LocateProtocol(ql.loader.smm_context, params)
|
||||
|
||||
@dxeapi(params = {
|
||||
"HandlerType" : GUID,
|
||||
"Context" : POINTER,
|
||||
"CommBuffer" : POINTER,
|
||||
"HandlerType": GUID,
|
||||
"Context": POINTER,
|
||||
"CommBuffer": POINTER,
|
||||
"CommBufferSize": POINTER
|
||||
})
|
||||
def hook_SmiManage(ql: Qiling, address: int, params):
|
||||
return EFI_NOT_FOUND
|
||||
|
||||
@dxeapi(params = {
|
||||
"Handler" : POINTER,
|
||||
"HandlerType" : GUID,
|
||||
"Handler": POINTER,
|
||||
"HandlerType": GUID,
|
||||
"DispatchHandle": POINTER
|
||||
})
|
||||
def hook_SmiHandlerRegister(ql: Qiling, address: int, params):
|
||||
@@ -243,31 +243,31 @@ def initialize(ql: Qiling, context, gSmst: int):
|
||||
descriptor = {
|
||||
'struct' : EFI_SMM_SYSTEM_TABLE2,
|
||||
'fields' : (
|
||||
('Hdr', None),
|
||||
('SmmFirmwareVendor', None),
|
||||
('SmmFirmwareRevision', None),
|
||||
('SmmInstallConfigurationTable', hook_SmmInstallConfigurationTable),
|
||||
('SmmIo', None),
|
||||
('SmmAllocatePool', hook_SmmAllocatePool),
|
||||
('SmmFreePool', hook_SmmFreePool),
|
||||
('SmmAllocatePages', hook_SmmAllocatePages),
|
||||
('SmmFreePages', hook_SmmFreePages),
|
||||
('SmmStartupThisAp', hook_SmmStartupThisAp),
|
||||
('CurrentlyExecutingCpu', None),
|
||||
('NumberOfCpus', None),
|
||||
('CpuSaveStateSize', None),
|
||||
('CpuSaveState', None),
|
||||
('NumberOfTableEntries', 0),
|
||||
('SmmConfigurationTable', cfg),
|
||||
('SmmInstallProtocolInterface', hook_SmmInstallProtocolInterface),
|
||||
('SmmUninstallProtocolInterface', hook_SmmUninstallProtocolInterface),
|
||||
('SmmHandleProtocol', hook_SmmHandleProtocol),
|
||||
('SmmRegisterProtocolNotify', hook_SmmRegisterProtocolNotify),
|
||||
('SmmLocateHandle', hook_SmmLocateHandle),
|
||||
('SmmLocateProtocol', hook_SmmLocateProtocol),
|
||||
('SmiManage', hook_SmiManage),
|
||||
('SmiHandlerRegister', hook_SmiHandlerRegister),
|
||||
('SmiHandlerUnRegister', hook_SmiHandlerUnRegister),
|
||||
('Hdr', None),
|
||||
('SmmFirmwareVendor', None),
|
||||
('SmmFirmwareRevision', None),
|
||||
('SmmInstallConfigurationTable', hook_SmmInstallConfigurationTable),
|
||||
('SmmIo', None),
|
||||
('SmmAllocatePool', hook_SmmAllocatePool),
|
||||
('SmmFreePool', hook_SmmFreePool),
|
||||
('SmmAllocatePages', hook_SmmAllocatePages),
|
||||
('SmmFreePages', hook_SmmFreePages),
|
||||
('SmmStartupThisAp', hook_SmmStartupThisAp),
|
||||
('CurrentlyExecutingCpu', None),
|
||||
('NumberOfCpus', None),
|
||||
('CpuSaveStateSize', None),
|
||||
('CpuSaveState', None),
|
||||
('NumberOfTableEntries', 0),
|
||||
('SmmConfigurationTable', cfg),
|
||||
('SmmInstallProtocolInterface', hook_SmmInstallProtocolInterface),
|
||||
('SmmUninstallProtocolInterface', hook_SmmUninstallProtocolInterface),
|
||||
('SmmHandleProtocol', hook_SmmHandleProtocol),
|
||||
('SmmRegisterProtocolNotify', hook_SmmRegisterProtocolNotify),
|
||||
('SmmLocateHandle', hook_SmmLocateHandle),
|
||||
('SmmLocateProtocol', hook_SmmLocateProtocol),
|
||||
('SmiManage', hook_SmiManage),
|
||||
('SmiHandlerRegister', hook_SmiHandlerRegister),
|
||||
('SmiHandlerUnRegister', hook_SmiHandlerUnRegister),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Cross Platform and Multi Architecture Advanced Binary Emulation Framework
|
||||
#
|
||||
|
||||
@@ -19,19 +19,19 @@ from qiling.os.uefi.UefiSpec import EFI_SYSTEM_TABLE, EFI_BOOT_SERVICES, EFI_RUN
|
||||
# | NumberOfTableEntries |
|
||||
# | ConfigurationTable* -> (4) |
|
||||
# +-----------------------------+
|
||||
# (1) +-- EFI_RUNTIME_SERVICES -----+
|
||||
# (1) +-- EFI_RUNTIME_SERVICES -----+
|
||||
# | |
|
||||
# | ... |
|
||||
# +-----------------------------+
|
||||
# (2) +-- EFI_BOOT_SERVICES --------+
|
||||
# (2) +-- EFI_BOOT_SERVICES --------+
|
||||
# | |
|
||||
# | ... |
|
||||
# +-----------------------------+
|
||||
# (3) +-- EFI_DXE_SERVICES ---------+
|
||||
# (3) +-- EFI_DXE_SERVICES ---------+
|
||||
# | |
|
||||
# | ... |
|
||||
# +-----------------------------+
|
||||
# (4) +-- EFI_CONFIGURATION_TABLE --+ of HOB_LIST
|
||||
# (4) +-- EFI_CONFIGURATION_TABLE --+ of HOB_LIST
|
||||
# | VendorGuid |
|
||||
# | VendorTable* -> (5) |
|
||||
# +-----------------------------+
|
||||
@@ -44,7 +44,7 @@ from qiling.os.uefi.UefiSpec import EFI_SYSTEM_TABLE, EFI_BOOT_SERVICES, EFI_RUN
|
||||
|
||||
# dynamically allocated (context.conf_table_data_ptr):
|
||||
#
|
||||
# (5) +-- VOID* --------------------+
|
||||
# (5) +-- VOID* --------------------+
|
||||
# | ... |
|
||||
# +-----------------------------+
|
||||
|
||||
|
||||
Reference in New Issue
Block a user