IMAGE_SUBSYSTEM_EFI_APPLICATION

Beginning of support for compressing EFI files; lacks run-time decompressor.
https://github.com/upx/upx/issues/518
	modified:   p_armpe.cpp
	modified:   p_w32pe.cpp
	modified:   p_w64pep.cpp
	modified:   pefile.cpp
	modified:   pefile.h
This commit is contained in:
John Reiser 2021-09-06 08:38:51 -07:00 committed by Markus F.X.J. Oberhumer
parent c9f6a3583c
commit 02bd9cc403
5 changed files with 38 additions and 3 deletions

View File

@ -247,7 +247,7 @@ void PackArmPe::setOhHeaderSize(const pe_section_t *osection)
void PackArmPe::pack(OutputFile *fo)
{
super::pack0(fo, 1U << 9, 0x10000, true);
super::pack0(fo, (1u<<IMAGE_SUBSYSTEM_WINDOWS_CE_GUI), 0x10000, true);
}
/* vim:set ts=4 sw=4 et: */

View File

@ -283,7 +283,12 @@ void PackW32Pe::setOhHeaderSize(const pe_section_t *osection)
void PackW32Pe::pack(OutputFile *fo)
{
super::pack0(fo, 0x0c, 0x400000, false);
super::pack0(fo
, (1u<<IMAGE_SUBSYSTEM_WINDOWS_GUI)
| (1u<<IMAGE_SUBSYSTEM_WINDOWS_CUI)
| (1u<<IMAGE_SUBSYSTEM_EFI_APPLICATION) // no decompressor yet
, 0x400000
, false);
}
/* vim:set ts=4 sw=4 et: */

View File

@ -268,7 +268,11 @@ void PackW64Pep::defineSymbols(unsigned ncsection, unsigned upxsection,
void PackW64Pep::pack(OutputFile *fo)
{
super::pack0(fo, 0x0c, 0x0000000140000000ULL);
super::pack0(fo
, (1u<<IMAGE_SUBSYSTEM_WINDOWS_GUI)
| (1u<<IMAGE_SUBSYSTEM_WINDOWS_CUI)
| (1u<<IMAGE_SUBSYSTEM_EFI_APPLICATION) // no decompressor yet
, 0x0000000140000000ULL);
}
/* vim:set ts=4 sw=4 et: */

View File

@ -2148,6 +2148,16 @@ void PeFile::checkHeaderValues(unsigned subsystem, unsigned mask,
subsystem);
throwCantPack(buf);
}
if (mask & (
(1u<<IMAGE_SUBSYSTEM_EFI_APPLICATION)
|(1u<<IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER)
|(1u<<IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER)
|(1u<<IMAGE_SUBSYSTEM_EFI_ROM)
))
{
infoWarning("PE: subsystem %u (EFI) lacks a run-time decompressor",
subsystem);
}
//check CLR Runtime Header directory entry
if (IDSIZE(PEDIR_COMRT))
throwCantPack(".NET files are not yet supported");

View File

@ -282,6 +282,22 @@ protected:
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
};
enum {
IMAGE_SUBSYSTEM_UNKNOWN = 0,
IMAGE_SUBSYSTEM_NATIVE = 1,
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2, // Grapical
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3, // Character-mode
IMAGE_SUBSYSTEM_WINDOWS_OS2_CUI = 5,
IMAGE_SUBSYSTEM_WINDOWS_POSIX_CUI = 7,
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,
IMAGE_SUBSYSTEM_EFI_APPLICATION = 10,
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11,
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,
IMAGE_SUBSYSTEM_EFI_ROM = 13,
IMAGE_SUBSYSTEM_XBOX = 14,
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
};
// predefined resource types
enum {
RT_CURSOR = 1, RT_BITMAP, RT_ICON, RT_MENU, RT_DIALOG, RT_STRING,