tmpfile: Optional[IO] = None
measure: bool = False
output_mode: Optional[str] = None
+ virtual_size: Optional[int] = None
@classmethod
def create(cls, name, contents, **kwargs):
new_section.set_file_offset(offset)
new_section.Name = section.name.encode()
- new_section.Misc_VirtualSize = len(data)
+ if section.virtual_size is not None:
+ new_section.Misc_VirtualSize = section.virtual_size
+ else:
+ new_section.Misc_VirtualSize = len(data)
# Non-stripped stubs might still have an unaligned symbol table at the end, making their size
# unaligned, so we make sure to explicitly pad the pointer to new sections to an aligned offset.
new_section.PointerToRawData = round_up(len(pe.__data__), pe.OPTIONAL_HEADER.FileAlignment)
# UKI creation
if linux is not None:
- uki.add_section(Section.create('.linux', linux, measure=True))
+ try:
+ virtual_size = pefile.PE(linux, fast_load=True).OPTIONAL_HEADER.SizeOfImage
+ except pefile.PEFormatError:
+ print(f"{f} is not a valid PE file, not using SizeOfImage.")
+ virtual_size = None
+
+ uki.add_section(Section.create('.linux', linux, measure=True, virtual_size=virtual_size))
if sign_args_present:
unsigned = tempfile.NamedTemporaryFile(prefix='uki')