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
ed0665407a
More: prefer movzbl over movb fetch to register
...
Avoids hardware failure of writing 0x00 instead of the fetched byte.
1 cycle faster, 1 byte larger (but often recouped later when OR of 32-bits).
Avoid changing win*pe.S for now.
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/src/amd64-darwin.dylib-entry.S
modified: stub/src/amd64-darwin.macho-entry.S
modified: stub/src/amd64-expand.S
modified: stub/src/amd64-linux.shlib-init.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
modified: stub/src/arch/i386/nrv2b_d32-easy.S
modified: stub/src/i386-darwin.macho-entry.S
plus generated *.h *.map *.dump
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
5f6bdb0a8f
ELF2 for arm64 main programs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/Makefile
modified: stub/src/amd64-expand.S
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/arch/amd64/lzma_d.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
modified: stub/src/arch/arm64/v8/lzma_d.S
modified: stub/src/arch/arm64/v8/macros.S
modified: stub/src/arch/arm64/v8/nrv2b_d32.S
modified: stub/src/arch/arm64/v8/nrv2d_d32.S
modified: stub/src/arch/arm64/v8/nrv2e_d32.S
modified: stub/src/arm64-expand.S
modified: stub/src/arm64-linux.elf-entry.S
modified: stub/src/arm64-linux.elf-fold.S
plus generated *.h *.map *.dump
2024-08-25 15:16:28 -07:00
John Reiser
c924c32d54
ELF2: fix lzma on amd64-linux.elf-*
...
New -DWINDOWS_BACK so that amd64-win64.pe.h does not change.
This hides a real bug (unchecked), but would change anti-virus status.
modified: src/stub/src/amd64-expand.S
modified: src/stub/src/amd64-linux.elf-entry.S
modified: src/stub/src/amd64-linux.elf-fold.S
modified: src/stub/src/arch/amd64/lzma_d.S
modified: src/stub/Makefile
modified: misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
plus generated *.h, *.map, *.dump
2024-08-25 15:16:28 -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
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
John Reiser
926481dace
ELF layout for page holes when runtime PAGE_SIZE < .p_align
...
amd64 works
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-main.c
modified: Makefile
modified: stub/amd64-linux.elf-entry.h
modified: stub/amd64-linux.elf-fold.h
modified: stub/amd64-linux.shlib-init.h
modified: stub/arm64-linux.elf-fold.h
modified: stub/powerpc64-linux.elf-fold.h
modified: stub/powerpc64le-linux.elf-fold.h
modified: stub/src/amd64-linux.shlib-init.S
modified: stub/tmp/amd64-linux.elf-entry.bin.dump
modified: stub/tmp/amd64-linux.elf-fold.map
modified: stub/tmp/amd64-linux.shlib-init.bin.dump
modified: stub/tmp/arm64-linux.elf-fold.map
modified: stub/tmp/powerpc64-linux.elf-fold.map
modified: stub/tmp/powerpc64le-linux.elf-fold.map
2020-05-09 08:05:05 -07:00
John Reiser
b122f8e9d0
Optimize /proc/self/exe. Sync stubs.
...
See also commit 78b1da5c00 earlier today
for https://github.com/upx/upx/issues/225 .
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-fold.S
also *.h, *.map, *.bin.dump
2018-10-09 20:11:34 -07:00
John Reiser
bf3ddeb1eb
Rebuild stubs.
...
modified: amd64-darwin.dylib-entry.h
modified: amd64-darwin.macho-entry.h
modified: amd64-darwin.macho-fold.h
modified: amd64-linux.elf-fold.h
modified: amd64-linux.kernel.vmlinux.h
modified: amd64-linux.shlib-init.h
modified: amd64-win64.pep.h
modified: i386-bsd.elf-entry.h
modified: i386-bsd.elf.execve-entry.h
modified: i386-darwin.dylib-entry.h
modified: i386-darwin.macho-entry.h
modified: i386-dos32.djgpp2.h
modified: i386-dos32.tmt.h
modified: i386-dos32.watcom.le.h
modified: i386-linux.elf-entry.h
modified: i386-linux.elf.execve-entry.h
modified: i386-linux.elf.interp-entry.h
modified: i386-linux.kernel.vmlinux.h
modified: i386-linux.kernel.vmlinuz.h
modified: i386-linux.shlib-init.h
modified: i386-netbsd.elf-entry.h
modified: i386-win32.pe.h
modified: tmp/amd64-darwin.dylib-entry.bin.dump
modified: tmp/amd64-darwin.macho-entry.bin.dump
modified: tmp/amd64-linux.shlib-init.bin.dump
modified: tmp/amd64-win64.pep.bin.dump
2017-01-29 14:01:57 +01:00
John Reiser
ba9118aa58
Bug in unfilter on x86* when region ends in 32-bit displacement.
...
https://github.com/upx/upx/issues/43
modified: stub/src/arch/amd64/bxx.S
modified: stub/src/arch/i386/macros.S
plus all the stubs that use them
2017-01-29 14:01:56 +01:00
John Reiser
21924bf022
move stub escape hatch for shared library to end of .text [glibc-2.13.90]
2011-06-02 07:18:50 -07:00
John Reiser
147acf4b57
Compress shared library for amd64-linux.
2009-10-17 21:55:03 -07:00