all: misc cleanups

This commit is contained in:
Markus F.X.J. Oberhumer 2024-06-07 22:29:57 +02:00
parent 937ae4c5e0
commit 1aff5f5bb7
10 changed files with 87 additions and 70 deletions

View File

@ -17,8 +17,8 @@ env:
UPX_CMAKE_CONFIG_FLAGS: -Wdev --warn-uninitialized
UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 1
UPX_DEBUG_TEST_LIBC_QSORT: 1
# 2024-04-20
ZIG_DIST_VERSION: 0.12.0
# 2024-06-07
ZIG_DIST_VERSION: 0.13.0
jobs:
job-rebuild-and-verify-stubs:
@ -349,7 +349,9 @@ jobs:
- { name: arm64ec-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64ec' }
# { name: arm64x-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64x' }
- { name: i386-win32-vs2019, os: windows-2019, vsversion: 2019, vsarch: amd64_x86 }
- { name: i386-win32-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_x86 }
# TODO later: as of 2024-06-07 i386-win32-vs2022 stopped working: "upx_ucl_init() failed";
# examine why; flaky??
# { name: i386-win32-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_x86 }
steps:
- run: git config --global core.autocrlf false
- uses: actions/checkout@v4

View File

@ -256,12 +256,12 @@ build/$(UPX_XTARGET)/release: PHONY; $(call run_config_and_build,$@,Release)
build/$(UPX_XTARGET)/%: export CC := $(CC)
build/$(UPX_XTARGET)/%: export CXX := $(CXX)
# shortcuts
xtarget/all: xtarget/debug xtarget/release PHONY
xtarget/debug: build/$(UPX_XTARGET)/debug PHONY
xtarget/release: build/$(UPX_XTARGET)/release PHONY
xtarget/all+test: xtarget/debug+test xtarget/release+test PHONY
xtarget/all: xtarget/debug xtarget/release PHONY
xtarget/debug+test: build/$(UPX_XTARGET)/debug+test PHONY
xtarget/release+test: build/$(UPX_XTARGET)/release+test PHONY
xtarget/all+test: xtarget/debug+test xtarget/release+test PHONY
# set new default
.DEFAULT_GOAL := build/$(UPX_XTARGET)/release

View File

@ -14,11 +14,13 @@ RUN dpkg --add-architecture i386 \
# the following packages are not required for rebuilding the stubs, but
# they do make the image *much* more convenient and also allow building
# the full UPX binary inside the container via CMake:
7zip bfs bubblewrap busybox bzip2 bzip3 cabextract ccache chrpath cmake cpio dash diffstat \
elfutils execstack fd-find file fish fzf g++ gawk gdb gojq ht htop hyperfine jq ksh \
libzstd-dev lsb-release lz4 lzip lzop minify mksh moreutils musl neovim ninja-build \
7zip bfs btop bubblewrap busybox bzip2 bzip3 cabextract ccache chrpath cmake cpio \
dash diffstat direnv elfutils execstack fd-find file fish fzf \
g++ gawk gdb gojq ht htop hyperfine jq ksh \
libzstd-dev lsd lsb-release lz4 lzip lzop minify mksh moreutils musl neovim ninja-build \
p7zip parallel patch patchelf patchutils pax-utils proot \
python3 python3-pyasn1 python3-pycryptodome python3-pycurl python3-toml python3-yaml python3-zstd \
python3 python3-pyasn1 python3-pycryptodome python3-pycurl python3-tomli python3-tomli-w \
python3-yaml python3-zstd \
re2c ripgrep rsync screen strace universal-ctags unzip valgrind yash yq \
zip zlib1g-dev zoxide zsh zstd \
# extra packages for compiling with "gcc -m32" and "gcc -mx32":

View File

@ -14,6 +14,7 @@ ii binutils-common:amd64 2.42-4ubuntu2 amd64
ii binutils-x86-64-linux-gnu 2.42-4ubuntu2 amd64 GNU binary utilities, for x86-64-linux-gnu target
ii bsdextrautils 2.39.3-9ubuntu6 amd64 extra utilities from 4.4BSD-Lite
ii bsdutils 1:2.39.3-9ubuntu6 amd64 basic utilities from 4.4BSD-Lite
ii btop 1.3.0-1 amd64 Modern and colorful command line resource monitor that shows usage and stats
ii bubblewrap 0.9.0-1build1 amd64 utility for unprivileged chroot and namespace manipulation
ii busybox 1:1.36.1-6ubuntu3 amd64 Tiny utilities for small and embedded systems
ii bzip2 1.0.8-5.1 amd64 high-quality block-sorting file compressor - utilities
@ -36,6 +37,7 @@ ii debconf 1.5.86ubuntu1 all
ii debianutils 5.17build1 amd64 Miscellaneous utilities specific to Debian
ii diffstat 1.66-1build1 amd64 produces graph of changes introduced by a diff file
ii diffutils 1:3.10-1build1 amd64 File comparison utilities
ii direnv 2.32.1-2build1 amd64 Utility to set directory specific environment variables
ii dpkg 1.22.6ubuntu6 amd64 Debian package management system
ii e2fsprogs 1.47.0-2.4~exp1ubuntu4 amd64 ext2/ext3/ext4 file system utilities
ii elfutils 0.190-1.1build4 amd64 collection of utilities to handle ELF objects
@ -63,8 +65,8 @@ ii gcc-14-base:i386 14-20240412-0ubuntu1 i386
ii gcc-multilib 4:13.2.0-7ubuntu1 amd64 GNU C compiler (multilib files)
ii gcc-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C compiler for the amd64 architecture
ii gdb 15.0.50.20240403-0ubuntu1 amd64 GNU Debugger
ii git 1:2.43.0-1ubuntu7 amd64 fast, scalable, distributed revision control system
ii git-man 1:2.43.0-1ubuntu7 all fast, scalable, distributed revision control system (manual pages)
ii git 1:2.43.0-1ubuntu7.1 amd64 fast, scalable, distributed revision control system
ii git-man 1:2.43.0-1ubuntu7.1 all fast, scalable, distributed revision control system (manual pages)
ii gojq 0.12.13-1 amd64 pure Go implementation of jq (program)
ii gpgv 2.4.4-2ubuntu17 amd64 GNU privacy guard - signature verification tool
ii grep 3.11-4build1 amd64 GNU grep, egrep and fgrep
@ -91,7 +93,7 @@ ii lib32stdc++6 14-20240412-0ubuntu1 amd64
ii lib32ubsan1 14-20240412-0ubuntu1 amd64 UBSan -- undefined behaviour sanitizer (32bit)
ii libacl1:amd64 2.3.2-1build1 amd64 access control list - shared library
ii libapt-pkg6.0t64:amd64 2.7.14build2 amd64 package management runtime library
ii libarchive13t64:amd64 3.7.2-2 amd64 Multi-format archive and compression library (shared library)
ii libarchive13t64:amd64 3.7.2-2ubuntu0.1 amd64 Multi-format archive and compression library (shared library)
ii libaria2-0:amd64 1.37.0+debian-1build3 amd64 C++ library interface to aria2
ii libasan8:amd64 14-20240412-0ubuntu1 amd64 AddressSanitizer -- a fast memory error detector
ii libasm1t64:amd64 0.190-1.1build4 amd64 library with a programmable assembler interface
@ -107,16 +109,16 @@ ii libbrotli1:amd64 1.1.0-2build2 amd64
ii libbsd0:amd64 0.12.1-1build1 amd64 utility functions from BSD systems - shared library
ii libbz2-1.0:amd64 1.0.8-5.1 amd64 high-quality block-sorting file compressor library - runtime
ii libbzip3-0:amd64 1.4.0-1 amd64 better, faster and stronger spiritual successor to bzip2 - runtime
ii libc-bin 2.39-0ubuntu8.1 amd64 GNU C Library: Binaries
ii libc-dev-bin 2.39-0ubuntu8.1 amd64 GNU C Library: Development binaries
ii libc6-dbg:amd64 2.39-0ubuntu8.1 amd64 GNU C Library: detached debugging symbols
ii libc6-dev-i386 2.39-0ubuntu8.1 amd64 GNU C Library: 32-bit development libraries for AMD64
ii libc6-dev-x32 2.39-0ubuntu8.1 amd64 GNU C Library: X32 ABI Development Libraries for AMD64
ii libc6-dev:amd64 2.39-0ubuntu8.1 amd64 GNU C Library: Development Libraries and Header Files
ii libc6-i386 2.39-0ubuntu8.1 amd64 GNU C Library: 32-bit shared libraries for AMD64
ii libc6-x32 2.39-0ubuntu8.1 amd64 GNU C Library: X32 ABI Shared libraries for AMD64
ii libc6:amd64 2.39-0ubuntu8.1 amd64 GNU C Library: Shared libraries
ii libc6:i386 2.39-0ubuntu8.1 i386 GNU C Library: Shared libraries
ii libc-bin 2.39-0ubuntu8.2 amd64 GNU C Library: Binaries
ii libc-dev-bin 2.39-0ubuntu8.2 amd64 GNU C Library: Development binaries
ii libc6-dbg:amd64 2.39-0ubuntu8.2 amd64 GNU C Library: detached debugging symbols
ii libc6-dev-i386 2.39-0ubuntu8.2 amd64 GNU C Library: 32-bit development libraries for AMD64
ii libc6-dev-x32 2.39-0ubuntu8.2 amd64 GNU C Library: X32 ABI Development Libraries for AMD64
ii libc6-dev:amd64 2.39-0ubuntu8.2 amd64 GNU C Library: Development Libraries and Header Files
ii libc6-i386 2.39-0ubuntu8.2 amd64 GNU C Library: 32-bit shared libraries for AMD64
ii libc6-x32 2.39-0ubuntu8.2 amd64 GNU C Library: X32 ABI Shared libraries for AMD64
ii libc6:amd64 2.39-0ubuntu8.2 amd64 GNU C Library: Shared libraries
ii libc6:i386 2.39-0ubuntu8.2 i386 GNU C Library: Shared libraries
ii libcap-ng0:amd64 0.8.4-2build2 amd64 alternate POSIX capabilities library
ii libcap2:amd64 1:2.66-5ubuntu2 amd64 POSIX 1003.1e capabilities (library)
ii libcares2:amd64 1.27.0-1.0ubuntu1 amd64 asynchronous name resolver
@ -144,6 +146,7 @@ ii libgcc-s1:i386 14-20240412-0ubuntu1 i386
ii libgcrypt20:amd64 1.10.3-2build1 amd64 LGPL Crypto library - runtime library
ii libgdbm-compat4t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (legacy support runtime version)
ii libgdbm6t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (runtime version)
ii libgit2-1.7:amd64 1.7.2+ds-1ubuntu3 amd64 low-level Git library
ii libglib2.0-0t64:amd64 2.80.0-6ubuntu3.1 amd64 GLib library of C routines
ii libgmp10:amd64 2:6.3.0+dfsg-2ubuntu6 amd64 Multiprecision arithmetic library
ii libgnutls30t64:amd64 3.8.3-1.1ubuntu3.1 amd64 GNU TLS library - main runtime library
@ -153,6 +156,7 @@ ii libgprofng0:amd64 2.42-4ubuntu2 amd64
ii libgssapi-krb5-2:amd64 1.20.1-6ubuntu2 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
ii libhiredis1.1.0:amd64 1.2.0-6ubuntu3 amd64 minimalistic C client library for Redis
ii libhogweed6t64:amd64 3.9.1-2.2build1 amd64 low level cryptographic library (public-key cryptos)
ii libhttp-parser2.9:amd64 2.9.4-6build1 amd64 parser for HTTP messages written in C
ii libhwasan0:amd64 14-20240412-0ubuntu1 amd64 AddressSanitizer -- a fast memory error detector
ii libicu74:amd64 74.2-1ubuntu3 amd64 International Components for Unicode
ii libidn2-0:amd64 2.3.7-2build1 amd64 Internationalized domain names (IDNA2008/TR46) library
@ -192,10 +196,10 @@ ii libnl-genl-3-200:amd64 3.7.0-0.3build1 amd64
ii libnpth0t64:amd64 1.6-3.1build1 amd64 replacement for GNU Pth using system threads
ii libonig5:amd64 6.9.9-1build1 amd64 regular expressions library
ii libp11-kit0:amd64 0.25.3-4ubuntu2 amd64 library for loading and coordinating access to PKCS#11 modules - runtime
ii libpam-modules-bin 1.5.3-5ubuntu5 amd64 Pluggable Authentication Modules for PAM - helper binaries
ii libpam-modules:amd64 1.5.3-5ubuntu5 amd64 Pluggable Authentication Modules for PAM
ii libpam-runtime 1.5.3-5ubuntu5 all Runtime support for the PAM library
ii libpam0g:amd64 1.5.3-5ubuntu5 amd64 Pluggable Authentication Modules library
ii libpam-modules-bin 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules for PAM - helper binaries
ii libpam-modules:amd64 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules for PAM
ii libpam-runtime 1.5.3-5ubuntu5.1 all Runtime support for the PAM library
ii libpam0g:amd64 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules library
ii libpcre2-32-0:amd64 10.42-4ubuntu2 amd64 New Perl Compatible Regular Expression Library - 32 bit runtime files
ii libpcre2-8-0:amd64 10.42-4ubuntu2 amd64 New Perl Compatible Regular Expression Library- 8 bit runtime files
ii libperl5.38t64:amd64 5.38.2-3.2build2 amd64 shared Perl library
@ -233,7 +237,7 @@ ii libssh2-1t64:amd64 1.11.0-4.1build2 amd64
ii libssl3t64:amd64 3.0.13-0ubuntu3.1 amd64 Secure Sockets Layer toolkit - shared libraries
ii libstdc++-13-dev:amd64 13.2.0-23ubuntu4 amd64 GNU Standard C++ Library v3 (development files)
ii libstdc++6:amd64 14-20240412-0ubuntu1 amd64 GNU Standard C++ Library v3
ii libsystemd0:amd64 255.4-1ubuntu8 amd64 systemd utility library
ii libsystemd0:amd64 255.4-1ubuntu8.1 amd64 systemd utility library
ii libtalloc2:amd64 2.4.2-1build2 amd64 hierarchical pool based memory allocator
ii libtasn1-6:amd64 4.19.0-3build1 amd64 Manage ASN.1 structures (runtime)
ii libtermkey1:amd64 0.22-1 amd64 library for processing keyboard input
@ -244,7 +248,7 @@ ii libtree-sitter0:amd64 0.20.8-2 amd64
ii libtsan2:amd64 14-20240412-0ubuntu1 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime)
ii libubsan1:amd64 14-20240412-0ubuntu1 amd64 UBSan -- undefined behaviour sanitizer (runtime)
ii libuchardet0:amd64 0.0.8-1build1 amd64 universal charset detection library - shared library
ii libudev1:amd64 255.4-1ubuntu8 amd64 libudev shared library
ii libudev1:amd64 255.4-1ubuntu8.1 amd64 libudev shared library
ii libunibilium4:amd64 2.1.0-3 amd64 simple, self-contained terminfo library
ii libunistring5:amd64 1.1-2build1 amd64 Unicode string library for C
ii libunwind8:amd64 1.6.2-3build1 amd64 library to determine the call-chain of a program - runtime
@ -273,10 +277,11 @@ ii libxxhash0:amd64 0.8.2-2build1 amd64
ii libyaml-0-2:amd64 0.2.5-1build1 amd64 Fast YAML 1.1 parser and emitter library
ii libzstd-dev:amd64 1.5.5+dfsg2-2build1 amd64 fast lossless compression algorithm -- development files
ii libzstd1:amd64 1.5.5+dfsg2-2build1 amd64 fast lossless compression algorithm
ii linux-libc-dev:amd64 6.8.0-31.31 amd64 Linux Kernel Headers for development
ii linux-libc-dev:amd64 6.8.0-35.35 amd64 Linux Kernel Headers for development
ii login 1:4.13+dfsg1-4ubuntu3 amd64 system login tools
ii logsave 1.47.0-2.4~exp1ubuntu4 amd64 save the output of a command in a log file
ii lsb-release 12.0-2 all Linux Standard Base version reporting utility (minimal implementation)
ii lsd 1.0.0-2 amd64 ls command with a lot of pretty colors and some other stuff
ii lua-luv:amd64 1.48.0-2-2build1 amd64 libuv bindings for Lua
ii lz4 1.9.4-1build1 amd64 Fast LZ compression algorithm library - tool
ii lzip 1.24.1-1build1 amd64 lossless data compressor based on the LZMA algorithm
@ -319,6 +324,8 @@ ii python3-pycryptodome 3.20.0+dfsg-1 amd64
ii python3-pycurl 7.45.3-1build2 amd64 Python bindings to libcurl (Python 3)
ii python3-pyelftools 0.30-1 all pure-python3 library for parsing ELF and DWARF
ii python3-toml 0.10.2-1 all library for Tom's Obvious, Minimal Language - Python 3.x
ii python3-tomli 2.0.1-2 all lil' TOML parser for Python
ii python3-tomli-w 1.0.0-2 all lil' TOML writer for Python
ii python3-xmltodict 0.13.0-1 all Makes working with XML feel like you are working with JSON (Python 3)
ii python3-yaml 6.0.1-2build2 amd64 YAML parser and emitter for Python3
ii python3-zstd 1.5.5.1-1build1 amd64 python bindings to Yann Collet ZSTD compression library
@ -337,7 +344,7 @@ ii sysstat 12.6.1-2 amd64
ii sysvinit-utils 3.08-6ubuntu3 amd64 System-V-like utilities
ii tar 1.35+dfsg-3build1 amd64 GNU version of the tar archiving utility
ii time 1.9-0.2build1 amd64 GNU time program for measuring CPU resource usage
ii tzdata 2024a-2ubuntu1 all time zone and daylight-saving time data
ii tzdata 2024a-3ubuntu1.1 all time zone and daylight-saving time data
ii ubuntu-keyring 2023.11.28.1 all GnuPG keys of the Ubuntu archive
ii ucf 3.0043+nmu1 all Update Configuration File(s): preserve user changes to config files
ii universal-ctags 5.9.20210829.0-1 amd64 build tag file indexes of source code definitions
@ -361,7 +368,7 @@ ii zstd 1.5.5+dfsg2-2build1 amd64
||/ Name Version Architecture Description
Packages sorted by Installed-Size:
964904 ===== TOTAL (355 packages)
978188 ===== TOTAL (362 packages)
76943 valgrind amd64
72249 gcc-13-x86-64-linux-gnu amd64
37841 g++-13-x86-64-linux-gnu amd64
@ -370,7 +377,7 @@ Packages sorted by Installed-Size:
35027 cpp-13-x86-64-linux-gnu amd64
29327 libperl5.38t64 amd64
21815 neovim-runtime all
21684 git amd64
21692 git amd64
20518 libstdc++-13-dev amd64
19159 perl-modules-5.38 all
16248 zsh-common all
@ -383,7 +390,7 @@ Packages sorted by Installed-Size:
12003 libc6-x32 amd64
11992 libc6-i386 amd64
11569 binutils-x86-64-linux-gnu amd64
11174 libc6-dbg amd64
11183 libc6-dbg amd64
10984 cmake-data all
10764 libasan8 amd64
9665 libx32asan8 amd64
@ -397,9 +404,10 @@ Packages sorted by Installed-Size:
7923 python3.12-minimal amd64
7913 perl-base amd64
7492 libx32gcc-13-dev amd64
7166 linux-libc-dev amd64
7193 linux-libc-dev amd64
6946 libc6-dev-i386 amd64
6944 coreutils amd64
6832 direnv amd64
6775 neovim amd64
6743 lib32stdc++-13-dev amd64
6607 libssl3t64 amd64
@ -423,6 +431,7 @@ Packages sorted by Installed-Size:
3443 fish amd64
3441 re2c amd64
3438 util-linux amd64
3408 lsd amd64
3403 libaria2-0 amd64
3382 fd-find amd64
3349 libubsan1 amd64
@ -459,6 +468,7 @@ Packages sorted by Installed-Size:
1730 libsqlite3-0 amd64
1712 libp11-kit0 amd64
1634 mksh amd64
1582 btop amd64
1579 ccache amd64
1504 e2fsprogs amd64
1454 bash-completion all
@ -471,9 +481,10 @@ Packages sorted by Installed-Size:
1321 zlib1g-dev amd64
1314 hyperfine amd64
1237 libzstd-dev amd64
1237 libgit2-1.7 amd64
1186 libmpfr6 amd64
1145 libpam-modules amd64
1136 zoxide amd64
1123 libpam-modules amd64
1025 libsystemd0 amd64
1014 libkrb5-3 amd64
996 screen amd64
@ -559,7 +570,7 @@ Packages sorted by Installed-Size:
273 patchelf amd64
273 mawk amd64
270 pax-utils amd64
269 libpam-modules-bin amd64
270 libpam-modules-bin amd64
264 libuv1t64 amd64
257 libk5crypto3 amd64
255 libipc-run-perl all
@ -582,7 +593,7 @@ Packages sorted by Installed-Size:
215 patchutils amd64
214 ucf all
211 libmagic1t64 amd64
208 libpam0g amd64
209 libpam0g amd64
207 libuchardet0 amd64
206 proot amd64
202 python3-pycurl amd64
@ -669,11 +680,13 @@ Packages sorted by Installed-Size:
69 liberror-perl all
69 libdebuginfod1t64 amd64
67 libpipeline1 amd64
66 libhttp-parser2.9 amd64
66 bzip3 amd64
63 sensible-utils all
63 libtermkey1 amd64
63 file amd64
61 ksh all
60 python3-tomli all
60 libcap-ng0 amd64
60 libattr1 amd64
57 libcom-err2 amd64
@ -700,6 +713,7 @@ Packages sorted by Installed-Size:
34 libtime-duration-perl all
34 libgdbm-compat4t64 amd64
33 libxau6 amd64
31 python3-tomli-w all
29 ubuntu-keyring all
28 g++-13 amd64
27 libpython3-stdlib amd64

