John Reiser
8782778eb3
stub *-linux.elf-entry.S often must define label upx_mmap_and_fd
...
modified: p_lx_elf.cpp
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/i386-linux.elf-entry.S
2024-11-26 19:43:14 -08:00
John Reiser
c8515ae862
Unify PackLinuxElf64::pack2_shlib* with 32-bit
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-11-26 16:44:35 -08:00
John Reiser
76b0b4ce9c
Fix mips stub for ELF2 main program
...
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/mips.r3000-expand.S
modified: stub/src/upxfd_linux.c
2024-11-20 15:02:32 -08:00
John Reiser
83166e21a5
PackLinuxElf64::unpack forgot some get_te*
...
Also use is_LOAD where ever possible.
modified: p_lx_elf.cpp
modified: ../NEWS
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-11-20 07:46:24 -08:00
John Reiser
b4ea89f9d6
check-whitespace, clang-format
...
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: stub/src/i386-linux.elf-so_entry.S
2024-11-19 09:13:44 -08:00
John Reiser
7ef018fed0
Option --android-oid for Android < 10
...
modified: main.cpp
modified: options.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.h
2024-11-18 16:06:45 -08:00
John Reiser
886e325cbf
EXP_TAIL goes after de-compressors, and before UMF_LINUX
...
modified: p_lx_elf.cpp
modified: stub/src/i386-expand.S
2024-11-14 19:22:28 -08:00
John Reiser
a9dc43f7fb
PackLinuxElf32::generateElfHdr, PackLinuxElf64::buildLinuxLoader
...
modified: p_elf_enum.h
modified: p_lx_elf.cpp
2024-10-26 10:53:28 -07:00
John Reiser
0cc0e51d5d
PackLinuxElf64::canPack_Shdr
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-10-26 10:02:14 -07: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
d55fdf2205
ZIG_DIST_VERSION of 2024-09-17
...
also https://github.com/upx/upx/issues/847
modified: ../.github/workflows/ci.yml
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/i386-darwin.macho-entry.S
plus generated *.h *.map *.dump
2024-09-17 01:55:08 -07:00
John Reiser
7cb3f40dab
WIP: variable page size for xfind_pages(); debug arm32 Android shlib
...
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-fold.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/i386-linux.elf-main2.c
plus generated *.h *.dump *.map
2024-08-29 16:55:18 -07:00
John Reiser
65c362efce
MSVC lacks stpcpy()
...
modified: p_lx_elf.cpp
2024-08-26 18:59:55 -07:00
John Reiser
8065eebca3
--android-shlib for arm32 and i386
...
... including work-around if no memfd_create() on early Android 32-bit
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/upxfd_android.c
plus generated *.h *.dump *.map
2024-08-25 15:16:29 -07:00
John Reiser
94eebc3ee5
ELF2: arm32 shared libraries; runs on Android 14 under TermUX
...
NYI: complex DT_INIT (R_RELR, etc.)
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: stub/src/arm.v4a-expand.S
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/i386-linux.elf-main2.c
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
bff5049a98
developer documentation
...
modified: p_lx_elf.cpp
2024-08-25 15:16:29 -07:00
John Reiser
3d58035b41
i386 stub filters 0x49 and 0x46 really are different (but similar!)
...
modified: filter/filter_impl.cpp
modified: p_lx_elf.cpp
modified: stub/src/arch/i386/bxx.S
2024-08-25 15:16:29 -07:00
John Reiser
ea2a190bd1
ELF2 main programs pass src/testsuite and upx-testsuite-v2
...
Decompressing lzma required many adjustments.
Backwards compatibility probably is broken for
stub/amd64-win64.pe.h
stub/arm64-win64.pe.h
Also: shared libraries need memfd_create.
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/scripts/xstrip.py
modified: stub/src/amd64-expand.S
modified: stub/src/arch/amd64/lzma_d.S
modified: stub/src/arch/arm/v4a/lzma_d.S
modified: stub/src/arch/arm/v4t/macros.S
modified: stub/src/arch/arm64/v8/lzma_d.S
modified: stub/src/arch/powerpc/32/lzma_d.S
modified: stub/src/arch/powerpc/64le/lzma_d-common.S
modified: stub/src/arm.v4a-expand.S
modified: stub/src/arm.v4t-linux.shlib-init.S
modified: stub/src/arm64-expand.S
modified: stub/src/i386-expand.S
modified: stub/src/mips.r3000-expand.S
modified: stub/src/powerpc-expand.S
modified: stub/src/powerpc-linux.elf-entry.S
modified: stub/src/powerpc-linux.elf-fold.S
modified: stub/src/powerpc64-expand.S
modified: stub/src/powerpc64-linux.elf-entry.S
modified: stub/src/powerpc64-linux.elf-fold.S
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
cc87a2c867
ELF2 for mips 32-bit main programs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/src/include/linux.h
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/arch/mips/r3000/lzma_d.S
modified: stub/src/arch/mips/r3000/macros.ash
modified: stub/src/arm.v4a-linux.elf-fold.S
modified: stub/src/arm.v4a-linux.elf-main2.c
modified: stub/src/arm.v4a-linux.elf-so_fold.lds
modified: stub/src/arm.v5a-linux.elf-so_fold.lds
modified: stub/src/arm64-linux.elf-so_fold.lds
modified: stub/src/i386-expand.S
modified: stub/src/i386-linux.elf-entry.lds
modified: stub/src/i386-linux.elf-main2.c
modified: stub/src/i386-linux.elf-so_fold.lds
new file: stub/src/mips.r3000-expand.S
new file: stub/src/mips.r3000-linux.elf-entry.lds
modified: stub/src/mips.r3000-linux.elf-fold.S
modified: stub/src/mips.r3000-linux.elf-fold.lds
new file: stub/src/mips.r3000-linux.elf-main2.c
new file: stub/src/mipsel.r3000-expand.S
modified: stub/src/mipsel.r3000-linux.elf-entry.S
new file: stub/src/mipsel.r3000-linux.elf-entry.lds
modified: stub/src/mipsel.r3000-linux.elf-fold.S
modified: stub/src/mipsel.r3000-linux.elf-fold.lds
new file: stub/src/mipsel.r3000-linux.elf-main2.c
modified: stub/src/mipsel.r3000-linux.shlib-init.S
modified: stub/src/powerpc-linux.elf-fold.lds
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
88c94d1cc0
ELF2 for powerpc (32-bit) main programs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/arch/powerpc/32/macros.S
modified: stub/src/i386-linux.elf-main2.c
new file: stub/src/powerpc-expand.S
modified: stub/src/powerpc-linux.elf-entry.S
modified: stub/src/powerpc-linux.elf-fold.S
modified: stub/src/powerpc-linux.elf-fold.lds
new file: stub/src/powerpc-linux.elf-main2.c
modified: stub/src/powerpc64-linux.elf-fold.S
plus generated *.h *.map *.dump
interactive rebase in progress; onto ac82d473
Last commands done (17 commands done):
pick 1b9ddea5 ELF2 arm32-linux unmap_all_pages
pick 1f372e54 ELF2 for powerpc (32-bit) main programs
Next commands to do (10 remaining commands):
pick 5f5849a9 ELF2 stragglers from stub make
pick 2ba8b5da ELF2 for mips 32-bit main programs
You are currently rebasing branch 'jreiser-ELF2' on 'ac82d473'.
Changes to be committed:
modified: misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: src/p_lx_elf.cpp
modified: src/stub/Makefile
modified: src/stub/powerpc-linux.elf-entry.h
modified: src/stub/powerpc-linux.elf-fold.h
modified: src/stub/powerpc64-linux.elf-fold.h
modified: src/stub/powerpc64le-linux.elf-fold.h
modified: src/stub/src/arch/powerpc/32/macros.S
modified: src/stub/src/i386-linux.elf-main2.c
new file: src/stub/src/powerpc-expand.S
modified: src/stub/src/powerpc-linux.elf-entry.S
modified: src/stub/src/powerpc-linux.elf-fold.S
modified: src/stub/src/powerpc-linux.elf-fold.lds
new file: src/stub/src/powerpc-linux.elf-main2.c
modified: src/stub/src/powerpc64-linux.elf-fold.S
modified: src/stub/tmp/powerpc-linux.elf-entry.bin.dump
modified: src/stub/tmp/powerpc-linux.elf-fold.map
modified: src/stub/tmp/powerpc64-linux.elf-fold.map
modified: src/stub/tmp/powerpc64le-linux.elf-fold.map
2024-08-25 15:16:29 -07:00
John Reiser
66dc1d90d8
ELF2 for arm32
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/arm.v4a-linux.elf-entry.S
new file: stub/src/arm.v4a-linux.elf-entry.lds
modified: stub/src/arm.v4a-linux.elf-fold.S
modified: stub/src/arm.v4a-linux.elf-fold.lds
new file: stub/src/arm.v4a-linux.elf-main2.c
new file: stub/src/arm.v4a-linux.elf-so_entry.lds
new file: stub/src/arm.v5a-linux.elf-entry.lds
new file: stub/src/arm.v5a-linux.elf-fold.lds
new file: stub/src/arm.v5a-linux.elf-main2.c
new file: stub/src/arm.v5a-linux.elf-so_entry.lds
new file: stub/src/armeb.v4a-expand.S
new file: stub/src/armeb.v4a-linux.elf-entry.lds
modified: stub/src/armeb.v4a-linux.elf-fold.lds
new file: stub/src/armeb.v4a-linux.elf-main2.c
new file: stub/src/armeb.v4a-linux.elf-so_main2.c
modified: stub/src/i386-linux.elf-main2.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
f7cab0cf71
ELF2 for i386-linux main programs
...
OpenBSD and NetBSD main programs probably need work.
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/i386-linux.elf-entry.S
new file: stub/src/i386-linux.elf-entry.lds
modified: stub/src/i386-linux.elf-fold.S
modified: stub/src/i386-linux.elf-fold.lds
new file: stub/src/i386-linux.elf-main2.c
new file: stub/src/i386-linux.elf-so_entry.lds
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
e9930bb2bc
ELF2: Move section EXP_TAIL to catch case of no matching de-compressor
...
Also adjust blocksize for large gap (.p_align - .p_filesz)
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/src/amd64-expand.S
modified: stub/src/arm64-expand.S
modified: stub/src/powerpc64-expand.S
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
c8a0540fd2
ELF2: FIx powerpc64* lzma
...
also follow-ons for https://github.com/upx/upx/issues/834
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/arch/powerpc/64le/lzma_d-common.S
modified: stub/src/arch/powerpc/64le/lzma_d.S
modified: stub/src/arch/powerpc/64le/ppc_regs.h
modified: stub/src/powerpc64-expand.S
modified: stub/src/powerpc64-linux.elf-fold.S
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
146c105961
ELF2 for PowerPC64
...
(MacOS temporarily disabled)
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/arch/powerpc/64/macros.S
modified: stub/src/arch/powerpc/64le/bxx.S
modified: stub/src/arch/powerpc/64le/macros.S
modified: stub/src/arch/powerpc/64le/ppc_regs.h
new file: stub/src/dollar-dollar.sed
modified: stub/src/powerpc64-linux.elf-entry.S
modified: stub/src/powerpc64-linux.elf-fold.S
modified: stub/src/powerpc64-linux.elf-fold.lds
modified: stub/src/powerpc64le-linux.elf-entry.S
modified: stub/src/powerpc64le-linux.elf-fold.S
modified: stub/src/powerpc64le-linux.elf-fold.lds
modified: stub/src/powerpc64le-linux.kernel.vmlinux.S
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
6276a4a7c4
ELF2 for arm64 main programs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/arm64-linux.elf-entry.S
modified: stub/src/arm64-linux.elf-fold.S
modified: stub/src/arm64-linux.elf-fold.lds
new file: stub/src/arm64-linux.elf-main2.c
plus generated *.h *.dump *.map
2024-08-25 15:16:28 -07:00
John Reiser
743eb5cc26
whitespace
...
modified: p_lx_elf.cpp
2024-08-25 15:16:28 -07:00
John Reiser
c36977f0b1
ELF: amd64-linux main programs use 2-step de-compressor
...
The first $ARCH to move to 2-step de-compressor for ELF main programs.
De-compressor uses memfd_create to comply with strictest SELinux
settings (no PROT_WRITE on any PROT_EXEC page).
First step de-compressor always uses NRV2B to de-compress the second step,
and the second step can use a different de-compressor for each PT_LOAD.
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/amd64-linux.elf-fold.lds
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-fold.S
new file: stub/src/amd64-linux.elf-main2.c
modified: stub/amd64-linux.elf-entry.h
modified: stub/amd64-linux.elf-fold.h
modified: stub/tmp/amd64-linux.elf-entry.bin.dump
modified: stub/tmp/amd64-linux.elf-fold.map
2024-08-25 15:16:28 -07:00
John Reiser
08a38af553
Workaround bug in Alpine Linux
...
"empty" DT_GNU_HASH lacked hasharr[0] when n_bucket==1,
which upx correctly detected as malformed.
modified: p_lx_elf.cpp
2024-07-02 11:24:27 -07:00
Markus F.X.J. Oberhumer
16c8f6d160
src: portability updates
2024-07-07 14:50:27 +02:00
John Reiser
64a3de5a7a
FIX PT_GNU_HASH when "empty"
...
... such as a main program with no exported globals
https://github.com/upx/upx/issues/834
modified: p_lx_elf.cpp
2024-06-28 09:04:05 -07:00
John Reiser
de8de9c0f0
Option --unmap-all-pages completely avoids /proc/self/exe
...
https://github.com/upx/upx/issues/749
2024-06-18 10:18:32 -07:00
John Reiser
1b6c120864
64-bit phdrx[], PT_NOTE, PT_GNU_STACK
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-06-13 15:32:51 -07:00
John Reiser
99afc50ebf
PT_MIPS_ABIFLAGS, PT_MIPS_REGINFO
...
Also re-org of PT_HOTE and other non-PT_LOAD Elf32_Phdrs
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-06-13 09:58:20 -07:00
John Reiser
3286f7c5ba
De-compression of PT_MIPS_ABIFLAGS
...
modified: p_lx_elf.cpp
2024-06-11 20:03:44 -07:00
John Reiser
72ccca9faf
PT_MIPS_ABIFLAGS, compression side only, 32-bit only
...
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-06-11 15:02:13 -07:00
John Reiser
937ae4c5e0
Avoid crash on outrageous fuzzed input
...
https://github.com/upx/upx/issues/828
modified: p_lx_elf.cpp
2024-06-04 15:43:11 -07:00
Markus F.X.J. Oberhumer
3495d1affd
all: minor cleanups
2024-05-28 10:26:39 +02:00
John Reiser
57763ca1e2
ELF stubs: go_lang different placement of DT_STRTAB, DT_SYMTAB
...
https://github.com/upx/upx/issues/825
modified: p_lx_elf.cpp
2024-05-21 17:14:21 -07:00
Markus F.X.J. Oberhumer
40b7e24fcc
src: introduce upx::max and friends; updates for clang-19 git snapshot
2024-05-15 14:06:05 +02:00
RainRat
62265a1bc9
fix typos
2024-05-07 01:41:41 -07:00
John Reiser
4c32a8e3d4
Fix attempted recovery from corrupted b_info
...
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66271&q=label%3AProj-upx
modified: p_lx_elf.cpp
2024-05-04 10:35:39 -07:00
John Reiser
548227a55b
mb_dt_offsets.clear() prevents undef from corrupted input
...
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66344&q=label%3AProj-upx
modified: p_lx_elf.cpp
2024-05-04 09:56:34 -07:00
John Reiser
811f66de84
Check gnu_shift during unpack
...
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66273&q=label%3AProj-upx
modified: p_lx_elf.cpp
2024-05-04 09:05:48 -07:00
John Reiser
0e6cef99a0
Guard against empty PT_NOTE
...
https://github.com/upx/upx/issues/817
modified: p_lx_elf.cpp
2024-05-01 10:09:52 -07:00
John Reiser
80e22a7e38
Fix --preserve-build-id
...
https://github.com/upx/upx/issues/815
modified: p_lx_elf.cpp
2024-04-27 08:21:48 -07:00
John Reiser
3949af6d3c
Unpacking detects and defends against malicious ELF
2024-03-28 07:48:55 -07:00
Markus F.X.J. Oberhumer
839a78f2e0
Better fix for previous commit to avoid out-of-bounds pointer.
2024-02-27 11:20:29 +01:00
John Reiser
680ce0a7af
find_dt_ndx defends against overrun
...
https://github.com/upx/upx/issues/790
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66344&q=label%3AProj-upx
modified: p_lx_elf.cpp
2024-02-26 14:32:02 -08:00
John Reiser
25aa0e2e46
un_asl_dynsym() should skip when !dynstr
...
https://github.com/upx/upx/issues/785
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66302
modified: p_lx_elf.cpp
2024-02-08 19:32:03 -08:00