mirror of
https://github.com/systemd/systemd.git
synced 2025-02-08 09:57:41 +03:00
ukify: Fix section offset calculation
objcopy seems to expect that the offset passed to --change-section-vma is absolute instead of relative to ImageBase. If this is not accounted for an invalid image is created that cannot be loaded: 0 .osrel 0000016b 0000000200016000 0000000200016000 00000400 2**2 … 6 .text 0000d242 0000000140001000 0000000140001000 00c6e800 2**4 This isn't an issue with gnu-efi based PE images, but natively created ones will have a non-zero ImageBase.
This commit is contained in:
parent
8d885b4477
commit
599c930e48
@ -73,12 +73,12 @@ def path_is_readable(s: str | None) -> pathlib.Path | None:
|
||||
return p
|
||||
|
||||
|
||||
def pe_executable_size(filename):
|
||||
def pe_next_section_offset(filename):
|
||||
import pefile
|
||||
|
||||
pe = pefile.PE(filename)
|
||||
section = pe.sections[-1]
|
||||
return section.VirtualAddress + section.Misc_VirtualSize
|
||||
return pe.OPTIONAL_HEADER.ImageBase + section.VirtualAddress + section.Misc_VirtualSize
|
||||
|
||||
|
||||
def round_up(x, blocksize=4096):
|
||||
@ -262,7 +262,7 @@ class UKI:
|
||||
offset: int | None = dataclasses.field(default=None, init=False)
|
||||
|
||||
def __post_init__(self):
|
||||
self.offset = round_up(pe_executable_size(self.executable))
|
||||
self.offset = round_up(pe_next_section_offset(self.executable))
|
||||
|
||||
def add_section(self, section):
|
||||
assert self.offset
|
||||
|
Loading…
x
Reference in New Issue
Block a user