View File

@ -84,7 +84,9 @@ static_assert((char) (-1) == 255);
#if __cplusplus >= 202002L // C++20
#define upx_is_constant_evaluated std::is_constant_evaluated
#elif __has_builtin(__builtin_is_constant_evaluated) // clang-9, gcc-9
#elif __has_builtin(__builtin_is_constant_evaluated) // clang-9, gcc-10
#define upx_is_constant_evaluated __builtin_is_constant_evaluated
#elif (ACC_CC_GNUC >= 0x090000) && 1 // gcc-9
#define upx_is_constant_evaluated __builtin_is_constant_evaluated
#endif

View File

@ -152,7 +152,7 @@ void throwCantPack(const char *format, ...) {
char msg[1024];
va_list ap;
va_start(ap, format);
(void) upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
va_end(ap);
throwCantPack(msg);
}
@ -162,7 +162,7 @@ void throwCantUnpack(const char *format, ...) {
char msg[1024];
va_list ap;
va_start(ap, format);
(void) upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
va_end(ap);
throwCantUnpack(msg);
}
@ -172,9 +172,9 @@ void throwInternalError(const char *format, ...) {
char msg[1024];
va_list ap;
va_start(ap, format);
(void) upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
upx_safe_vsnprintf_noexcept(msg, sizeof(msg), format, ap);
va_end(ap);
throwCantUnpack(msg);
throwInternalError(msg);
}
/*************************************************************************

View File

@ -31,7 +31,7 @@
// ElfLinker
**************************************************************************/
class ElfLinker : private upx::noncopyable {
class ElfLinker /*not_final*/ : private upx::noncopyable {
friend class Packer;
public:
@ -114,7 +114,7 @@ protected:
const char *type);
};
struct ElfLinker::Section : private upx::noncopyable {
struct ElfLinker::Section final : private upx::noncopyable {
char *name = nullptr;
void *input = nullptr;
byte *output = nullptr;
@ -128,7 +128,7 @@ struct ElfLinker::Section : private upx::noncopyable {
~Section() noexcept;
};
struct ElfLinker::Symbol : private upx::noncopyable {
struct ElfLinker::Symbol final : private upx::noncopyable {
char *name = nullptr;
Section *section = nullptr;
upx_uint64_t offset = 0;
@ -137,7 +137,7 @@ struct ElfLinker::Symbol : private upx::noncopyable {
~Symbol() noexcept;
};
struct ElfLinker::Relocation : private upx::noncopyable {
struct ElfLinker::Relocation final : private upx::noncopyable {
const Section *section = nullptr;
unsigned offset = 0;
const char *type = nullptr;

View File

@ -884,8 +884,9 @@ public:
ACC_COMPILE_TIME_ASSERT(sizeof(C1) == 1) // "char" or "byte"
ACC_COMPILE_TIME_ASSERT(sizeof(C2) == 1) // "char" or "byte"
const Section *s = getThunk((const char *) dll, (const char *) proc, thunk_separator_first);
if (s == nullptr &&
(s = getThunk((const char *) dll, (const char *) proc, thunk_separator)) == nullptr)
if (s == nullptr)
s = getThunk((const char *) dll, (const char *) proc, thunk_separator);
if (s == nullptr)
throwInternalError("entry not found");
return s->offset;
}
@ -897,7 +898,9 @@ public:
char ord[1 + 5 + 1];
upx_safe_snprintf(ord, sizeof(ord), "%c%05u", ordinal_id, ordinal);
const Section *s = getThunk((const char *) dll, ord, thunk_separator_first);
if (s == nullptr && (s = getThunk((const char *) dll, ord, thunk_separator)) == nullptr)
if (s == nullptr)
s = getThunk((const char *) dll, ord, thunk_separator);
if (s == nullptr)
throwInternalError("entry not found");
return s->offset;
}
@ -910,12 +913,13 @@ public:
}
template <typename C>
upx_uint64_t hasDll(const C *dll) const {
bool hasDll(const C *dll) const {
ACC_COMPILE_TIME_ASSERT(sizeof(C) == 1) // "char" or "byte"
TStr sdll(name_for_dll((const char *) dll, dll_name_id));
return findSection(sdll, false) != nullptr;
}
};
}; // class PeFile::ImportLinker
/*static*/ const char PeFile::ImportLinker::zeros[sizeof(import_desc)] = {0};
void PeFile::addKernelImport(const char *name) { ilinker->add_import(kernelDll(), name); }
@ -928,8 +932,7 @@ void PeFile::addStubImports() {
addKernelImport("VirtualProtect");
}
void PeFile::processImports2(unsigned myimport, unsigned) // pass 2
{
void PeFile::processImports2(unsigned myimport, unsigned) { // pass 2
COMPILE_TIME_ASSERT(sizeof(import_desc) == 20)
if (ilinker == nullptr)
return;
@ -941,8 +944,7 @@ void PeFile::processImports2(unsigned myimport, unsigned) // pass 2
}
template <typename LEXX, typename ord_mask_t>
unsigned PeFile::processImports0(ord_mask_t ord_mask) // pass 1
{
unsigned PeFile::processImports0(ord_mask_t ord_mask) { // pass 1
if (isefi) {
if (IDSIZE(PEDIR_IMPORT))
throwCantPack("imports not supported on EFI");
@ -1354,8 +1356,7 @@ struct PeFile::tls_traits<LE64> final {
template <typename LEXX>
void PeFile::processTls1(Interval *iv, typename tls_traits<LEXX>::cb_value_t imagebase,
unsigned imagesize) // pass 1
{
unsigned imagesize) { // pass 1
typedef typename tls_traits<LEXX>::tls tls;
typedef typename tls_traits<LEXX>::cb_value_t cb_value_t;
constexpr unsigned cb_size = tls_traits<LEXX>::cb_size;
@ -1441,8 +1442,7 @@ void PeFile::processTls1(Interval *iv, typename tls_traits<LEXX>::cb_value_t ima
template <typename LEXX>
void PeFile::processTls2(Reloc *const rel, const Interval *const iv, unsigned newaddr,
typename tls_traits<LEXX>::cb_value_t imagebase) // pass 2
{
typename tls_traits<LEXX>::cb_value_t imagebase) { // pass 2
typedef typename tls_traits<LEXX>::tls tls;
typedef typename tls_traits<LEXX>::cb_value_t cb_value_t;
constexpr unsigned cb_size = tls_traits<LEXX>::cb_size;
@ -1501,8 +1501,7 @@ void PeFile::processTls2(Reloc *const rel, const Interval *const iv, unsigned ne
// Load Configuration handling
**************************************************************************/
void PeFile::processLoadConf(Interval *iv) // pass 1
{
void PeFile::processLoadConf(Interval *iv) { // pass 1
if (IDSIZE(PEDIR_LOAD_CONFIG) == 0)
return;
@ -2350,7 +2349,7 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
unsigned newvsize = (isection[objs - 1].vaddr + isection[objs - 1].vsize + oam1) & ~oam1;
NO_fprintf(stderr, "newvsize=%x objs=%d\n", newvsize, objs);
if (newvsize + soimport + sorelocs > ibuf.getSize())
if ((upx_uint64_t) newvsize + soimport + sorelocs > ibuf.getSize())
throwInternalError("buffer too small 2");
memcpy(ibuf + newvsize, oimport, soimport);
memcpy(ibuf + newvsize + soimport, orelocs, sorelocs);
@ -3144,8 +3143,7 @@ tribool PeFile32::canUnpack() {
return canUnpack0(getFormat() == UPX_F_WINCE_ARM ? 4 : 3, ih.objects, ih.entry, sizeof(ih));
}
unsigned PeFile32::processImports() // pass 1
{
unsigned PeFile32::processImports() { // pass 1
return processImports0<LE32>(1u << 31);
}
@ -3195,8 +3193,7 @@ tribool PeFile64::canUnpack() {
return canUnpack0(3, ih.objects, ih.entry, sizeof(ih));
}
unsigned PeFile64::processImports() // pass 1
{
unsigned PeFile64::processImports() { // pass 1
return processImports0<LE64>(1ULL << 63);
}

View File

@ -743,7 +743,7 @@ inline void owner_delete(OwningPointer(T)(&object)) noexcept {
static_assert(std::is_class_v<T>); // UPX convention
static_assert(std::is_nothrow_destructible_v<T>);
if (object != nullptr) {
delete (T *) object;
delete (T *) object; // single object delete
object = nullptr;
}
assert_noexcept((T *) object == nullptr);
@ -754,7 +754,7 @@ template <class T>
inline void owner_free(OwningPointer(T)(&object)) noexcept {
static_assert(!std::is_class_v<T>); // UPX convention
if (object != nullptr) {
::free((T *) object);
::free((T *) object); // free memory from malloc()
object = nullptr;
}
assert_noexcept((T *) object == nullptr);

View File

@ -146,7 +146,7 @@ void MemBuffer::fill(unsigned off, unsigned len, int value) {
**************************************************************************/
// for use_simple_mcheck()
#define PTR_BITS32(p) ((unsigned) (ptr_get_address(p) & 0xffffffff))
#define PTR_BITS32(p) ((upx_uint32_t) (ptr_get_address(p) & 0xffffffff))
#define MAGIC1(p) ((PTR_BITS32(p) ^ 0xfefdbeeb) | 1)
#define MAGIC2(p) ((PTR_BITS32(p) ^ 0xfefdbeeb ^ 0x88224411) | 1)
@ -279,7 +279,7 @@ TEST_CASE("MemBuffer core") {
CHECK_THROWS(mb.subref("", N, 1));
if (use_simple_mcheck()) {
byte *p = raw_bytes(mb, 0);
unsigned magic1 = get_ne32(p - 4);
upx_uint32_t magic1 = get_ne32(p - 4);
set_ne32(p - 4, magic1 ^ 1);
CHECK_THROWS(mb.checkState());
set_ne32(p - 4, magic1);