John Reiser
5d15e57294
De-compression for 32-bit shared libraries on i686, ARM
...
https://github.com/upx/upx/issues/609
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2023-03-23 16:29:25 -07:00
John Reiser
06fae05910
32-bit ARM Android shlib: DT_INIT_ARRAY without DT_INIT
...
De-compressor needs to catch up.
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: stub/src/i386-linux.elf-so_main.c
2023-03-22 10:44:17 -07:00
John Reiser
1320e3efdb
PackLinuxElf32::canPackOSABI() isolates canPack() from OSABI weirdness
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2023-03-16 08:30:06 -07:00
John Reiser
b74c4e4ac1
Picky, picky static analyzer
...
https://github.com/upx/upx/actions/runs/4422867763/jobs/7755057541
modified: p_lx_elf.cpp
2023-03-15 09:05:02 -07:00
John Reiser
35333403ef
Zero ElfXX_Ehdr.e_sh* info when removing ElfXX_Shdr
...
The aim is less confusion by static linkers: the _Shdr are gone!
https://github.com/upx/upx/issues/659
modified: p_lx_elf.cpp
2023-03-15 08:44:59 -07:00
John Reiser
f8934c09ff
F*ck MSVC
...
warning C4245: 'return': conversion from 'int' to 'unsigned int', signed/unsigned mismatch
return ~0; // in function declared as returning 'unsigned'. The bits are the same!
modified: p_lx_elf.cpp
2023-03-09 12:00:56 -08:00
John Reiser
7a09c88e30
CI convention sucks
...
renamed: MAX_ELF_HDR.cpp -> MAX_ELF_HDR.h
modified: p_lx_elf.cpp
2023-03-09 11:44:22 -08:00
John Reiser
17526d1132
Make it easier to change MAX_ELF_HDR consistently
...
https://github.com/upx/upx/issues/655
new file: MAX_ELF_HDR.cpp
new file: stub/src/MAX_ELF_HDR.S
new file: stub/src/MAX_ELF_HDR.c
modified: p_lx_elf.cpp
modified: stub/arm.v4a-linux.elf-fold.h
modified: stub/arm64-linux.elf-fold.h
modified: stub/src/amd64-linux.elf-fold.S
modified: stub/src/amd64-linux.elf-main.c
modified: stub/src/amd64-linux.elf-so_main.c
modified: stub/src/arm.v4a-linux.elf-fold.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/arm64-linux.elf-fold.S
modified: stub/src/arm64-linux.elf-so_fold.S
modified: stub/src/i386-bsd.elf-fold.S
modified: stub/src/i386-bsd.elf-main.c
modified: stub/src/i386-linux.elf-fold.S
modified: stub/src/i386-linux.elf-main.c
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/i386-linux.elf.interp-fold.S
modified: stub/src/i386-linux.elf.interp-main.c
modified: stub/src/i386-linux.elf.shell-fold.S
modified: stub/src/i386-linux.elf.shell-main.c
modified: stub/src/i386-openbsd.elf-fold.S
modified: stub/src/i386-openbsd.elf-main.c
modified: stub/src/mipsel.r3000-linux.elf-fold.S
modified: ../.github/travis_testsuite_1-expected_sha256sums.sh
2023-03-09 10:06:13 -08:00
John Reiser
ff7939c1c0
invert_pt_dynamic, sort_DTxx_offsets, elf_find_table_size
...
https://github.com/upx/upx/issues/655
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2023-03-09 09:24:35 -08:00
John Reiser
96c196b1be
Final ph.u_len and ph.c_len reflect multiple compressed extents
...
https://github.com/upx/upx/issues/655
modified: ../.github/travis_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
2023-03-09 09:06:06 -08: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
Markus F.X.J. Oberhumer
b8d9c2b755
all: assorted updates and cleanups
2023-02-05 17:20:32 +01:00
John Reiser
e86d9179aa
Sync testsuite
...
modified: .github/travis_testsuite_1-expected_sha256sums.sh
modified: src/p_lx_elf.cpp
2023-01-09 10:51:47 -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
John Reiser
64aa7540e2
Sync copyright year 2023
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
modified: p_unix.h
2023-01-02 08:28:41 -08:00
Markus F.X.J. Oberhumer
dd1d5a92d2
all: welcome 2023
2023-01-01 19:49:30 +01:00
John Reiser
619aeb54ff
Pesky "upx -t" mode
...
https://github.com/upx/upx/issues/599
modified: p_lx_elf.cpp
2022-12-30 10:29:25 -08:00
John Reiser
e56b748435
WIP fixing "upx -t" of shared library
...
modified: p_lx_elf.cpp
2022-12-23 11:23:41 -08:00
John Reiser
fefce0d5c4
Cleanup "PT_LOAD gap recovery" during upx -d
...
https://github.com/upx/upx/issues/635
modified: p_lx_elf.cpp
2022-12-21 06:53:37 -08:00
John Reiser
1bed77e4d3
'sizeof' returns size_t, which on i386 is not as wide as off_t
...
https://github.com/upx/upx/issues/629
https://github.com/upx/upx/issues/635
modified: p_lx_elf.cpp
2022-12-20 07:21:02 -08:00
John Reiser
f2a68023fa
MSVC error C4146: unary minus operator applied to unsigned type, result still unsigned
...
modified: p_lx_elf.cpp
2022-12-19 16:14:48 -08:00
John Reiser
8ccffc40e3
A real typo that caused an error in "upx -d" de-compressing
...
modified: p_lx_elf.cpp
modified: ../.github/travis_testsuite_1-expected_sha256sums.sh
2022-12-19 15:45:27 -08:00
John Reiser
dd8c1d0441
clang alignment
...
modified: p_lx_elf.cpp
2022-12-19 14:31:26 -08:00
John Reiser
f9f28ff176
More work on "upx -d" de-compression
...
https://github.com/upx/upx/issues/629
https://github.com/upx/upx/issues/635
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
2022-12-19 13:49:43 -08:00
Markus F.X.J. Oberhumer
c23c7a9379
all: minor updates
2022-12-15 16:20:22 +01:00
Markus F.X.J. Oberhumer
9e75fdda66
src: pacify a -Wcast-align warning
2022-12-12 20:07:27 +01:00
John Reiser
4cdf77e16f
Stupid MSVC 14.2, 14.3; obtuse clang 14.0.5 (and MemBuffer vs alignment)
...
MSVC: cannot say "if (0)" to get "check symtax+semantics, but do not emit code"
clang+MemBuffer: must fight too much to get pointer to wider-than-char
modified: src/p_lx_elf.cpp
2022-12-11 14:41:38 -08:00
John Reiser
d89813e911
Implement de-compress of --android-shlib
...
64-bit (arm64, aarch64) only for now. NYI: 32-bit (armv7).
(Also: implied catch-up with all changes by Markus in the meantime.)
https://github.com/upx/upx/issues/599
modified: src/p_lx_elf.cpp
modified: src/p_lx_elf.h
2022-12-11 13:46:44 -08:00
John Reiser
779b648c5f
invert_pt_dynamic: fix thinko; PackLinuxElf64help1 insist on ELF
...
https://github.com/upx/upx/issues/631
modified: src/p_lx_elf.cpp
2022-11-23 19:49:28 -08:00
Markus F.X.J. Oberhumer
16de3e78a5
src: try to fix canUnpack() confusion - see packer.h
2022-11-10 06:00:53 +01:00
John Reiser
2a136c1c1d
End users wish to avoid "double packing".
...
https://github.com/upx/upx/issues/622
modified: src/p_lx_elf.cpp
2022-11-09 15:39:16 -08:00
John Reiser
c8a3acbba8
Static executable with 4 PT_LOAD has only ELF headers in first PT_LOAD
...
https://github.com/upx/upx/issues/615
2022-11-02 10:03:25 -07:00
John Reiser
2354b01bad
Adapt to libbfd: "no Shdrs" requires 0==.e_shentsize and 0==.e_shnum
...
modified: p_lx_elf.cpp
2022-10-24 12:56:49 +02:00
John Reiser
d3ad6d25d8
PackLinuxElf64::asl_pack2_Shdrs() for better fit in logical flow
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2022-10-24 12:56:49 +02:00
John Reiser
2e29f9fa5f
pack2() fixes for --android-shlib
...
WIP for https://github.com/upx/upx/issues/599
modified: p_lx_elf.cpp
2022-10-24 12:56:49 +02:00
John Reiser
5d9f71bb13
asl_pack1_Shdrs()
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2022-10-24 12:56:49 +02:00
John Reiser
82ed25bb44
Major fix 64-bit un_shlib_1() and unpack(), but not --android-shlib
...
Also canUnpack() is really a 'bool' which sets overlay_offset
when 'true'; confusing!
https://github.com/upx/upx/issues/599 (partial)
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.h
2022-10-24 12:56:49 +02:00
John Reiser
48ad5513ff
un_shlib_1() allows test mode ("-t") which has (nullptr == fo)
...
modified: p_lx_elf.cpp
2022-10-07 12:52:21 -07:00
Markus F.X.J. Oberhumer
0f42579e68
src: fix djgpp and musl builds
2022-10-02 20:00:30 +02:00
Markus F.X.J. Oberhumer
b4cb9f8b2f
src: silence some bogus GitHub CodeQL warnings; add MemBuffer "+" overload
2022-09-17 07:53:14 +02:00
Markus F.X.J. Oberhumer
c75d7a685d
src: major cleanups, introduce new eXtended Span class
...
- initial minimally invasive eXtended Span implementation
- rename ptr_diff to ptr_diff_bytes
- move some files to util subdir
- lots of cleanups
- start using the new checked pointers - this needs some real-world testing
2022-09-16 13:26:13 +02:00
Markus F.X.J. Oberhumer
d001a63bce
Welcome 2022.
2022-09-04 04:24:39 +02:00
John Reiser
acad3c3000
DT_INIT_ARRAY noes not pertain to DT_* for symbol table info
...
https://github.com/upx/upx/issues/586
modified: p_lx_elf.cpp
2022-07-02 20:52:18 -07:00
John Reiser
c1311c78a3
Extra space to force "git commit" to force rebuild for tagging Issue
...
https://github.com/upx/upx/issues/577
modified: p_lx_elf.cpp
2022-05-30 15:19:18 -07:00
John Reiser
717150b7f3
Stupid MSVC: bad C4706: assignment within conditional expression
...
- for (unsigned j=0; (k = dt_names[j]); ++j) {
+ for (unsigned j=0; ((k = dt_names[j]), k); ++j) {
The complaint was:
p_lx_elf.cpp(5710) : warning C4706: assignment within conditional expression
which is INCORRECT, as shown in the change which is 100% equivalent.
The assignment occurs BEFORE the conditional expression.
modified: p_lx_elf.cpp
2022-05-30 15:09:34 -07:00
John Reiser
a68c62d938
More placate compilers
...
https://github.com/upx/upx/issues/577
modified: p_lx_elf.cpp
2022-05-30 15:02:53 -07:00
John Reiser
c11f8a569a
Placate 'clang' -Wcast-align
...
https://github.com/upx/upx/issues/577
modified: p_lx_elf.cpp
2022-05-30 14:55:39 -07:00
John Reiser
03436d2415
Bug in handling DT_GNU_HASH table.
...
Fix includes a more-general and stronger heuristic to find the end of
GNU_HASH table when there is no ElfXX_Shdr for it. 64-bit only for now.
(This is needed to help prevent SIGSEGV when processing tampered .exe.)
https://github.com/upx/upx/issues/577
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2022-05-30 14:24:21 -07:00
John Reiser
78c555b4a6
Handle old-style compressed main programs when de-compressing
...
modified: p_lx_elf.cpp
2022-03-22 19:20:09 -07:00
John Reiser
e7ca5c54ff
Fix --brute for p_lx_elf.cpp, which compresses multiple pieces
...
Force all pieces to use the same de-compressor.
(Future: allow each PT_LOAD to choose its own.)
Has minor wobbles due to page alignment, and size of de-compressor.
64-bit only for now.
https://github.com/upx/upx/issues/570
https://github.com/upx/upx/issues/297
modified: p_lx_elf.cpp
modified: p_unix.cpp
modified: packer.cpp
modified: packer.h
2022-03-22 11:46:25 -07:00