uefi.py
ofrak.core.uefi
Uefi (FilesystemRoot, Pe)
dataclass
Filesystem extracted from a UEFI binary.
UefiUnpacker (Unpacker)
Unpack a UEFI binary. This current method cannot repack after modification because UEFITool cannot support it.
unpack(self, resource, config=None)
async
Unpack the given resource.
Users should not call this method directly; rather, they should run Resource.run or Resource.unpack.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
resource |
Resource |
The resource that is being unpacked |
required |
config |
Optional config for unpacking. If an implementation provides a default, this default will always be used when config would otherwise be None. Note that a copy of the default config will be passed, so the default config values cannot be modified persistently by a component run. |
None |
Source code in ofrak/core/uefi.py
async def unpack(self, resource: Resource, config=None):
ROM_FILE = "uefi.rom"
with tempfile.TemporaryDirectory() as temp_flush_dir:
# uefiextract always outputs to the CWD, so we must run this command from the temp dir to not leave behind artifacts
os.chdir(temp_flush_dir)
await resource.flush_data_to_disk(ROM_FILE)
cmd = [
"uefiextract",
ROM_FILE,
]
proc = await asyncio.create_subprocess_exec(
*cmd,
)
returncode = await proc.wait()
if proc.returncode:
raise CalledProcessError(returncode=returncode, cmd=cmd)
uefi_view = await resource.view_as(Uefi)
await uefi_view.initialize_from_disk(os.path.join(temp_flush_dir, f"{ROM_FILE}.dump"))