John Reiser
70f1ab8cb7
Nice message for ancient Linux lacking memfd_create
...
... or O_TMPFILE for recovery using /dev/shm
https://github.com/upx/upx/issues/889
modified: stub/src/upxfd_linux.c
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
plus generated .h .map .dump
2025-03-02 11:46:17 -08:00
John Reiser
1a6c1f0589
Fix unpackExtent() of non-compressible extent (PT_LOAD)
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/src/amd64-darwin.macho-main.c
modified: stub/src/amd64-darwin.macho-upxmain.c
modified: stub/src/amd64-linux.elf-main.c
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/amd64-linux.elf-so_entry.S
modified: stub/src/amd64-linux.elf-so_main.c
modified: stub/src/i386-bsd.elf-main.c
modified: stub/src/i386-darwin.macho-main.c
modified: stub/src/i386-darwin.macho-upxmain.c
modified: stub/src/i386-linux.elf-main.c
modified: stub/src/i386-linux.elf-main2.c
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/i386-linux.elf.interp-main.c
modified: stub/src/i386-linux.elf.shell-main.c
modified: stub/src/i386-openbsd.elf-main.c
modified: stub/src/powerpc-darwin.macho-main.c
modified: stub/src/powerpc-darwin.macho-upxmain.c
modified: stub/src/powerpc64-darwin.macho-main.c
plus generated *.h *.map *.dump
2024-12-30 16:49:31 -08:00
John Reiser
d4deb2a100
Psync: msync demands page-aligned first argument
...
modified: misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: src/stub/src/amd64-linux.elf-fold.S
modified: src/stub/src/amd64-linux.elf-main2.c
modified: src/stub/src/amd64-linux.elf-so_fold.S
modified: src/stub/src/amd64-linux.elf-so_main.c
modified: src/stub/src/arm.v4a-linux.elf-entry.S
modified: src/stub/src/arm.v4a-linux.elf-fold.S
modified: src/stub/src/arm.v4a-linux.elf-so_fold.S
modified: src/stub/src/arm64-linux.elf-fold.S
modified: src/stub/src/arm64-linux.elf-so_fold.S
modified: src/stub/src/i386-linux.elf-fold.S
modified: src/stub/src/i386-linux.elf-main2.c
modified: src/stub/src/i386-linux.elf-so_entry.S
modified: src/stub/src/i386-linux.elf-so_fold.S
modified: src/stub/src/i386-linux.elf-so_main.c
modified: src/stub/src/mipsel.r3000-linux.elf-fold.S
modified: src/stub/src/powerpc-linux.elf-fold.S
modified: src/stub/src/powerpc64-linux.elf-fold.S
plus stubs *.h *.dump *.map
2024-12-12 10:50:30 -08:00
John Reiser
27de5f42bb
Sync stubs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/amd64-linux.elf-entry.h
modified: stub/amd64-linux.elf-fold.h
modified: stub/amd64-linux.elf-so_entry.h
modified: stub/amd64-linux.elf-so_fold.h
modified: stub/arm.v4a-linux.elf-entry.h
modified: stub/arm.v4a-linux.elf-fold.h
modified: stub/arm.v4a-linux.elf-so_entry.h
modified: stub/arm.v5a-linux.elf-entry.h
modified: stub/arm.v5a-linux.elf-fold.h
modified: stub/arm.v5a-linux.elf-so_entry.h
modified: stub/arm64-linux.elf-entry.h
modified: stub/arm64-linux.elf-fold.h
modified: stub/arm64-linux.elf-so_fold.h
modified: stub/armeb.v4a-linux.elf-entry.h
modified: stub/armeb.v4a-linux.elf-fold.h
modified: stub/i386-linux.elf-entry.h
modified: stub/i386-linux.elf-fold.h
modified: stub/mips.r3000-linux.elf-entry.h
modified: stub/mips.r3000-linux.elf-fold.h
modified: stub/mipsel.r3000-linux.elf-entry.h
modified: stub/mipsel.r3000-linux.elf-fold.h
modified: stub/powerpc-linux.elf-fold.h
modified: stub/powerpc64-linux.elf-fold.h
modified: stub/powerpc64le-linux.elf-fold.h
also *.dump, *.map
2024-12-03 11:52:13 -08:00
John Reiser
3403b87cb7
More Control Flow Integrity (Intel)
...
More ENDBRxx for CALL *%RDX for 'getbit'.
amd64: LEA xxx(%rip),%reg and STRCON section,
instead of CALL; .asciz "..."; POP %reg
(Not for PE due to WINDOWS_BACK binary compatibility.)
i386 string constants still use call-.asciz-pop because no (%rip)
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/amd64-linux.elf-so_entry.S
modified: stub/src/amd64-linux.shlib-init.S
modified: stub/src/amd64-win64.pe.S
modified: stub/src/i386-linux.elf-entry.S
modified: stub/src/i386-linux.elf-so_entry.S
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-09-20 14:48:30 -07:00
John Reiser
65b06f6046
More LZMA inSize (srclen) defense
...
https://github.com/upx/upx/issues/717
modified: stub/src/amd64-darwin.dylib-entry.S fixed
modified: stub/src/amd64-darwin.macho-entry.S fixed
modified: stub/src/amd64-linux.elf-so_entry.S comment-only
modified: stub/src/i386-linux.elf-so_entry.S comment-only
modified: stub/amd64-darwin.dylib-entry.h
modified: stub/amd64-darwin.macho-entry.h
modified: stub/amd64-linux.elf-so_entry.h
modified: stub/tmp/amd64-darwin.dylib-entry.bin.dump
modified: stub/tmp/amd64-darwin.macho-entry.bin.dump
modified: stub/tmp/amd64-linux.elf-so_entry.bin.dump
Find+fix steps that were performed:
1. Find all 'add' instructions that compute "eof".
NRV run-time decompressors ignore srclen, so 'add' can be ignored for them.
$ cd upx-devel4/src/stub
$ grep -sr 'add.*eof' src | grep -v 'nrv2._d.*.S' | sort
src/amd64-darwin.dylib-entry.S: addq src,lsrc; push lsrc // &input_eof
src/amd64-darwin.macho-entry.S: addq src,lsrc; push lsrc // &input_eof
src/amd64-linux.elf-entry.S: addq src,lsrc; push lsrc // &input_eof
src/amd64-linux.elf-so_entry.S: addq src,lsrc; push lsrc // MATCH_05 &input_eof
src/amd64-linux.elf-so_main.c: void *mfd_addr = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0);
src/amd64-linux.shlib-init.S: addq src,lsrc; push lsrc // &input_eof
src/arch/amd64/lzma_d.S:// addq src,lsrc; push lsrc // &input_eof
src/i386-expand.S: add src,%ecx; push %ecx // MATCH_52 eof_src
src/i386-linux.elf-so_entry.S: add src,lsrc; push lsrc // MATCH_05 &input_eof
2. Case-by-case inspection
src/amd64-darwin.dylib-entry.S: addq src,lsrc; push lsrc // &input_eof
restoring 'subq' is added in this commit
src/amd64-darwin.macho-entry.S: addq src,lsrc; push lsrc // &input_eof
restoring 'subq' is added in this commit
src/amd64-linux.elf-entry.S: addq src,lsrc; push lsrc // &input_eof
a restoring 'subq' is already next
src/amd64-linux.elf-so_entry.S: addq src,lsrc; push lsrc // MATCH_05 &input_eof
lsrc is dead for inlined nrv2b
src/amd64-linux.elf-so_main.c: void *mfd_addr = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0);
.c code
src/amd64-linux.shlib-init.S: addq src,lsrc; push lsrc // &input_eof
restoring 'subq' is already next
src/arch/amd64/lzma_d.S:// addq src,lsrc; push lsrc // &input_eof
comment that explains preceding actions in ELFMAINX; a restoring 'subq' is already next
src/i386-expand.S: add src,%ecx; push %ecx // MATCH_52 eof_src
%ecx is dead
src/i386-linux.elf-so_entry.S: add src,lsrc; push lsrc // MATCH_05 &input_eof
lsrc is dead for inlined nrv2b
2023-10-12 10:41:13 -07:00
John Reiser
0515be4334
LZMA on AMD64 had bug in calling sequence, leading to random exit(127)
...
LzmaDecode randomly decided that the input had ended in the middle,
because of error in interface between ELFMAINX and the decoder.
Thanks to Kevin Gosse!
https://github.com/upx/upx/pull/716
https://github.com/MichalStrehovsky/PublishAotCompressed/issues/11
2023-10-06 14:14:32 -07:00
John Reiser
56bb7b53cb
Synch *.h stub headers and testcase checksums
...
Shared libraries for amd64, i386, arm64, and arm should be
compatible with SELinux: no complaints of execmod or execmem.
https://github.com/upx/upx/issues/609
https://github.com/upx/upx/issues/220
modified: ../.github/travis_testsuite_1-expected_sha256sums.sh
modified: stub/amd64-linux.elf-so_entry.h
modified: stub/amd64-linux.elf-so_fold.h
modified: stub/arm.v4a-linux.elf-so_entry.h
modified: stub/arm.v4a-linux.elf-so_fold.h
modified: stub/arm.v5a-linux.elf-entry.h
modified: stub/arm.v5a-linux.elf-fold.h
modified: stub/arm.v5a-linux.elf-so_entry.h
modified: stub/arm.v5a-linux.elf-so_fold.h
modified: stub/arm64-linux.elf-so_entry.h
modified: stub/arm64-linux.elf-so_fold.h
modified: stub/i386-linux.elf-so_entry.h
modified: stub/i386-linux.elf-so_fold.h
modified: stub/tmp/amd64-linux.elf-so_entry.bin.dump
modified: stub/tmp/amd64-linux.elf-so_fold.bin.dump
modified: stub/tmp/arm.v5a-linux.elf-entry.bin.dump
modified: stub/tmp/arm.v5a-linux.elf-fold.map
2023-04-30 15:12:29 -07:00
John Reiser
adb0ca8250
Many changes for ELF shared libraries on Linux and Android
...
Handling more than 2 PT_LOAD (and thus more than 1 executable PT_LOAD)
required extensive changes. But the bonus is the infrastructure
to support a different (de-)compression algorithm for each PT_LOAD.
https://github.com/upx/upx/issues/341 i386 .so decompression
https://github.com/upx/upx/issues/609 armv7 .so on Android
https://github.com/upx/upx/issues/625 amd64 .so execution
https://github.com/upx/upx/issues/654 armv7 .exe
Not yet: .so on MIPS, PowerPC, PowerPC64
2023-03-04 17:37:25 -08:00
John Reiser
26d8e9c4c5
amd64-linux revamp for compressing shared libraries
...
Major changes: p_lx_elf.cpp and stub/src/amd64-linux.elf-so*.
(Includes run-time infrastructure for multiple de-compressors.)
modified: linker.cpp
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
modified: p_unix.h
modified: stub/Makefile
modified: stub/src/amd64-darwin.dylib-entry.S
modified: stub/src/amd64-darwin.macho-entry.S
new file: stub/src/amd64-expand.S
modified: stub/src/amd64-linux.elf-entry.S
new file: stub/src/amd64-linux.elf-so_entry.S
new file: stub/src/amd64-linux.elf-so_fold.S
new file: stub/src/amd64-linux.elf-so_fold.lds
new file: stub/src/amd64-linux.elf-so_main.c
modified: stub/src/amd64-linux.shlib-init.S
modified: stub/src/amd64-win64.pep.S
modified: stub/src/arch/amd64/nrv2b_d.S
modified: stub/src/arch/amd64/nrv2d_d.S
modified: stub/src/arch/amd64/nrv2e_d.S
plus many generated stub/*.h and stub/tmp/*.bin.dump
2023-01-09 09:39:25 -08:00