From: Jan Janssen Date: Fri, 31 Mar 2023 11:13:00 +0000 (+0200) Subject: ukify: Strip symbol/string table for old stubs X-Git-Tag: v254-rc1~842 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7f72dca7620fd4cbd50b483d419f074b912595ec;p=thirdparty%2Fsystemd.git ukify: Strip symbol/string table for old stubs --- diff --git a/src/ukify/ukify.py b/src/ukify/ukify.py index b847f2ed872..b319f2dc913 100755 --- a/src/ukify/ukify.py +++ b/src/ukify/ukify.py @@ -450,6 +450,19 @@ class PeError(Exception): def pe_add_sections(uki: UKI, output: str): pe = pefile.PE(uki.executable, fast_load=True) + # Old stubs do not have the symbol/string table stripped, even though image files should not have one. + if symbol_table := pe.FILE_HEADER.PointerToSymbolTable: + symbol_table_size = 18 * pe.FILE_HEADER.NumberOfSymbols + if string_table_size := pe.get_dword_from_offset(symbol_table + symbol_table_size): + symbol_table_size += string_table_size + + # Let's be safe and only strip it if it's at the end of the file. + if symbol_table + symbol_table_size == len(pe.__data__): + pe.__data__ = pe.__data__[:symbol_table] + pe.FILE_HEADER.PointerToSymbolTable = 0 + pe.FILE_HEADER.NumberOfSymbols = 0 + pe.FILE_HEADER.IMAGE_FILE_LOCAL_SYMS_STRIPPED = True + # Old stubs might have been stripped, leading to unaligned raw data values, so let's fix them up here. for i, section in enumerate(pe.sections): oldp = section.PointerToRawData