From 593a69ce250efb7014288859d19754973fdba5f5 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Sun, 14 Jul 2019 13:08:56 -0700 Subject: [PATCH] PT_LOAD[0] with ElfXX.Ehdr only https://github.com/upx/upx/issues/283 modified: p_lx_elf.cpp --- src/p_lx_elf.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index f7de6f72..f1a7b78f 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -3842,8 +3842,15 @@ int PackLinuxElf32::pack2(OutputFile *fo, Filter &ft) if (ft.id < 0x40) { // FIXME: ?? ft.addvalue += asl_delta; } - x.offset += delta; - x.size -= delta; + if (delta == x.size) { // PT_LOAD[0] with ElfXX.Ehdr only + // QBE backend - http://c9x.me/compile/ + hdr_u_len = 0; // no fiddling necessary! + // &ft arg to packExtent will be zero becaue (k != nk_f) + } + else { + x.offset += delta; + x.size -= delta; + } } // compressWithFilters() always assumes a "loader", so would // throw NotCompressible for small .data Extents, which PowerPC @@ -3966,8 +3973,15 @@ int PackLinuxElf64::pack2(OutputFile *fo, Filter &ft) if (ft.id < 0x40) { // FIXME: ?? ft.addvalue += asl_delta; } - x.offset += delta; - x.size -= delta; + if (delta == x.size) { // PT_LOAD[0] with ElfXX.Ehdr only + // QBE backend - http://c9x.me/compile/ + hdr_u_len = 0; // no fiddling necessary! + // &ft arg to packExtent will be zero becaue (k != nk_f) + } + else { + x.offset += delta; + x.size -= delta; + } } // compressWithFilters() always assumes a "loader", so would // throw NotCompressible for small .data Extents, which PowerPC