Compare commits

...

78 Commits

Author SHA1 Message Date
jory 43116a9f2f Merge branch 'stealthy' into devel
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
GitHub - Close stale issues / Close stale issues (push) Has been cancelled
2025-12-13 14:03:35 +01:00
jory a8c82c0f3f Use pefile.cpp from stealthy branch 2025-12-13 14:02:33 +01:00
jory 16d1ec0fff Complete UPX evasion implementation
CI / Rebuild stubs (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Has been cancelled
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Has been cancelled
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Has been cancelled
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Has been cancelled
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Has been cancelled
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Has been cancelled
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Has been cancelled
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Has been cancelled
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Has been cancelled
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Has been cancelled
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Has been cancelled
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Has been cancelled
- Breaks all detection patterns from should_evade.txt detection script
- Modified import counts: 8 imports for EXE, 5 for DLL (breaks 2-6 pattern)
- Sophisticated entry point modification using stack manipulation instead of generic NOP
- Avoids 'Generic NOP at EP' detection
- String obfuscation via evasion script (UPX! → random)
- Overlay padding for entropy analysis evasion
- Maintains full functionality while evading detection

Both EXE and DLL files now evade detection completely.
2025-12-13 13:44:23 +01:00
jory 65a57ceea9 Progress: UPX evasion - breaks most detection patterns
- Modified import counts (8 imports for EXE, 5 for DLL)
- Added NOP to entry point to break byte patterns
- UPX! string replacement via evasion script
- Overlay padding for entropy

Remaining: Generic NOP at EP detection needs more sophisticated entry point modification
2025-12-13 13:41:18 +01:00
jory 97566c3344 Safe evasion techniques working - libphotoshop_packed_safe2.dll functional
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
Working features confirmed:
- High BSS modification (increased .text section size)
- Modified import order (LoadLibraryA, GetProcAddress, VirtualProtect, ExitProcess)
- Enhanced dummy imports (GetCurrentProcess, GetTickCount, QueryPerformanceCounter, GetModuleHandleA)
- Section flag modifications to break UPX patterns
- UPX string removal (changed to 'PACK')
- Modified timestamp (0x12345678)

Ready for additional evasion techniques based on should_evade.txt analysis.
2025-12-13 12:18:05 +01:00
jory 477535d32d Fixed DLL functionality by removing problematic evasion techniques
Working evasion features maintained:
- High BSS modification (increased .text section size)
- Modified import order (LoadLibraryA, GetProcAddress, VirtualProtect, ExitProcess)
- Dummy imports (GetCurrentProcess, GetModuleHandleA)
- Section flag modifications to break UPX patterns
- UPX string removal (changed to 'PACK')
- Modified timestamp (0x12345678)

Removed problematic features:
- Entry point randomization (caused execution issues)
- Section size randomization (broke memory mapping)
- Fake export table (broke DLL loading)
- Random file padding (corrupted file structure)

Focus on stable evasion techniques that maintain functionality.
2025-12-13 12:12:42 +01:00
jory 12b648b963 Advanced UPX evasion techniques for malware analysis
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
- Modified UPX version strings to remove 'UPX' references
- Changed 'UPX' to 'PACK' in identification strings
- Added 64 bytes of random padding to break static analysis patterns
- Modified PE timestamp to fixed fake value (0x12345678)
- All changes maintain DLL functionality while evading detection

Combined with previous high BSS and import order modifications for comprehensive evasion.
2025-12-13 12:01:40 +01:00
jory d7b37970d1 UPX evasion modifications for malware analysis testing
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
- Modified section layout to increase BSS size for 'high BSS' heuristic
- Changed import order to LoadLibraryA, GetProcAddress, VirtualProtect, ExitProcess
- Added dummy imports (GetCurrentProcess, GetModuleHandleA) to break patterns
- Modified section flags to evade UPX detection heuristics
- Maintains DLL functionality while altering detection signatures

Changes are for isolated testing environment analysis purposes only.
2025-12-13 11:50:25 +01:00
jory 3a828abcb9 An attempt to obfuscate more to get less detected as upx by AV
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
2025-12-12 22:02:28 +01:00
jory c95ff77bed fixed broken packer
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
2025-12-12 19:46:23 +01:00
jory d4f43249ab feat: Improve evasion techniques
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
- Add dummy import to alter import hash
- Use common section names to avoid detection
- Modify entry point signatures for both 32-bit and 64-bit stubs
2025-12-12 19:21:24 +01:00
jory 808dd698ef Update upx_evasion.py
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
2025-12-12 14:31:37 +00:00
jory 0a8ac15c67 added custom stub
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-22.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }}-0 (ubuntu-24.04-arm) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-22.04, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.os) }} (ubuntu-24.04, true, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-13, g++-13, macos-14, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-14, g++-14, macos-15-intel, true) (push) Blocked by required conditions
CI / ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} (gcc-15, g++-15, macos-26, true) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64, windows-11-arm, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-11-arm64ec, windows-11-arm, true, arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-amd64, windows-2022, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2022-i386, windows-2022, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-amd64, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('{0}', matrix.name) }} (windows-2025-i386, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (amd64-win64-vs2025, windows-2025, amd64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (arm64-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('windows-bh {0}', matrix.name) }} (i386-win32-vs2025, windows-2025, amd64_x86, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (aarch64-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-aarch64, -fPIE, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (alpine:3.18, qemu-x86_64, -fPIE, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (i386-windows-gnu) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-aarch64, aarch64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-arm, arm-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-armeb, armeb-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, -fPIE, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-i386, -march=i586, i386-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mips, mips-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabi) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-mipsel, mipsel-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc, powerpc-linux-musleabihf) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, -fPIE, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64, powerpc64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, -fPIE, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-riscv64, UPX-UNSUPPORTED, riscv64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.17) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-macos-none) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (x86_64-windows-gnu) (push) Blocked by required conditions
CI / Rebuild stubs (push) Waiting to run
CI / ${{ format('windows-bh {0}', matrix.name) }} (-arm64EC, /machine:arm64ec, arm64ec-win64-vs2025, windows-2025, amd64_arm64, 2022) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (-march=i586, i386-linux-gnu.2.3.4) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-ppc64le, -fPIE, powerpc64le-linux-musl) (push) Blocked by required conditions
CI / ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} (qemu-x86_64, x86_64-linux-gnu.2.3.4) (push) Blocked by required conditions
2025-12-12 15:19:13 +01:00
jory 6bcfbb7c4f feat: Implement AV evasion techniques (section renaming and padding)
This commit introduces two new AV evasion techniques:
- Section renaming: UPX0, UPX1, and UPX2 sections are now renamed to .text, .data, and .rdata respectively.
- Random padding: A new command-line option --add-padding is introduced to add random padding to the end of the packed file.

These changes aim to make UPX-packed executables harder to detect by antivirus software.
2025-12-11 22:41:54 +01:00
John Reiser f3d4503e93 clang-format inconsistency
modified:   p_elf_enum.h
2025-12-10 10:33:46 -08:00
John Reiser 70cb4aadda Fix "bad slide" on 32-bit ARM shared library
https://github.com/upx/upx/issues/944
	modified:   src/p_elf_enum.h
	modified:   src/p_lx_elf.cpp
2025-12-10 10:24:53 -08:00
John Reiser 75325bf9ef bb1
modified:   src/p_lx_elf.cpp
2025-12-10 10:24:53 -08:00
Markus F.X.J. Oberhumer 669bf2251f CI updates 2025-12-10 12:30:09 +01:00
Markus F.X.J. Oberhumer 190fd76583 CI updates 2025-12-10 10:15:51 +01:00
Markus F.X.J. Oberhumer 8622e22be0 CI updates 2025-12-02 13:54:23 +01:00
Markus F.X.J. Oberhumer 139a0324b6 CI updates 2025-11-29 18:10:15 +01:00
Markus F.X.J. Oberhumer e39f2b2b2f CI updates 2025-11-29 15:12:15 +01:00
John Reiser 7a46365296 Fix unpack of PackLinuxI386 for upx version 11
Old b_info without .b_method
https://github.com/upx/upx/issues/942
        modified:   p_unix.cpp
2025-11-25 04:29:52 -08:00
Markus F.X.J. Oberhumer f83b7690e5 CI updates 2025-11-25 09:15:40 +01:00
Markus F.X.J. Oberhumer 98c00d0fcb CI updates 2025-11-08 09:05:25 +01:00
Markus F.X.J. Oberhumer b04d566b83 CI updates 2025-11-03 15:41:08 +01:00
Markus F.X.J. Oberhumer b3c765ac7c CI updates 2025-11-02 23:52:34 +01:00
Markus F.X.J. Oberhumer f7146b5af9 CI updates 2025-11-02 18:41:09 +01:00
John Reiser 5dbf94e49b Update README.SRC to enable success by newbies.
Need i386 version of zlib, updated libmfpr.so, g++ (not clang++).
https://github.com/upx/upx/issues/938
	modified:   README.SRC
2025-10-29 11:14:58 -07:00
Markus F.X.J. Oberhumer 2e39c924d5 CI updates 2025-10-29 10:03:11 +01:00
John Reiser 3068d19492 WinPE with TLS: fix relocation bugs
--strip-relocs not needed after bugfixes, but keep safety check.
Thanks to @ml1050.
https://github.com/upx/upx/issues/880
	modified:   pefile.cpp
2025-10-26 13:36:43 -07:00
Markus F.X.J. Oberhumer 09d7d08e55 all: version bump 2025-10-24 22:02:13 +02:00
Markus F.X.J. Oberhumer 31ff38049f CI updates 2025-10-24 21:53:23 +02:00
John Reiser a5f5e7fc73 WinPE: Require --strip-relocs if relocating compressed data
Thanks to @bitraid for investigating and suggestions.
https://github.com/upx/upx/issues/880
	modified:   pefile.cpp
2025-10-24 08:35:20 -07:00
Markus F.X.J. Oberhumer 3533ebe804 CI updates 2025-10-13 01:44:37 +02:00
Markus F.X.J. Oberhumer c4ed5cc159 CI updates 2025-10-11 02:59:23 +02:00
John Reiser 303ac34539 ord() not needed
modified:   scripts/bin2h.py
2025-10-10 13:34:15 -07:00
John Reiser e8947a6812 Cleanup deubg
modified:   scripts/brandelf.py
2025-10-10 13:10:14 -07:00
John Reiser 533e642945 Merge branch 'jreiser-python3a' into jreiser-python3 2025-10-10 11:50:22 -07:00
John Reiser 8ab47ba8a4 More python3
modified:   scripts/brandelf.py
	modified:   scripts/gpp_inc.py
	modified:   src/arch/i086/cleanasm.py
2025-10-10 11:43:39 -07:00
John Reiser e4c638aa73 Mixing python3 strings with bytes requires .encode and .decode
modified:   stub/scripts/bin2h.py
	modified:   stub/scripts/brandelf.py
	modified:   stub/scripts/gpp_inc.py
	modified:   stub/scripts/xstrip.py
2025-10-10 08:56:37 -07:00
John Reiser 4ec866594b Mixing python3 strings with bytes requires .encode and .decode
modified:   stub/scripts/bin2h.py
	modified:   stub/scripts/brandelf.py
	modified:   stub/scripts/gpp_inc.py
	modified:   stub/scripts/xstrip.py
2025-10-10 08:38:59 -07:00
John Reiser a3d5a0a7b8 Replace 'has_key' with 'in'
modified:   src/stub/scripts/bin2h.py
	modified:   src/stub/scripts/xstrip.py
	modified:   src/stub/src/arch/i086/cleanasm.py
2025-10-08 14:35:13 -07:00
John Reiser 59d5d25a77 python-is-python3
modified:   ci.yml
2025-10-08 14:24:32 -07:00
John Reiser e60ebd4027 install python
modified:   ci.yml
2025-10-08 14:22:12 -07:00
John Reiser 3a61782f12 no more PYTHON2
modified:   src/stub/Makefile
2025-10-08 14:18:52 -07:00
John Reiser 11041f44e6 need ../deps/packages
modified:   ci.yml
2025-10-08 14:05:01 -07:00
John Reiser 649063c8c6 ci.yml syntax
modified:   ci.yml
2025-10-08 08:40:23 -07:00
John Reiser 36271c3244 python (python3) replaces python2
https://github.com/upx/upx/issues/868
Thanks to 'tansy' for the patches to *.py .

	modified:   .github/workflows/ci.yml
	modified:   src/stub/scripts/bin2h.py
	modified:   src/stub/scripts/brandelf.py
	modified:   src/stub/scripts/gpp_inc.py
	modified:   src/stub/scripts/xstrip.py
	modified:   src/stub/src/arch/i086/cleanasm.py
	modified:   src/stub/src/arch/i086/wdis2gas.py
2025-10-08 08:32:24 -07:00
Markus F.X.J. Oberhumer 3c3caaa567 CI updates 2025-10-07 22:00:31 +02:00
Markus F.X.J. Oberhumer d3504d8af2 CI updates 2025-10-05 13:17:03 +02:00
Markus F.X.J. Oberhumer 12d1c6bbda CI updates 2025-09-30 20:38:33 +02:00
Markus F.X.J. Oberhumer 466ceb4a1f CI updates 2025-09-18 12:03:48 +02:00
John Reiser 3b71139426 WIP Propagate CETCOMPAT flag for PeFile.
https://github.com/upx/upx/issues/909
	modified:   pefile.cpp
	modified:   pefile.h
2025-09-13 15:50:01 -07:00
Markus F.X.J. Oberhumer b11f043d64 CI updates 2025-09-10 11:11:51 +02:00
John Reiser aef93548f9 Fix memfd_create in shared libraries on amd64 Linux < kernel 6.3
https://github.com/upx/upx/issues/929
	modified:   stub/src/amd64-linux.elf-so_fold.S
           plus generated .h .dump
2025-09-09 14:58:00 -07:00
John Reiser 26ca21f6cb arm.v4a: cancel_sigsegv
modified:   misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   src/stub/src/arm.v4a-linux.elf-entry.S
	modified:   src/stub/src/arm.v4a-linux.elf-fold.S
           plus generated .h .dump .map
2025-08-21 06:19:21 -07:00
Markus F.X.J. Oberhumer 404fb48668 CI updates 2025-08-21 00:21:15 +02:00
John Reiser e85e8bec5d New option --catch-sigsegv on amd64, arm64, arm.v4a
Catch SIGSEGV during de-compression, and print state info
("auto debug") using /proc/self/maps and gdb.
This was motivated by suspicion of unreliable hardware
which triggered "Heisenbugs": a crash which cannot be reproduced.
If SIGSGV occurs without the "auto debug" info, then that
implies an error user code after de-compression, often when
user code accesses /proc/self/exe, which is not the un-compressed file.
	modified:   misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   src/help.cpp
	modified:   src/main.cpp
	modified:   src/options.h
	modified:   src/p_lx_elf.cpp
	modified:   src/stub/Makefile
	modified:   src/stub/src/amd64-linux.elf-entry.S
	modified:   src/stub/src/amd64-linux.elf-fold.S
	modified:   src/stub/src/arm.v4a-linux.elf-entry.S
	modified:   src/stub/src/arm.v4a-linux.elf-fold.S
	modified:   src/stub/src/arm64-linux.elf-entry.S
	modified:   src/stub/src/arm64-linux.elf-fold.S
           plus generated .h .dump .map
2025-08-19 12:25:33 -07:00
John Reiser 4530e5c264 Fix upxfd_create for stubs on PowerPC64
https://github.com/upx/upx/issues/925
	modified:   misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   src/stub/src/powerpc64-linux.elf-fold.S
           plus generated .h
2025-08-16 16:00:11 -07:00
Markus F.X.J. Oberhumer 1188d2933b SIGSEGV: handle and pretty-print on arm64-linux 2025-08-10 09:55:12 +02:00
Markus F.X.J. Oberhumer 4e88556c94 SIGSEGV: handle and pretty-print on amd64-linux 2025-08-10 09:39:29 +02:00
Markus F.X.J. Oberhumer 1f0036a460 CI updates 2025-08-10 09:05:14 +02:00
Markus F.X.J. Oberhumer 5d30472ee2 CI updates 2025-08-04 16:05:44 +02:00
Markus F.X.J. Oberhumer 9866b9bca9 SIGSEGV: handle and pretty-print on amd64-linux 2025-08-01 00:49:27 +02:00
Markus F.X.J. Oberhumer bbf52cee67 CI updates 2025-07-30 23:09:28 +02:00
Markus F.X.J. Oberhumer b9b77965b7 CI updates 2025-07-30 01:40:30 +02:00
Markus F.X.J. Oberhumer 852666010e CI updates 2025-07-29 19:50:17 +02:00
John Reiser bbb886ae4d gcc 14.2.1-3 lax on signed-vs-unsigned compare
modified:   p_lx_elf.cpp
2025-07-25 07:14:33 -07:00
John Reiser b52d3e0772 Detect DT_HASH chain out-of-bounds
https://issues.oss-fuzz.com/u/1/issues/430110068
	modified:   p_lx_elf.cpp
2025-07-24 11:09:58 -07:00
Markus F.X.J. Oberhumer 27f8f4f62e CI updates 2025-07-25 18:20:14 +02:00
Markus F.X.J. Oberhumer 21ec7e7410 CI updates 2025-07-25 10:03:28 +02:00
Markus F.X.J. Oberhumer ae6d5303ba CI updates 2025-07-25 03:07:51 +02:00
Markus F.X.J. Oberhumer fbbc2bc874 CI updates 2025-07-23 14:33:29 +02:00
Markus F.X.J. Oberhumer 62f22d61e6 CI updates 2025-07-23 11:00:41 +02:00
Markus F.X.J. Oberhumer 3f1f76f8a3 CI updates 2025-07-21 15:57:03 +02:00
Markus F.X.J. Oberhumer 518712c613 CI updates 2025-07-21 12:26:30 +02:00
Markus F.X.J. Oberhumer c0c08c9f43 all: post-release version bump 2025-07-20 15:59:04 +02:00
117 changed files with 26090 additions and 19799 deletions
+1
View File
@@ -20,6 +20,7 @@ Checks: >
-bugprone-suspicious-memory-comparison, -bugprone-suspicious-memory-comparison,
-bugprone-suspicious-string-compare, -bugprone-suspicious-string-compare,
-bugprone-switch-missing-default-case, -bugprone-switch-missing-default-case,
-bugprone-unintended-char-ostream-output,
clang-analyzer-*, clang-analyzer-*,
-clang-analyzer-optin.performance.Padding, -clang-analyzer-optin.performance.Padding,
-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
+139 -112
View File
@@ -8,6 +8,8 @@ name: CI
on: [push, workflow_dispatch] on: [push, workflow_dispatch]
defaults: { run: { shell: bash } }
env: env:
CMAKE_REQUIRED_QUIET: 'OFF' CMAKE_REQUIRED_QUIET: 'OFF'
CMAKE_VERBOSE_MAKEFILE: 'ON' CMAKE_VERBOSE_MAKEFILE: 'ON'
@@ -20,8 +22,8 @@ env:
UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 1 UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 1
UPX_DEBUG_TEST_LIBC_QSORT: 1 UPX_DEBUG_TEST_LIBC_QSORT: 1
ZSTD_CLEVEL: 17 ZSTD_CLEVEL: 17
# 2025-05-21 # 2025-10-11
ZIG_DIST_VERSION: 0.14.1 ZIG_DIST_VERSION: 0.15.2
jobs: jobs:
job-rebuild-and-verify-stubs: job-rebuild-and-verify-stubs:
@@ -37,13 +39,14 @@ jobs:
dpkg --add-architecture i386 dpkg --add-architecture i386
apt-get update && apt-get upgrade -y apt-get update && apt-get upgrade -y
# install system packages # install system packages
apt-get install -y --no-install-recommends bash ca-certificates curl git libmpc3 make perl-base tar time xz-utils libc6:i386 zlib1g:i386 apt-get install -y --no-install-recommends bash ca-certificates curl git libmpc3 make perl-base python3-minimal tar time xz-utils libc6:i386 zlib1g:i386
# install python2-minimal packages from Debian-11 apt-get install -y gcc-riscv64-linux-gnu
mkdir ../deps; cd ../deps; mkdir packages mkdir ../deps; cd ../deps; mkdir packages
curl -sS -L -O https://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb ### install python2-minimal packages from Debian-11
curl -sS -L -O https://ftp.debian.org/debian/pool/main/p/python2.7/python2.7-minimal_2.7.18-8+deb11u1_amd64.deb ## curl -sS -L -O https://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb
dpkg -i ./*python2*.deb && rm ./*python2*.deb && ldconfig ## curl -sS -L -O https://ftp.debian.org/debian/pool/main/p/python2.7/python2.7-minimal_2.7.18-8+deb11u1_amd64.deb
ln -s -v python2.7 /usr/bin/python2 ## dpkg -i ./*python2*.deb && rm ./*python2*.deb && ldconfig
## ln -s -v python2.7 /usr/bin/python2
# manually unpack and install compat libs from Ubuntu-16.04 # manually unpack and install compat libs from Ubuntu-16.04
curl -sS -L -O https://archive.kernel.org/ubuntu-archive/ubuntu/pool/main/m/mpfr4/libmpfr4_3.1.6-1_amd64.deb curl -sS -L -O https://archive.kernel.org/ubuntu-archive/ubuntu/pool/main/m/mpfr4/libmpfr4_3.1.6-1_amd64.deb
for f in ./*.deb; do dpkg -x $f ./packages; done for f in ./*.deb; do dpkg -x $f ./packages; done
@@ -51,6 +54,7 @@ jobs:
rm -rf ./*.deb ./packages && ldconfig rm -rf ./*.deb ./packages && ldconfig
# install upx-stubtools # install upx-stubtools
curl -sS -L https://github.com/upx/upx-stubtools/releases/download/v20221212/bin-upx-20221212.tar.xz | tar -xJ curl -sS -L https://github.com/upx/upx-stubtools/releases/download/v20221212/bin-upx-20221212.tar.xz | tar -xJ
- run: dpkg -l
- name: Check out code - name: Check out code
run: | run: |
git config --global --add safe.directory '*' # needed when running in a container git config --global --add safe.directory '*' # needed when running in a container
@@ -75,7 +79,6 @@ jobs:
make -C doc clean all make -C doc clean all
if ! git diff --quiet; then git diff || true; fi # ignore diff error if ! git diff --quiet; then git diff || true; fi # ignore diff error
- name: Clean up - name: Clean up
shell: bash
run: | run: |
git ls-files -z --others --ignored --exclude-standard ./src/stub | xargs -0r rm -v -- git ls-files -z --others --ignored --exclude-standard ./src/stub | xargs -0r rm -v --
find ./src/stub/src -type d -name tmp -print0 | xargs -0r rmdir -v -- find ./src/stub/src -type d -name tmp -print0 | xargs -0r rmdir -v --
@@ -97,17 +100,17 @@ jobs:
steps: steps:
- run: uname -a; pwd; id; umask - run: uname -a; pwd; id; umask
- run: sudo apt-get update - run: sudo apt-get update
- run: sudo apt-get install -y gdb parallel - run: sudo apt-get install -y dmidecode gdb parallel valgrind
- uses: actions/checkout@v4 - run: (sudo dmidecode | sed -n -e '/System Information/,/^$/p') || true
- run: sudo dmidecode -q || true
- run: sudo dmidecode || true
- uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- run: make build/extra/gcc/all - run: make build/extra/gcc/all
- run: make build/extra/clang/all - run: make build/extra/clang/all
# run: make build/extra/gcc-pie/all
# run: make build/extra/clang-pie/all
- run: ls -l build/*/*/*/upx* || true - run: ls -l build/*/*/*/upx* || true
- run: file build/*/*/*/upx* || true - run: file build/*/*/*/upx* || true
- name: Make artifact - name: Make artifact
shell: bash
run: | run: |
N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.os }}-0" | sed 's/[^0-9a-zA-Z_.-]/-/g') N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.os }}-0" | sed 's/[^0-9a-zA-Z_.-]/-/g')
mkdir -p "tmp/artifact/$N" mkdir -p "tmp/artifact/$N"
@@ -116,23 +119,37 @@ jobs:
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") (cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Mimic ctest tests SIGSEGV - name: Run install tests
shell: bash
run: | run: |
jobs="gcc/debug gcc/release clang/debug clang/release" jobs="gcc/debug gcc/release clang/debug clang/release"
#jobs="$jobs gcc-pie/debug gcc-pie/release clang-pie/debug clang-pie/release" echo "===== parallel jobs: $jobs"
for ((i = 0; i < 5; i++)); do DESTDIR="Install with make 2" parallel -kv --lb 'make build/extra/{}+install' ::: $jobs
echo "===== parallel jobs: $jobs" - name: Mimic ctest tests SIGSEGV
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest_sigsegv.sh' ::: $jobs run: |
done jobs="gcc/debug gcc/release clang/debug clang/release"
echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest_sigsegv.sh' ::: $jobs
ls -ld ./build/*/*/*/upx-* || true
rm -rf ./build/*/*/*/upx-*
- name: Run ctest tests - name: Run ctest tests
run: | run: |
jobs="gcc/debug gcc/release clang/debug clang/release" jobs="gcc/debug gcc/release clang/debug clang/release"
#jobs="$jobs gcc-pie/debug gcc-pie/release clang-pie/debug clang-pie/release"
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs
ls -ld ./build/*/*/*/XTesting/*/* || true
rm -rf ./build/*/*/*/XTesting/*/*
- name: Mimic ctest tests with Valgrind
run: |
export UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS=ON # valgrind is SLOW
export upx_exe_runner="valgrind --leak-check=no --error-exitcode=1 --quiet --gen-suppressions=all"
# clang/debug does not work before valgrind-3.20, see https://bugs.kde.org/show_bug.cgi?id=452758
jobs="gcc/debug gcc/release clang/release"
echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs
ls -ld ./build/*/*/*/upx-* || true
rm -rf ./build/*/*/*/upx-*
job-linux-cmake: # uses cmake + make job-linux-cmake: # uses cmake + make
if: true if: true
@@ -141,7 +158,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- { os: ubuntu-22.04, use_extra: true, use_wine: true } - { os: ubuntu-22.04, use_extra: true }
- { os: ubuntu-24.04, use_extra: true, use_wine: true } - { os: ubuntu-24.04, use_extra: true, use_wine: true }
name: ${{ format('{0}', matrix.os) }} name: ${{ format('{0}', matrix.os) }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@@ -152,6 +169,7 @@ jobs:
run: | run: |
sudo dpkg --add-architecture i386 sudo dpkg --add-architecture i386
sudo apt-get update && sudo apt-get upgrade -y sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y dmidecode gdb libc6-dbg:i386 parallel valgrind
sudo apt-get install -y g++-multilib g++-mingw-w64-i686 g++-mingw-w64-x86-64 sudo apt-get install -y g++-multilib g++-mingw-w64-i686 g++-mingw-w64-x86-64
# make sure that we use posix-threads (pthread/winpthreads) and NOT win32-threads # make sure that we use posix-threads (pthread/winpthreads) and NOT win32-threads
for f in i686-w64-mingw32-g++ i686-w64-mingw32-gcc x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc; do for f in i686-w64-mingw32-g++ i686-w64-mingw32-gcc x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc; do
@@ -159,14 +177,19 @@ jobs:
ls -l /usr/bin/${f}* ls -l /usr/bin/${f}*
done done
ls -l /etc/alternatives/*mingw* || true ls -l /etc/alternatives/*mingw* || true
sudo apt-get install -y libc6-dbg:i386 valgrind - run: (sudo dmidecode | sed -n -e '/System Information/,/^$/p') || true
if: ${{ matrix.use_extra }}
- run: sudo dmidecode -q || true
if: ${{ matrix.use_extra }}
- run: sudo dmidecode || true
if: ${{ matrix.use_extra }}
- name: Install Wine - name: Install Wine
if: ${{ matrix.use_extra && matrix.use_wine }} if: ${{ matrix.use_extra && matrix.use_wine }}
run: | run: |
sudo apt-get install -y wine wine32:i386 wine64 sudo apt-get install -y wine wine32:i386 wine64
ls -l /usr/bin/wine* ls -l /usr/bin/wine*
mkdir -p -v ~/.wine && wineboot --init mkdir -p -v ~/.wine && wineboot --init
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- name: Check out test suite - name: Check out test suite
run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite
@@ -207,18 +230,24 @@ jobs:
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") (cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Run install tests - name: Run install tests
run: | run: |
(cd build/extra/gcc/release && DESTDIR="$PWD/Install with cmake" cmake --install .) (cd build/extra/gcc/release && DESTDIR="$PWD/Install with cmake" cmake --install .)
(cd build/extra/gcc/release && DESTDIR="$PWD/Install with make" make install) (cd build/extra/gcc/release && DESTDIR="$PWD/Install with make" make install)
jobs="gcc/debug gcc/release clang/debug clang/release"
test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release"
echo "===== parallel jobs: $jobs"
DESTDIR="Install with make 2" parallel -kv --lb 'make build/extra/{}+install' ::: $jobs
- name: Mimic ctest tests SIGSEGV - name: Mimic ctest tests SIGSEGV
run: | run: |
jobs="gcc/debug gcc/release clang/debug clang/release" jobs="gcc/debug gcc/release clang/debug clang/release"
test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release" test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release"
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest_sigsegv.sh' ::: $jobs parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest_sigsegv.sh' ::: $jobs
ls -ld ./build/*/*/*/upx-* || true
rm -rf ./build/*/*/*/upx-*
- name: Run ctest tests - name: Run ctest tests
run: | run: |
jobs="gcc/debug gcc/release clang/debug clang/release" jobs="gcc/debug gcc/release clang/debug clang/release"
@@ -227,6 +256,8 @@ jobs:
command -v wine >/dev/null && jobs="$jobs cross-windows-mingw64/debug cross-windows-mingw64/release" command -v wine >/dev/null && jobs="$jobs cross-windows-mingw64/debug cross-windows-mingw64/release"
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs
ls -ld ./build/*/*/*/XTesting/*/* || true
rm -rf ./build/*/*/*/XTesting/*/*
- name: Mimic ctest tests with Valgrind - name: Mimic ctest tests with Valgrind
if: true # note: valgrind is SLOW if: true # note: valgrind is SLOW
run: | run: |
@@ -238,6 +269,8 @@ jobs:
test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release" test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release"
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs
ls -ld ./build/*/*/*/upx-* || true
rm -rf ./build/*/*/*/upx-*
fi fi
- name: Run file system tests - name: Run file system tests
run: | run: |
@@ -263,6 +296,8 @@ jobs:
test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release" test "${{ matrix.use_extra }}" = "true" && jobs="$jobs gcc-m32/debug gcc-m32/release"
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/upx_testsuite_1.sh' ::: $jobs parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/upx_testsuite_1.sh' ::: $jobs
ls -ld ./build/*/*/*/tmp-upx-testsuite* || true
rm -rf ./build/*/*/*/tmp-upx-testsuite*
job-macos-cmake: # uses cmake + make job-macos-cmake: # uses cmake + make
if: true if: true
@@ -273,10 +308,10 @@ jobs:
include: include:
# NOTE: Xcode updates regularly tend to break Homebrew clang/gcc; often some ld64 issue; use "xcode_version" as needed; or try "-Wl,-ld_classic" # NOTE: Xcode updates regularly tend to break Homebrew clang/gcc; often some ld64 issue; use "xcode_version" as needed; or try "-Wl,-ld_classic"
# NOTE: macos does not have "env -C"; only with brew coreutils # NOTE: macos does not have "env -C"; only with brew coreutils
- { os: macos-13, gcc: gcc-12, gxx: g++-12, testsuite: true }
- { os: macos-14, gcc: gcc-13, gxx: g++-13, testsuite: true } - { os: macos-14, gcc: gcc-13, gxx: g++-13, testsuite: true }
# { os: macos-15, gcc: gcc-14, gxx: g++-14, testsuite: true } - { os: macos-15, gcc: gcc-14, gxx: g++-14, testsuite: true }
- { os: macos-15, testsuite: true } - { os: macos-26, gcc: gcc-15, gxx: g++-15, testsuite: true }
- { os: macos-15-intel, gcc: gcc-14, gxx: g++-14, testsuite: true }
name: ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }} name: ${{ format('{0} {1}{2}', matrix.os, matrix.xcode_version && 'xcode-' || '', matrix.xcode_version) }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
@@ -301,9 +336,9 @@ jobs:
echo "UPX_DEBUG_FORCE_PACK_MACOS=1" >> $GITHUB_ENV echo "UPX_DEBUG_FORCE_PACK_MACOS=1" >> $GITHUB_ENV
case "${{ matrix.os }}" in case "${{ matrix.os }}" in
# TODO FIXME: UPX on macos-13+ is broken => disable run-packed for now # TODO FIXME: UPX on macos-13+ is broken => disable run-packed for now
macos-1[345]) echo "UPX_CONFIG_DISABLE_RUN_PACKED_TEST=ON" >> $GITHUB_ENV ;; macos-[12][3456]*) echo "UPX_CONFIG_DISABLE_RUN_PACKED_TEST=ON" >> $GITHUB_ENV ;;
esac esac
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- name: Check out test suite - name: Check out test suite
if: ${{ matrix.testsuite }} if: ${{ matrix.testsuite }}
@@ -329,7 +364,6 @@ jobs:
- run: ls -l build/*/*/*/upx* || true - run: ls -l build/*/*/*/upx* || true
- run: file build/*/*/*/upx* || true - run: file build/*/*/*/upx* || true
- name: Make artifact - name: Make artifact
shell: bash
run: | run: |
X="${{ matrix.xcode_version }}"; test -n "$X" && X="-xcode-$X" X="${{ matrix.xcode_version }}"; test -n "$X" && X="-xcode-$X"
N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.os }}$X" | sed 's/[^0-9a-zA-Z_.-]/-/g') N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.os }}$X" | sed 's/[^0-9a-zA-Z_.-]/-/g')
@@ -346,13 +380,14 @@ jobs:
(cd tmp/artifact && gtar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") (cd tmp/artifact && gtar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Run install tests - name: Run install tests
run: | run: |
(cd build/extra/clang/release && DESTDIR="$PWD/Install with cmake" cmake --install .) (cd build/extra/clang/release && DESTDIR="$PWD/Install with cmake" cmake --install .)
(cd build/extra/clang/release && DESTDIR="$PWD/Install with make" make install) (cd build/extra/clang/release && DESTDIR="$PWD/Install with make" make install)
- name: Run ctest tests - name: Run ctest tests
if: ${{ matrix.testsuite }}
run: | run: |
for f in ./build/extra/*/*/upx; do file $f; done for f in ./build/extra/*/*/upx; do file $f; done
jobs="clang/debug clang/release" jobs="clang/debug clang/release"
@@ -360,6 +395,7 @@ jobs:
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs CTEST_JOBS=2 parallel -kv --lb 'make build/extra/{}+test' ::: $jobs
- name: Mimic ctest tests - name: Mimic ctest tests
if: ${{ matrix.testsuite }}
run: | run: |
export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH" export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
jobs="clang/debug clang/release" jobs="clang/debug clang/release"
@@ -367,7 +403,7 @@ jobs:
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs parallel -kv --lb 'cd build/extra/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs
- name: Run file system tests - name: Run file system tests
if: ${{ matrix.testsuite }} # for coreutils readlink if: ${{ matrix.testsuite }}
run: | run: |
export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH" export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
export upx_test_file="$PWD"/build/extra/clang/release/upx export upx_test_file="$PWD"/build/extra/clang/release/upx
@@ -392,43 +428,46 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
# { name: windows-2019-amd64, os: windows-2019, vsversion: 2019, vsarch: amd64 } - { name: windows-11-arm64, os: windows-11-arm, vsversion: 2022, vsarch: arm64 }
- { name: windows-2022-amd64, os: windows-2022, vsversion: 2022, vsarch: amd64 } - { name: windows-11-arm64ec, os: windows-11-arm, vsversion: 2022, vsarch: arm64, use_arm64ec: true }
- { name: windows-2022-arm64, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64 } # { name: windows-11-arm64x, os: windows-11-arm, vsversion: 2022, vsarch: arm64, use_arm64x: true }
# { name: windows-2022-arm64ec, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64, use_amd64ec: true } - { name: windows-2022-amd64, os: windows-2022, vsversion: 2022, vsarch: amd64 }
- { name: windows-2022-i386, os: windows-2022, vsversion: 2022, vsarch: amd64_x86 } - { name: windows-2022-i386, os: windows-2022, vsversion: 2022, vsarch: amd64_x86 }
- { name: windows-2025-amd64, os: windows-2025, vsversion: 2022, vsarch: amd64 } - { name: windows-2025-amd64, os: windows-2025, vsversion: 2022, vsarch: amd64 }
- { name: windows-2025-arm64, os: windows-2025, vsversion: 2022, vsarch: amd64_arm64 } - { name: windows-2025-i386, os: windows-2025, vsversion: 2022, vsarch: amd64_x86 }
- { name: windows-2025-arm64ec, os: windows-2025, vsversion: 2022, vsarch: amd64_arm64, use_amd64ec: true }
- { name: windows-2025-i386, os: windows-2025, vsversion: 2022, vsarch: amd64_x86 }
name: ${{ format('{0}', matrix.name) }} name: ${{ format('{0}', matrix.name) }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- run: git config --global core.autocrlf false - run: git config --global core.autocrlf false
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- name: Check out test suite - name: Check out test suite
run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite run: git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite
- uses: ilammy/msvc-dev-cmd@v1 - uses: ilammy/msvc-dev-cmd@v1
with: { vsversion: '${{ matrix.vsversion }}', arch: '${{ matrix.vsarch }}' } with: { vsversion: '${{ matrix.vsversion }}', arch: '${{ matrix.vsarch }}' }
- name: Set platform - name: Set platform
shell: bash
run: | run: |
if [[ "${{ matrix.vsarch }}" == amd64 ]]; then true; if [[ "${{ matrix.use_arm64ec }}" == "true" ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A x64" >> $GITHUB_ENV
elif [[ "${{ matrix.use_amd64ec }}" == "true" ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A ARM64EC" >> $GITHUB_ENV echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A ARM64EC" >> $GITHUB_ENV
echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV
elif [[ "${{ matrix.vsarch }}" == amd64_arm64 ]]; then true; elif [[ "${{ matrix.use_arm64x }}" == "true" ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A ARM64X" >> $GITHUB_ENV
echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV
elif [[ "${{ matrix.vsarch }}" == *amd64 ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A x64" >> $GITHUB_ENV
elif [[ "${{ matrix.vsarch }}" == *arm64 ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A ARM64" >> $GITHUB_ENV echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A ARM64" >> $GITHUB_ENV
echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV
elif [[ "${{ matrix.vsarch }}" == amd64_x86 ]]; then true; elif [[ "${{ matrix.vsarch }}" == *x86 ]]; then true;
echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A Win32" >> $GITHUB_ENV echo "UPX_CMAKE_CONFIG_FLAGS_PLATFORM=-A Win32" >> $GITHUB_ENV
else
exit 1
fi fi
- run: make build/debug - run: make build/debug
- run: make build/release - run: make build/release
- run: shopt -s globstar; ls -ld build/**/upx* || true
- run: shopt -s globstar; file build/**/upx* || true
- name: Make artifact - name: Make artifact
shell: bash
run: | run: |
N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.name }}" | sed 's/[^0-9a-zA-Z_.-]/-/g') N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.name }}" | sed 's/[^0-9a-zA-Z_.-]/-/g')
mkdir -p "tmp/artifact/$N" mkdir -p "tmp/artifact/$N"
@@ -441,55 +480,47 @@ jobs:
cmake --install build/debug --config Debug --prefix "$PWD/tmp/artifact/$N/InstallWithCMake/InstallWithPrefixAndStrip/debug" --strip cmake --install build/debug --config Debug --prefix "$PWD/tmp/artifact/$N/InstallWithCMake/InstallWithPrefixAndStrip/debug" --strip
cmake --install build/release --config Release --prefix "$PWD/tmp/artifact/$N/InstallWithCMake/InstallWithPrefixAndStrip/release" --strip cmake --install build/release --config Release --prefix "$PWD/tmp/artifact/$N/InstallWithCMake/InstallWithPrefixAndStrip/release" --strip
(cd build && cp -ai --parents */*/upx.exe "../tmp/artifact/$N") (cd build && cp -ai --parents */*/upx.exe "../tmp/artifact/$N")
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") #(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
(cd tmp/artifact && tar --sort=name --gzip -cf "$N.tar.gz" "$N" && rm -rf "./$N" && ls -la && gzip -tq "$N.tar.gz")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Run ctest tests - name: Run ctest tests
if: ${{ matrix.vsarch != 'amd64_arm64' }}
run: | run: |
ctest --test-dir build/debug --parallel 8 -C Debug ctest --test-dir build/debug --parallel 8 -C Debug
ctest --test-dir build/release --parallel 8 -C Release ctest --test-dir build/release --parallel 8 -C Release
- name: Mimic ctest tests - name: Mimic ctest tests
if: ${{ matrix.vsarch != 'amd64_arm64' }}
shell: bash
run: | run: |
env -C build/debug/Debug upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh env -C build/debug/Debug upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh
env -C build/release/Release upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh env -C build/release/Release upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh
- name: Run test suite build/release - name: Run test suite build/release
if: ${{ matrix.vsarch != 'amd64_arm64' }}
shell: bash
run: | run: |
export upx_testsuite_SRCDIR="$(readlink -en ../deps/upx-testsuite)" export upx_testsuite_SRCDIR="$(readlink -en ../deps/upx-testsuite)"
env -C build/release/Release upx_exe=./upx.exe bash "$PWD"/misc/testsuite/upx_testsuite_1.sh env -C build/release/Release upx_exe=./upx.exe bash "$PWD"/misc/testsuite/upx_testsuite_1.sh
job-windows-toolchains: # build "by hand" using cmd.exe job-windows-bh-toolchains: # build "by hand" using cmd.exe
if: github.repository_owner == 'upx' if: github.repository_owner == 'upx'
needs: [ job-rebuild-and-verify-stubs ] needs: [ job-rebuild-and-verify-stubs ]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
# { name: amd64-win64-vs2019, os: windows-2019, vsversion: 2019, vsarch: amd64 } - { name: amd64-win64-vs2025, os: windows-2025, vsversion: 2022, vsarch: amd64 }
- { name: amd64-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64 } - { name: arm64-win64-vs2025, os: windows-2025, vsversion: 2022, vsarch: amd64_arm64 }
# { name: arm64-win64-vs2019, os: windows-2019, vsversion: 2019, vsarch: amd64_arm64 } - { name: arm64ec-win64-vs2025, os: windows-2025, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64ec' }
- { name: arm64-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64 } # { name: arm64x-win64-vs2025, os: windows-2025, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64x' }
- { name: arm64ec-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64ec' } - { name: i386-win32-vs2025, os: windows-2025, vsversion: 2022, vsarch: amd64_x86 }
# { name: arm64x-win64-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_arm64, cl_machine_flags: -arm64EC, link_machine_flags: '/machine:arm64x' } name: ${{ format('windows-bh {0}', matrix.name) }}
# { name: i386-win32-vs2019, os: windows-2019, vsversion: 2019, vsarch: amd64_x86 }
- { name: i386-win32-vs2022, os: windows-2022, vsversion: 2022, vsarch: amd64_x86 }
name: ${{ format('windows {0}', matrix.name) }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
env: env:
C: ${{ matrix.name }} C: ${{ matrix.name }}
B: release B: release
steps: steps:
- run: git config --global core.autocrlf false - run: git config --global core.autocrlf false
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- name: Prepare sources and Check out test suite - name: Prepare sources and Check out test suite
shell: bash
run: | run: |
git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite git clone --depth=1 https://github.com/upx/upx-testsuite ../deps/upx-testsuite
mkdir -p -v build/$C/$B/{bzip2,ucl,upx,zlib,zstd} mkdir -p -v build/$C/$B/{bzip2,ucl,upx,zlib,zstd}
@@ -537,39 +568,25 @@ jobs:
@rem set UPX_LIBS=%BDIR%\bzip2\bzip2.lib %BDIR%\ucl\ucl.lib %BDIR%\zlib\zlib.lib %BDIR%\zstd\zstd.lib @rem set UPX_LIBS=%BDIR%\bzip2\bzip2.lib %BDIR%\ucl\ucl.lib %BDIR%\zlib\zlib.lib %BDIR%\zstd\zstd.lib
set sources=%s%\*.cpp %s%\check\*.cpp %s%\compress\*.cpp %s%\console\*.cpp %s%\filter\*.cpp %s%\util\*.cpp set sources=%s%\*.cpp %s%\check\*.cpp %s%\compress\*.cpp %s%\console\*.cpp %s%\filter\*.cpp %s%\util\*.cpp
%RUN_CL% -J -O2 -W4 -WX -std:c++17 -Zc:__cplusplus -EHsc -DUPX_VERSION_GITREV="""%GITREV%""" %DEFS% %UPX_DEFS% -I%H%\vendor -Feupx.exe %sources% %UPX_LIBS% /link ${{ matrix.link_machine_flags }} setargv.obj %RUN_CL% -J -O2 -W4 -WX -std:c++17 -Zc:__cplusplus -EHsc -DUPX_VERSION_GITREV="""%GITREV%""" %DEFS% %UPX_DEFS% -I%H%\vendor -Feupx.exe %sources% %UPX_LIBS% /link ${{ matrix.link_machine_flags }} setargv.obj
- run: shopt -s globstar; ls -ld build/**/upx* || true
- run: shopt -s globstar; file build/**/upx* || true
- name: Make artifact - name: Make artifact
shell: bash
run: | run: |
N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-windows-${{ matrix.name }}" | sed 's/[^0-9a-zA-Z_.-]/-/g') N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-windows-bh-${{ matrix.name }}" | sed 's/[^0-9a-zA-Z_.-]/-/g')
mkdir -p "tmp/artifact/$N/$B" mkdir -p "tmp/artifact/$N/$B"
cp -ai build/$C/$B/upx/upx*.exe "tmp/artifact/$N/$B" cp -ai build/$C/$B/upx/upx*.exe "tmp/artifact/$N/$B"
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") #(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
(cd tmp/artifact && tar --sort=name --gzip -cf "$N.tar.gz" "$N" && rm -rf "./$N" && ls -la && gzip -tq "$N.tar.gz")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Run basic tests
if: ${{ matrix.vsarch != 'amd64_arm64' }}
run: |
$ErrorActionPreference = 'stop'
$ErrorView = 'NormalView'
cd $Env:H\build\$Env:C\$Env:B\upx
$Env:UPX = "--no-color --no-progress"
.\upx.exe --version
.\upx.exe --sysinfo -v
.\upx.exe upx.exe -o upx_packed.exe
dir *.exe
.\upx.exe -l upx_packed.exe
.\upx.exe -t upx_packed.exe
.\upx_packed.exe --version
- name: Mimic ctest tests - name: Mimic ctest tests
if: ${{ matrix.vsarch != 'amd64_arm64' }} if: ${{ matrix.vsarch != 'amd64_arm64' }}
shell: bash
run: | run: |
env -C build/$C/$B/upx upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh env -C build/$C/$B/upx upx_exe=./upx.exe bash "$PWD"/misc/testsuite/mimic_ctest.sh
- name: Run test suite - name: Run test suite
if: ${{ matrix.vsarch != 'amd64_arm64' }} if: ${{ matrix.vsarch != 'amd64_arm64' }}
shell: bash
run: | run: |
export upx_testsuite_SRCDIR="$(readlink -en ../deps/upx-testsuite)" export upx_testsuite_SRCDIR="$(readlink -en ../deps/upx-testsuite)"
env -C build/$C/$B/upx upx_exe=./upx.exe bash "$PWD"/misc/testsuite/upx_testsuite_1.sh env -C build/$C/$B/upx upx_exe=./upx.exe bash "$PWD"/misc/testsuite/upx_testsuite_1.sh
@@ -583,18 +600,19 @@ jobs:
include: include:
# only build a few selected targets => more targets are tested in the Weekly CI # only build a few selected targets => more targets are tested in the Weekly CI
- { zig_target: aarch64-linux-musl, qemu: qemu-aarch64 } - { zig_target: aarch64-linux-musl, qemu: qemu-aarch64 }
- { zig_target: aarch64-linux-musl, qemu: qemu-aarch64, zig_pic: -fPIE } - { zig_target: aarch64-linux-musl, qemu: qemu-aarch64, zig_pic: -fPIE, container: 'alpine:3.18' }
- { zig_target: aarch64-macos.11.0-none } - { zig_target: aarch64-macos-none }
- { zig_target: aarch64-windows-gnu } - { zig_target: aarch64-windows-gnu }
- { zig_target: arm-linux-musleabihf, qemu: qemu-arm } - { zig_target: arm-linux-musleabihf, qemu: qemu-arm }
- { zig_target: armeb-linux-musleabihf, qemu: qemu-armeb } - { zig_target: armeb-linux-musleabihf, qemu: qemu-armeb }
- { zig_target: i386-linux-gnu.2.3.4, zig_flags: -march=i586 } - { zig_target: i386-linux-gnu.2.3.4, zig_flags: -march=i586 }
- { zig_target: i386-linux-gnu.2.17, zig_flags: -march=i586 } - { zig_target: i386-linux-gnu.2.17, zig_flags: -march=i586 }
- { zig_target: i386-linux-musl, zig_flags: -march=i586, qemu: qemu-i386 } - { zig_target: i386-linux-musl, zig_flags: -march=i586, qemu: qemu-i386 }
- { zig_target: i386-linux-musl, zig_flags: -march=i586, qemu: qemu-i386, zig_pic: -fPIE }
- { zig_target: i386-windows-gnu } - { zig_target: i386-windows-gnu }
- { zig_target: mips-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mips } - { zig_target: mips-linux-musleabi, qemu: qemu-mips }
- { zig_target: mips-linux-musleabihf, qemu: qemu-mips } - { zig_target: mips-linux-musleabihf, qemu: qemu-mips }
- { zig_target: mipsel-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mipsel } - { zig_target: mipsel-linux-musleabi, qemu: qemu-mipsel }
- { zig_target: mipsel-linux-musleabihf, qemu: qemu-mipsel } - { zig_target: mipsel-linux-musleabihf, qemu: qemu-mipsel }
# { zig_target: mips-linux-musleabi-mips32r2, zig_flags: -march=mips32r2, qemu: qemu-mips } # { zig_target: mips-linux-musleabi-mips32r2, zig_flags: -march=mips32r2, qemu: qemu-mips }
# { zig_target: mips-linux-musleabi-mips32r3, zig_flags: -march=mips32r3, qemu: qemu-mips } # { zig_target: mips-linux-musleabi-mips32r3, zig_flags: -march=mips32r3, qemu: qemu-mips }
@@ -605,18 +623,19 @@ jobs:
- { zig_target: powerpc64-linux-musl, qemu: qemu-ppc64, zig_pic: -fPIE } - { zig_target: powerpc64-linux-musl, qemu: qemu-ppc64, zig_pic: -fPIE }
- { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le } - { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le }
- { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le, zig_pic: -fPIE } - { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le, zig_pic: -fPIE }
- { zig_target: riscv64-linux-musl, qemu: qemu-riscv64, tt: UPX-UNSUPPORTED }
- { zig_target: riscv64-linux-musl, qemu: qemu-riscv64, tt: UPX-UNSUPPORTED, zig_pic: -fPIE }
- { zig_target: x86_64-linux-gnu.2.3.4, qemu: qemu-x86_64 } # can use QEMU because of gcompat - { zig_target: x86_64-linux-gnu.2.3.4, qemu: qemu-x86_64 } # can use QEMU because of gcompat
- { zig_target: x86_64-linux-gnu.2.17, qemu: qemu-x86_64 } # can use QEMU because of gcompat - { zig_target: x86_64-linux-gnu.2.17, qemu: qemu-x86_64 } # can use QEMU because of gcompat
- { zig_target: x86_64-linux-musl, qemu: qemu-x86_64 } - { zig_target: x86_64-linux-musl, qemu: qemu-x86_64 }
- { zig_target: x86_64-macos.11.0-none } - { zig_target: x86_64-linux-musl, qemu: qemu-x86_64, zig_pic: -fPIE, container: 'alpine:3.18' }
- { zig_target: x86_64-macos-none }
- { zig_target: x86_64-windows-gnu } - { zig_target: x86_64-windows-gnu }
name: ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }} name: ${{ format('zigcc {0} {1}', matrix.zig_target, matrix.zig_pic) }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
#container: 'alpine:3.22' container: ${{ matrix.container || 'alpine:3.22' }}
#container: ${{ contains(matrix.qemu, 'qemu-ppc64') && 'alpine:3.19' || 'alpine:3.22' }}
#container: ${{ (matrix.qemu == 'qemu-ppc64') && 'alpine:edge' || 'alpine:3.22' }}
container: ${{ (matrix.qemu == 'qemu-aarch64' && matrix.zig_pic == '-fPIE') && 'alpine:3.18' || 'alpine:3.22' }}
env: env:
container: ${{ matrix.container || 'alpine:3.22' }}
UPX_CONFIG_HAVE_WORKING_BUILD_RPATH: '' UPX_CONFIG_HAVE_WORKING_BUILD_RPATH: ''
# for zig-cc wrapper scripts (see below): # for zig-cc wrapper scripts (see below):
ZIG_CPPFLAGS: -DUPX_DOCTEST_CONFIG_MULTITHREADING ZIG_CPPFLAGS: -DUPX_DOCTEST_CONFIG_MULTITHREADING
@@ -625,19 +644,19 @@ jobs:
ZIG_TARGET: ${{ matrix.zig_target }} ZIG_TARGET: ${{ matrix.zig_target }}
steps: steps:
- run: uname -a; pwd; id; umask - run: uname -a; pwd; id; umask
- name: Install Alpine Linux container packages shell: sh
if: ${{ job.container }} - name: ${{ format('Install packages {0}', env.container) }}
shell: sh shell: sh
run: | run: |
apk update && apk upgrade && apk add bash cmake curl file gdb git make parallel patch strace tar util-linux xz zstd apk update && apk upgrade && apk add bash cmake curl dmidecode file gdb git make parallel patch strace sudo tar util-linux xz zstd
# set PATH like in Ubuntu # set PATH like in Ubuntu
echo "PATH=$HOME/.local/bin:$PATH" >> $GITHUB_ENV echo "PATH=$HOME/.local/bin:$PATH" >> $GITHUB_ENV
git config --global --add safe.directory '*' # needed when running in a container git config --global --add safe.directory '*' # needed when running in a container
mkdir -p ~/.parallel && : > ~/.parallel/$(echo 6305-4721 | tr 0-7 leticlwi) mkdir -p ~/.parallel && : > ~/.parallel/$(echo 6305-4721 | tr 0-7 leticlwi)
- uses: actions/checkout@v4 - run: (sudo dmidecode | sed -n -e '/System Information/,/^$/p') || true
- uses: actions/checkout@v6
with: { submodules: true } with: { submodules: true }
- name: ${{ format('Install Zig {0}', env.ZIG_DIST_VERSION) }} - name: ${{ format('Install Zig {0}', env.ZIG_DIST_VERSION) }}
shell: bash
run: | run: |
rev=$(git rev-parse --short=7 HEAD) rev=$(git rev-parse --short=7 HEAD)
echo "UPX_GITREV_SHORT=$rev" >> $GITHUB_ENV echo "UPX_GITREV_SHORT=$rev" >> $GITHUB_ENV
@@ -649,13 +668,16 @@ jobs:
# TODO FIXME: problem with self-packed upx and musl+gcompat: "Not a valid dynamic program" # TODO FIXME: problem with self-packed upx and musl+gcompat: "Not a valid dynamic program"
echo "UPX_CONFIG_DISABLE_RUN_PACKED_TEST=ON" >> $GITHUB_ENV echo "UPX_CONFIG_DISABLE_RUN_PACKED_TEST=ON" >> $GITHUB_ENV
fi fi
test -z "${{ matrix.tt }}" || echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV
# install zig; note that ~/.local/bin is included in the default $PATH on Ubuntu # install zig; note that ~/.local/bin is included in the default $PATH on Ubuntu
mkdir -p -v ~/.local/bin mkdir -p -v ~/.local/bin
cd ~/.local/bin cd ~/.local/bin
ZIG_DIST_VERSION=${ZIG_DIST_VERSION/#zig-/}
ZIG_DIST_NAME=zig-linux-x86_64-${ZIG_DIST_VERSION} ZIG_DIST_NAME=zig-linux-x86_64-${ZIG_DIST_VERSION}
ZIG_DIST_NAME=zig-x86_64-linux-${ZIG_DIST_VERSION} ZIG_DIST_NAME=zig-x86_64-linux-${ZIG_DIST_VERSION}
#curl -sS -L -O https://ziglang.org/builds/${ZIG_DIST_NAME}.tar.xz #curl -sS -L -O https://ziglang.org/builds/${ZIG_DIST_NAME}.tar.xz
curl -sS -L -O https://ziglang.org/download/0.14.1/${ZIG_DIST_NAME}.tar.xz #curl -sS -L -O https://ziglang.org/download/0.14.1/${ZIG_DIST_NAME}.tar.xz
curl -sS -L -O https://ziglang.org/download/0.15.2/${ZIG_DIST_NAME}.tar.xz
ls -l ${ZIG_DIST_NAME}.tar.xz ls -l ${ZIG_DIST_NAME}.tar.xz
file ${ZIG_DIST_NAME}.tar.xz || true file ${ZIG_DIST_NAME}.tar.xz || true
tar -xoJf ${ZIG_DIST_NAME}.tar.xz tar -xoJf ${ZIG_DIST_NAME}.tar.xz
@@ -665,7 +687,7 @@ jobs:
echo -n 'zig version: '; zig version echo -n 'zig version: '; zig version
# patch zig # patch zig
ls -la "$HOME" "$GITHUB_WORKSPACE" || true ls -la "$HOME" "$GITHUB_WORKSPACE" || true
#(cd ${ZIG_DIST_NAME} && patch --verbose -p1 -i "$GITHUB_WORKSPACE"/misc/patches/zig/0001-x.patch) (cd ${ZIG_DIST_NAME} && patch --verbose -p1 -i "$GITHUB_WORKSPACE"/misc/patches/zig/0001-x.patch)
# create wrapper scripts (needed for CMake) # create wrapper scripts (needed for CMake)
log= log=
log='set -x\n' log='set -x\n'
@@ -680,7 +702,7 @@ jobs:
[[ $ZIG_TARGET == mips-linux-musleabihf-* ]] && ZIG_TARGET=mips-linux-musleabihf [[ $ZIG_TARGET == mips-linux-musleabihf-* ]] && ZIG_TARGET=mips-linux-musleabihf
[[ $ZIG_TARGET == mipsel-linux-musleabi-* ]] && ZIG_TARGET=mipsel-linux-musleabi [[ $ZIG_TARGET == mipsel-linux-musleabi-* ]] && ZIG_TARGET=mipsel-linux-musleabi
[[ $ZIG_TARGET == mipsel-linux-musleabihf-* ]] && ZIG_TARGET=mipsel-linux-musleabihf [[ $ZIG_TARGET == mipsel-linux-musleabihf-* ]] && ZIG_TARGET=mipsel-linux-musleabihf
ZIG_TARGET=${ZIG_TARGET/i386-/x86-} # i386 => x86 ZIG_TARGET=${ZIG_TARGET/#i386-/x86-} # i386 => x86
echo "ZIG_TARGET=$ZIG_TARGET" >> $GITHUB_ENV echo "ZIG_TARGET=$ZIG_TARGET" >> $GITHUB_ENV
# update ZIG_FLAGS # update ZIG_FLAGS
# -fPIE is for compilation only => also use the correct linker flag "-pie" # -fPIE is for compilation only => also use the correct linker flag "-pie"
@@ -695,6 +717,11 @@ jobs:
ZIG_FLAGS="$ZIG_FLAGS -fno-sanitize=all" ZIG_FLAGS="$ZIG_FLAGS -fno-sanitize=all"
echo "UPX_CONFIG_DISABLE_SANITIZE=ON" >> $GITHUB_ENV echo "UPX_CONFIG_DISABLE_SANITIZE=ON" >> $GITHUB_ENV
fi fi
if [[ $ZIG_TARGET == *-linux-gnu.2.[456789] ]]; then true;
# glibc-2.x: ld.lld: error: undefined symbol: pwritev64
ZIG_FLAGS="$ZIG_FLAGS -fno-sanitize=all"
echo "UPX_CONFIG_DISABLE_SANITIZE=ON" >> $GITHUB_ENV
fi
echo "ZIG_FLAGS=$ZIG_FLAGS" >> $GITHUB_ENV echo "ZIG_FLAGS=$ZIG_FLAGS" >> $GITHUB_ENV
- run: set -x; zig version; zig-cc --version || true; zig-cxx --version || true - run: set -x; zig version; zig-cc --version || true; zig-cxx --version || true
- run: zig-cc -E -x c -dM /dev/null # list predefined macros for C - run: zig-cc -E -x c -dM /dev/null # list predefined macros for C
@@ -710,7 +737,6 @@ jobs:
- run: ls -l build/*/*/*/upx* || true - run: ls -l build/*/*/*/upx* || true
- run: file build/*/*/*/upx* || true - run: file build/*/*/*/upx* || true
- name: ${{ format('Make artifact from upx-{0}-{1}', github.ref_name, env.UPX_GITREV_SHORT) }} - name: ${{ format('Make artifact from upx-{0}-{1}', github.ref_name, env.UPX_GITREV_SHORT) }}
shell: bash
run: | run: |
N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-zigcc-${{ matrix.zig_target }}${ZIG_PIC}" | sed 's/[^0-9a-zA-Z_.-]/-/g') N=$(echo "upx-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-zigcc-${{ matrix.zig_target }}${ZIG_PIC}" | sed 's/[^0-9a-zA-Z_.-]/-/g')
mkdir -p "tmp/artifact/$N" mkdir -p "tmp/artifact/$N"
@@ -726,7 +752,7 @@ jobs:
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") (cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst")
echo "artifact_name=$N" >> $GITHUB_ENV echo "artifact_name=$N" >> $GITHUB_ENV
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} - name: ${{ format('Upload artifact {0}', env.artifact_name) }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v5
with: { name: '${{ env.artifact_name }}', path: tmp/artifact } with: { name: '${{ env.artifact_name }}', path: tmp/artifact }
- name: Run install tests - name: Run install tests
if: ${{ contains(matrix.zig_target, '-linux') }} if: ${{ contains(matrix.zig_target, '-linux') }}
@@ -758,7 +784,8 @@ jobs:
echo "===== parallel jobs: $jobs" echo "===== parallel jobs: $jobs"
parallel -kv --lb 'cd build/zig/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs parallel -kv --lb 'cd build/zig/{} && bash ../../../../misc/testsuite/mimic_ctest.sh' ::: $jobs
- name: Mimic ctest tests with Valgrind - name: Mimic ctest tests with Valgrind
if: ${{ matrix.zig_target == 'x86_64-linux-musl' || contains(matrix.zig_target, 'x86_64-linux-gnu.2') }} #if: ${{ matrix.zig_target == 'x86_64-linux-musl' || contains(matrix.zig_target, 'x86_64-linux-gnu.2') }}
if: false
run: | run: |
export UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS=ON # valgrind is SLOW export UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS=ON # valgrind is SLOW
apk add coreutils valgrind apk add coreutils valgrind
@@ -25,7 +25,7 @@ jobs:
issues: write issues: write
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/stale@v9 - uses: actions/stale@v10
with: with:
operations-per-run: 300 operations-per-run: 300
exempt-all-milestones: true exempt-all-milestones: true
+6 -5
View File
@@ -31,6 +31,7 @@ endif()
include("${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/functions.cmake") include("${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/functions.cmake")
upx_print_var(CMAKE_VERSION UPX_CONFIG_CMAKE_MINIMUM_REQUIRED_VERSION CMAKE_GENERATOR) upx_print_var(CMAKE_VERSION UPX_CONFIG_CMAKE_MINIMUM_REQUIRED_VERSION CMAKE_GENERATOR)
upx_print_var(CMAKE_GENERATOR_TOOLSET CMAKE_GENERATOR_PLATFORM) upx_print_var(CMAKE_GENERATOR_TOOLSET CMAKE_GENERATOR_PLATFORM)
upx_print_env_var(CC CXX CPPFLAGS CFLAGS CXXFLAGS)
#*********************************************************************** #***********************************************************************
# options # options
@@ -56,14 +57,14 @@ endif()
# test config options (see below) # test config options (see below)
# IMPORTANT NOTE: self-pack test can only work if the host executable format is supported by UPX! # IMPORTANT NOTE: self-pack test can only work if the host executable format is supported by UPX!
option(UPX_CONFIG_DISABLE_SELF_PACK_TEST "Do not test packing UPX with itself" OFF) option(UPX_CONFIG_DISABLE_SELF_PACK_TEST "Do not test packing UPX with itself." OFF)
option(UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS "Do not run exhaustive tests" OFF) option(UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS "Do not run exhaustive tests." OFF)
#*********************************************************************** #***********************************************************************
# init # init
#*********************************************************************** #***********************************************************************
set(UPX_VERSION_STRING "5.0.2") # this should match src/version.h set(UPX_VERSION_STRING "5.1.0") # this should match src/version.h
upx_cmake_include_hook(2_init) upx_cmake_include_hook(2_init)
@@ -92,7 +93,6 @@ upx_cache_bool_vars(OFF
UPX_CONFIG_DISABLE_SAVE_TEMPS UPX_CONFIG_DISABLE_SHARED_LIBS UPX_CONFIG_REQUIRE_THREADS UPX_CONFIG_DISABLE_SAVE_TEMPS UPX_CONFIG_DISABLE_SHARED_LIBS UPX_CONFIG_REQUIRE_THREADS
) )
upx_cache_bool_vars(ON UPX_CONFIG_EXPECT_THREADS) upx_cache_bool_vars(ON UPX_CONFIG_EXPECT_THREADS)
upx_print_env_var(CC CXX)
# determine Git revision # determine Git revision
set(GITREV_SHORT "") set(GITREV_SHORT "")
@@ -289,7 +289,7 @@ if(Threads_FOUND)
if(NOT result) if(NOT result)
# failed; under MinGW be sure to use the posix-threads and NOT the win32-threads version # failed; under MinGW be sure to use the posix-threads and NOT the win32-threads version
if(UPX_CONFIG_REQUIRE_THREADS OR (UPX_CONFIG_EXPECT_THREADS AND NOT UPX_CONFIG_DISABLE_THREADS)) if(UPX_CONFIG_REQUIRE_THREADS OR (UPX_CONFIG_EXPECT_THREADS AND NOT UPX_CONFIG_DISABLE_THREADS))
message(WARNING "Threads FAILED ${f}: ${output}") # output from try_compile message(WARNING "Threads FAILED ${f}: ${output}") # output from try_compile()
endif() endif()
set(Threads_FOUND OFF) set(Threads_FOUND OFF)
break() break()
@@ -469,6 +469,7 @@ if(NOT CMAKE_CROSSCOMPILING OR CMAKE_CROSSCOMPILING_EMULATOR)
# IMPORTANT NOTE: these tests can only work if the host executable format # IMPORTANT NOTE: these tests can only work if the host executable format
# is supported by UPX! # is supported by UPX!
include("${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/self_pack_test.cmake") include("${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/self_pack_test.cmake")
upx_self_pack_test()
endif() endif()
endif() endif()
+28 -9
View File
@@ -26,8 +26,13 @@ endif
.DEFAULT_GOAL = build/release .DEFAULT_GOAL = build/release
run_cmake_config = $(CMAKE) -S . -B $1 $(UPX_CMAKE_CONFIG_FLAGS) -DCMAKE_BUILD_TYPE=$2 .NOTPARALLEL: # because the actual builds use "cmake --parallel"
run_cmake_build = $(CMAKE) --build $1 $(UPX_CMAKE_BUILD_FLAGS) --config $2 .PHONY: PHONY
.SECONDEXPANSION:
.SUFFIXES:
run_cmake_config = $(CMAKE) -S . -B "$1" $(UPX_CMAKE_CONFIG_FLAGS) -DCMAKE_BUILD_TYPE="$2"
run_cmake_build = $(CMAKE) --build "$1" $(UPX_CMAKE_BUILD_FLAGS) --config "$2"
# avoid re-running run_cmake_config if .upx_cmake_config_done.txt already exists # avoid re-running run_cmake_config if .upx_cmake_config_done.txt already exists
run_config = $(if $(wildcard $1/CMakeFiles/.*_cmake_config_done.txt),,$(call run_cmake_config,$1,$2)) run_config = $(if $(wildcard $1/CMakeFiles/.*_cmake_config_done.txt),,$(call run_cmake_config,$1,$2))
run_build = $(call run_cmake_build,$1,$2) run_build = $(call run_cmake_build,$1,$2)
@@ -40,11 +45,6 @@ build/release: PHONY
$(call run_config,$@,Release) $(call run_config,$@,Release)
$(call run_build,$@,Release) $(call run_build,$@,Release)
.NOTPARALLEL: # because the actual builds use "cmake --parallel"
.PHONY: PHONY
.SECONDEXPANSION:
.SUFFIXES:
# shortcuts (all => debug + release) # shortcuts (all => debug + release)
debug: build/debug PHONY debug: build/debug PHONY
release: build/release PHONY release: build/release PHONY
@@ -72,9 +72,26 @@ all+test build/all+test: build/debug+test build/release+test PHONY
test: $$(patsubst %+test,%,$$(.DEFAULT_GOAL))+test PHONY test: $$(patsubst %+test,%,$$(.DEFAULT_GOAL))+test PHONY
# #***********************************************************************
# install
#***********************************************************************
build/debug+install: $$(dir $$@)debug PHONY; cd "$(dir $@)debug" && $(CMAKE) --install . --config Debug
build/%/debug+install: $$(dir $$@)debug PHONY; cd "$(dir $@)debug" && $(CMAKE) --install . --config Debug
build/release+install: $$(dir $$@)release PHONY; cd "$(dir $@)release" && $(CMAKE) --install . --config Release
build/%/release+install: $$(dir $$@)release PHONY; cd "$(dir $@)release" && $(CMAKE) --install . --config Release
build/%/all+install: $$(dir $$@)debug+install $$(dir $$@)release+install PHONY ;
# shortcuts
debug+install: build/debug+install PHONY
release+install: build/release+install PHONY
all+install build/all+install: build/debug+install build/release+install PHONY
install: $$(patsubst %+install,%,$$(.DEFAULT_GOAL))+install PHONY
#***********************************************************************
# END of Makefile # END of Makefile
# #***********************************************************************
# extra pre-defined build configurations and some utility; optional # extra pre-defined build configurations and some utility; optional
-include ./Makevars-local.mk -include ./Makevars-local.mk
@@ -87,3 +104,5 @@ check-whitespace clang-format run-testsuite run-testsuite-all run-testsuite-debu
$(MAKE) -C src $@ $(MAKE) -C src $@
endif endif
endif endif
# vim:set ts=8 sw=8 noet:
+3
View File
@@ -2,6 +2,9 @@
User visible changes for UPX User visible changes for UPX
================================================================== ==================================================================
Changes in 5.1.0 (XX XXX XXXX):
* bug fixes - see https://github.com/upx/upx/milestone/21
Changes in 5.0.2 (20 Jul 2025): Changes in 5.0.2 (20 Jul 2025):
* bug fixes - see https://github.com/upx/upx/milestone/20 * bug fixes - see https://github.com/upx/upx/milestone/20
+4 -3
View File
@@ -61,8 +61,9 @@ SHORT DOCUMENTATION
'upx program.exe' will compress a program or DLL. For best compression 'upx program.exe' will compress a program or DLL. For best compression
results try 'upx --best program.exe' or 'upx --brute program.exe'. results try 'upx --best program.exe' or 'upx --brute program.exe'.
Please see the file UPX.DOC for the full documentation. The files Please see the file doc/upx-doc.txt for the full documentation. The files
NEWS and BUGS also contain various tidbits of information. NEWS and doc/BUGS.txt also contain various tidbits of information, as
does the output of 'upx --help'.
THE FUTURE THE FUTURE
@@ -91,7 +92,7 @@ Copyright (C) 2000-2025 John F. Reiser
UPX is distributed with full source code under the terms of the UPX is distributed with full source code under the terms of the
GNU General Public License v2+; either under the pure GPLv2+ (see GNU General Public License v2+; either under the pure GPLv2+ (see
the file COPYING), or (at your option) under the GPLv+2 with special the file COPYING), or (at your option) under the GPLv2+ with special
exceptions and restrictions granting the free usage for all binaries exceptions and restrictions granting the free usage for all binaries
including commercial programs (see the file LICENSE). including commercial programs (see the file LICENSE).
+21 -1
View File
@@ -81,6 +81,15 @@ Developer quick start
4b) $ wget https://github.com/upx/upx-stubtools/releases/download/v20221212/bin-upx-20221212.tar.xz 4b) $ wget https://github.com/upx/upx-stubtools/releases/download/v20221212/bin-upx-20221212.tar.xz
# Extract to $HOME/bin/bin-upx or $HOME/local/bin/bin-upx. # Extract to $HOME/bin/bin-upx or $HOME/local/bin/bin-upx.
# See directions in: https://github.com/upx/upx-stubtools # See directions in: https://github.com/upx/upx-stubtools
# Some of the pre-built tools need i386 libz. On Ubuntu:
# # dpkg --add-architecture i386
# # apt-get update
# # apt-get install zlib1g-dev
# aarch64-linux-gnu/4.9.2/cc1 needs libmpfr.so.4. Make a symlink:
# # ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
4c) $ make clean; make # verify that you can re-build stubs 4c) $ make clean; make # verify that you can re-build stubs
4d) $ popd # my-upx 4d) $ popd # my-upx
5) $ cd upx # my-upx/upx 5) $ cd upx # my-upx/upx
@@ -92,7 +101,18 @@ Developer quick start
# If stuck, then reset via "rm -rf vendor; git submodule update --init". # If stuck, then reset via "rm -rf vendor; git submodule update --init".
7) $ mkdir -p build/debug build/release 7) $ mkdir -p build/debug build/release
8) $ pushd build/debug # my-upx/upx/build/debug 8) $ pushd build/debug # my-upx/upx/build/debug
9) $ cmake ../.. # configure cmake
9a) Install GNU g++ so that it is used when invoking "c++" compiler.
On Ubuntu 24.04 with
cmake: cmake version 3.28.3
g++: Ubuntu clang version 18.1.3 (1ubuntu1)
/lib/llvm-18/lib/cmake/llvm/HandleLLVMOptions.cmake:
add_flag_if_supported("-fno-lifetime-dse" CMAKE_CXX_FLAGS)
then cmake invoking c++ uses -fno-lifetime-dse but gets
c++: error: unknown argument: '-fno-lifetime-dse'
Commenting out the "add_flag_if_supported' line still uses that unknown argument.
Installing g++ avoids the problem.
9b) $ cmake ../.. # configure cmake
10) $ cmake --build . --verbose # optional "--verbose" 10) $ cmake --build . --verbose # optional "--verbose"
# This relies on stub/*.h, which YOU must re-build if necessary. # This relies on stub/*.h, which YOU must re-build if necessary.
# When in doubt, then use "cd src/stub; make clean; make". # When in doubt, then use "cd src/stub; make clean; make".
Generated
+1 -1
View File
@@ -55,7 +55,7 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "UPX 1" .IX Title "UPX 1"
.TH UPX 1 2025-07-20 "upx 5.0.2" " " .TH UPX 1 2025-10-24 "upx 5.1.0" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents. .\" way too many mistakes in technical documents.
.if n .ad l .if n .ad l
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

+1 -1
View File
@@ -42,7 +42,7 @@ function(upx_print_info)
upx_print_var(CMAKE_${lang}_COMPILER_ID) upx_print_var(CMAKE_${lang}_COMPILER_ID)
upx_print_var(CMAKE_${lang}_SIMULATE_ID) upx_print_var(CMAKE_${lang}_SIMULATE_ID)
upx_print_var(CMAKE_${lang}_COMPILER_VERSION) upx_print_var(CMAKE_${lang}_COMPILER_VERSION)
upx_print_var(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT ) upx_print_var(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT)
upx_print_var(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID) upx_print_var(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID)
upx_print_var(CMAKE_${lang}_PLATFORM_ID) upx_print_var(CMAKE_${lang}_PLATFORM_ID)
upx_print_var(CMAKE_${lang}_COMPILER_ABI) upx_print_var(CMAKE_${lang}_COMPILER_ABI)
+9 -7
View File
@@ -10,6 +10,8 @@
# is supported by UPX! # is supported by UPX!
#*********************************************************************** #***********************************************************************
function(upx_self_pack_test)
set(emu "") set(emu "")
if(DEFINED CMAKE_CROSSCOMPILING_EMULATOR) if(DEFINED CMAKE_CROSSCOMPILING_EMULATOR)
set(emu "${CMAKE_CROSSCOMPILING_EMULATOR}") set(emu "${CMAKE_CROSSCOMPILING_EMULATOR}")
@@ -138,18 +140,18 @@ if(NOT UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS)
set_tests_properties(upx-self-pack-${s} PROPERTIES COST "2${level}") set_tests_properties(upx-self-pack-${s} PROPERTIES COST "2${level}")
endif() endif()
if(NOT UPX_CONFIG_DISABLE_RUN_PACKED_TEST) if(NOT UPX_CONFIG_DISABLE_RUN_PACKED_TEST)
upx_add_test(upx-run-packed-${s} ${emu} ./upx-packed-${s}${exe} --version-short) set(i 0)
upx_test_depends(upx-run-packed-${s} upx-self-pack-${s}) while(${i} LESS 20)
math(EXPR i "${i} + 1")
upx_add_test(upx-run-packed-${s}-${i} ${emu} ./upx-packed-${s}${exe} --version-short)
upx_test_depends(upx-run-packed-${s}-${i} upx-self-pack-${s})
endwhile()
endif() endif()
endforeach() endforeach()
endforeach() endforeach()
endforeach() endforeach()
endif() # UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS endif() # UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS
# clean up endfunction()
set(emu "")
set(exe "")
set(upx_self_exe "")
set(fo "")
# vim:set ft=cmake ts=4 sw=4 tw=0 et: # vim:set ft=cmake ts=4 sw=4 tw=0 et:
+11
View File
@@ -0,0 +1,11 @@
#
# UPX "CMake" build file; see https://cmake.org/
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
#
if(NOT DEFINED USE_STRICT_DEFAULTS)
# use strict config defaults for Git developer builds
set(USE_STRICT_DEFAULTS TRUE CACHE INTERNAL "" FORCE)
endif()
# vim:set ft=cmake ts=4 sw=4 tw=0 et:
+6 -2
View File
@@ -264,7 +264,7 @@ build/analyze/clang-analyzer/%: export CCC_CXX ?= clang++
# run clang-tidy: uses file compile_commands.json from an existing clang build; # run clang-tidy: uses file compile_commands.json from an existing clang build;
# does not create any actual files, so purely PHONY # does not create any actual files, so purely PHONY
CLANG_TIDY_BUILD_BASE = build/extra/clang CLANG_TIDY_BUILD_BASE = build/extra/clang
RUN_CLANG_TIDY = time python3 ./misc/analyze/clang-tidy/run-clang-tidy.py -p $< RUN_CLANG_TIDY = time python3 ./misc/analyze/clang-tidy/run-clang-tidy.py -p "$<"
RUN_CLANG_TIDY_WERROR = $(RUN_CLANG_TIDY) '-warnings-as-errors=*' RUN_CLANG_TIDY_WERROR = $(RUN_CLANG_TIDY) '-warnings-as-errors=*'
build/analyze/clang-tidy-upx/debug build/analyze/clang-tidy-upx/release: $$(CLANG_TIDY_BUILD_BASE)/$$(notdir $$@) PHONY build/analyze/clang-tidy-upx/debug build/analyze/clang-tidy-upx/release: $$(CLANG_TIDY_BUILD_BASE)/$$(notdir $$@) PHONY
$(RUN_CLANG_TIDY_WERROR) -config-file ./.clang-tidy '/src/.*\.cpp' $(RUN_CLANG_TIDY_WERROR) -config-file ./.clang-tidy '/src/.*\.cpp'
@@ -281,6 +281,7 @@ build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/c
build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-ucl/$$(notdir $$@) build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-ucl/$$(notdir $$@)
build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-zlib/$$(notdir $$@) build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-zlib/$$(notdir $$@)
build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-zstd/$$(notdir $$@) build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: build/analyze/clang-tidy-zstd/$$(notdir $$@)
build/analyze/clang-tidy/debug build/analyze/clang-tidy/release: PHONY
# OLD names [deprecated] # OLD names [deprecated]
build/extra/scan-build/debug: build/analyze/clang-analyzer/debug PHONY build/extra/scan-build/debug: build/analyze/clang-analyzer/debug PHONY
@@ -333,6 +334,7 @@ $(call check_undefined,__add_cmake_config)
__add_cmake_config = $(and $($1),-D$1="$($1)") __add_cmake_config = $(and $($1),-D$1="$($1)")
# pass common CMake settings # pass common CMake settings
UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,CMAKE_INSTALL_PREFIX)
UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,CMAKE_VERBOSE_MAKEFILE) UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,CMAKE_VERBOSE_MAKEFILE)
# pass common CMake toolchain settings # pass common CMake toolchain settings
UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,CMAKE_ADDR2LINE) UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,CMAKE_ADDR2LINE)
@@ -376,6 +378,8 @@ UPX_CMAKE_CONFIG_FLAGS += $(call __add_cmake_config,UPX_CONFIG_EXTRA_COMPILE_OPT
SUBMODULES = doctest lzma-sdk ucl valgrind zlib SUBMODULES = doctest lzma-sdk ucl valgrind zlib
$(foreach 1,$(SUBMODULES),$(if $(wildcard vendor/$1/[CL]*),,\ $(foreach 1,$(SUBMODULES),$(if $(wildcard vendor/$1/[CL]*),,\
$(error ERROR: missing git submodule '$1'; run 'git submodule update --init'))) $(error ERROR: missing git submodule '$1'; run 'git submodule update --init')))
endif # UPX_MAKEFILE_EXTRA_MK_INCLUDED endif # UPX_MAKEFILE_EXTRA_MK_INCLUDED
# vim:set ts=8 sw=8 noet:
+2 -1
View File
@@ -11,12 +11,13 @@ diff --git a/lib/libcxx/include/__config b/lib/libcxx/include/__config
index fec323f..a16d145 100644 index fec323f..a16d145 100644
--- a/lib/libcxx/include/__config --- a/lib/libcxx/include/__config
+++ b/lib/libcxx/include/__config +++ b/lib/libcxx/include/__config
@@ -637,9 +637,11 @@ typedef __char32_t char32_t; @@ -637,9 +637,12 @@ typedef __char32_t char32_t;
# define _DECLARE_C99_LDBL_MATH 1 # define _DECLARE_C99_LDBL_MATH 1
# endif # endif
+# if defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) +# if defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION)
+# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 0 +# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 0
+# elif defined(_LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION)
// If we are getting operator new from the MSVC CRT, then allocation overloads // If we are getting operator new from the MSVC CRT, then allocation overloads
// for align_val_t were added in 19.12, aka VS 2017 version 15.3. // for align_val_t were added in 19.12, aka VS 2017 version 15.3.
-# if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912 -# if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912
+8 -6
View File
@@ -8,23 +8,25 @@ ENV LANG=C.UTF-8
RUN dpkg --add-architecture i386 \ RUN dpkg --add-architecture i386 \
&& apt-get update && apt-get upgrade -y \ && apt-get update && apt-get upgrade -y \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
aria2 bash bash-completion ca-certificates curl git less libmpc3 \ aria2 bash bash-completion ca-certificates coreutils curl diffutils findutils git grep gzip \
make ncurses-term perl-base tar time wget xz-utils \ less libmpc3 make ncurses-term perl-base python3 sed sudo tar time util-linux wget xz-utils \
libc6:i386 zlib1g:i386 \ libc6:i386 zlib1g:i386 \
# the following packages are not required for rebuilding the stubs, but # the following packages are not required for rebuilding the stubs, but
# they do make the image *much* more convenient and also allow building # they do make the image *much* more convenient and also allow building
# the full UPX binary inside the container via CMake: # the full UPX binary inside the container via CMake:
7zip bat bfs btop bubblewrap busybox bzip2 bzip3 cabextract ccache chrpath cmake cpio \ 7zip bat bfs btop bubblewrap busybox bzip2 bzip3 cabextract ccache chrpath cmake cpio \
dash diffstat direnv elfutils execstack eza fd-find file fish fzf \ dash diffstat direnv dmidecode elfutils execstack eza fd-find file fish fzf \
g++ gawk gdb gh gojq ht htop hyperfine jq ksh \ g++ gawk gdb gh gojq ht htop hyperfine jq just ksh \
lftp libzstd-dev lsb-release lsd lz4 lzip lzop minify mksh moreutils musl neovim ninja-build \ lftp libzstd-dev lsb-release lsd lz4 lzip lzop minify mksh moreutils musl neovim ninja-build \
p7zip parallel patch patchelf patchutils pax-utils proot \ p7zip parallel patch patchelf patchutils pax-utils proot \
python3 python3-pyasn1 python3-pycryptodome python3-pycurl python3-tomli python3-tomli-w \ python3-pyasn1 python3-pycryptodome python3-pycurl python3-tomli python3-tomli-w \
python3-yaml python3-zstd \ python3-yaml python3-zstd \
re2c ripgrep rsync screen socat strace universal-ctags unzip valgrind yash yq \ re2c ripgrep rsync screen socat strace universal-ctags unzip valgrind yash yq \
zip zlib1g-dev zoxide zsh zstd \ zip zlib1g-dev zoxide zsh zstd \
# extra packages for compiling with "gcc -m32" and "gcc -mx32": # extra packages for compiling with "gcc -m32" and "gcc -mx32":
g++-multilib gcc-multilib \ g++-multilib gcc-multilib \
&& apt-get install -y \
gcc-riscv64-linux-gnu \
&& true && true
# install python2-minimal packages from Debian-11; REQUIRED # install python2-minimal packages from Debian-11; REQUIRED
@@ -62,7 +64,7 @@ RUN cd /root \
# install official UPX release binaries into /usr/local/bin; not required but convenient for testing # install official UPX release binaries into /usr/local/bin; not required but convenient for testing
RUN cd /root \ RUN cd /root \
&& curl -sS -L -O https://github.com/upx/upx/releases/download/v3.91/upx-3.91-amd64_linux.tar.bz2 \ && curl -sS -L -O https://github.com/upx/upx/releases/download/v3.91/upx-3.91-amd64_linux.tar.bz2 \
&& xzversions="3.92 3.93 3.94 3.95 3.96 4.0.0 4.0.1 4.0.2 4.1.0 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 5.0.0 5.0.1" \ && xzversions="3.92 3.93 3.94 3.95 3.96 4.0.0 4.0.1 4.0.2 4.1.0 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 5.0.0 5.0.1 5.0.2" \
&& for v in $xzversions; do curl -sS -L -O https://github.com/upx/upx/releases/download/v${v}/upx-${v}-amd64_linux.tar.xz; done \ && for v in $xzversions; do curl -sS -L -O https://github.com/upx/upx/releases/download/v${v}/upx-${v}-amd64_linux.tar.xz; done \
&& for f in ./upx-*.tar.*; do tar -xoaf $f; done \ && for f in ./upx-*.tar.*; do tar -xoaf $f; done \
&& for v in 3.91 $xzversions; do d=upx-${v}-amd64_linux; ./$d/upx -qq -d $d/upx -o /usr/local/bin/upx-${v}; done \ && for v in 3.91 $xzversions; do d=upx-${v}-amd64_linux; ./$d/upx -qq -d $d/upx -o /usr/local/bin/upx-${v}; done \
+446 -389
View File
@@ -1,393 +1,432 @@
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/upx-stubtools-20240405-v1 latest e35ec64e37eb 3 minutes ago 1.62 GB
Image ID: e35ec64e37eb
Tags: [localhost/upx-stubtools-20240405-v1:latest]
Size: 1.616GB
Image Layers
├── ID: 073ec47a8c22 Size: 80.63MB Top Layer of: [docker.io/library/ubuntu:24.04]
├── ID: cc32efc504cb Size: 1.168GB
├── ID: 0ad248142047 Size: 9.477MB
├── ID: 1b5f23a7b45a Size: 457.2kB
├── ID: fde08588dc3b Size: 320.1MB
├── ID: 028612b01bc7 Size: 37.45MB
└── ID: a8359823a285 Size: 44.03kB Top Layer of: [localhost/upx-stubtools-20240405-v1:latest]
Packages: Packages:
+++-=============================-=================================-============-================================================================================ +++-===================================-=================================-============-================================================================================
Desired=Unknown/Install/Remove/Purge/Hold Desired=Unknown/Install/Remove/Purge/Hold
ii 7zip 23.01+dfsg-11 amd64 7-Zip file archiver with a high compression ratio ii 7zip 23.01+dfsg-11 amd64 7-Zip file archiver with a high compression ratio
ii apt 2.8.3 amd64 commandline package manager ii apt 2.8.3 amd64 commandline package manager
ii aria2 1.37.0+debian-1build3 amd64 High speed download utility ii aria2 1.37.0+debian-1build3 amd64 High speed download utility
ii base-files 13ubuntu10.2 amd64 Debian base system miscellaneous files ii base-files 13ubuntu10.3 amd64 Debian base system miscellaneous files
ii base-passwd 3.6.3build1 amd64 Debian base system master password and group files ii base-passwd 3.6.3build1 amd64 Debian base system master password and group files
ii bash 5.2.21-2ubuntu4 amd64 GNU Bourne Again SHell ii bash 5.2.21-2ubuntu4 amd64 GNU Bourne Again SHell
ii bash-completion 1:2.11-8 all programmable completion for the bash shell ii bash-completion 1:2.11-8 all programmable completion for the bash shell
ii bat 0.24.0-1build1 amd64 cat(1) clone with syntax highlighting and git integration ii bat 0.24.0-1build1 amd64 cat(1) clone with syntax highlighting and git integration
ii bfs 3.1.2-1build1 amd64 Breadth-first version of find(1) ii bfs 3.1.2-1build1 amd64 Breadth-first version of find(1)
ii binutils 2.42-4ubuntu2.5 amd64 GNU assembler, linker and binary utilities ii binutils 2.42-4ubuntu2.6 amd64 GNU assembler, linker and binary utilities
ii binutils-common:amd64 2.42-4ubuntu2.5 amd64 Common files for the GNU assembler, linker and binary utilities ii binutils-common:amd64 2.42-4ubuntu2.6 amd64 Common files for the GNU assembler, linker and binary utilities
ii binutils-x86-64-linux-gnu 2.42-4ubuntu2.5 amd64 GNU binary utilities, for x86-64-linux-gnu target ii binutils-riscv64-linux-gnu 2.42-4ubuntu2.6 amd64 GNU binary utilities, for riscv64-linux-gnu target
ii bsdextrautils 2.39.3-9ubuntu6.2 amd64 extra utilities from 4.4BSD-Lite ii binutils-x86-64-linux-gnu 2.42-4ubuntu2.6 amd64 GNU binary utilities, for x86-64-linux-gnu target
ii bsdutils 1:2.39.3-9ubuntu6.2 amd64 basic utilities from 4.4BSD-Lite ii bsdextrautils 2.39.3-9ubuntu6.3 amd64 extra 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 bsdutils 1:2.39.3-9ubuntu6.3 amd64 basic utilities from 4.4BSD-Lite
ii bubblewrap 0.9.0-1ubuntu0.1 amd64 utility for unprivileged chroot and namespace manipulation ii btop 1.3.0-1 amd64 Modern and colorful command line resource monitor that shows usage and stats
ii busybox 1:1.36.1-6ubuntu3.1 amd64 Tiny utilities for small and embedded systems ii bubblewrap 0.9.0-1ubuntu0.1 amd64 utility for unprivileged chroot and namespace manipulation
ii bzip2 1.0.8-5.1build0.1 amd64 high-quality block-sorting file compressor - utilities ii busybox 1:1.36.1-6ubuntu3.1 amd64 Tiny utilities for small and embedded systems
ii bzip3 1.4.0-1 amd64 better, faster and stronger spiritual successor to bzip2 - utilities ii bzip2 1.0.8-5.1build0.1 amd64 high-quality block-sorting file compressor - utilities
ii ca-certificates 20240203 all Common CA certificates ii bzip3 1.4.0-1 amd64 better, faster and stronger spiritual successor to bzip2 - utilities
ii cabextract 1.11-2 amd64 Microsoft Cabinet file unpacker ii ca-certificates 20240203 all Common CA certificates
ii ccache 4.9.1-1 amd64 Compiler cache for fast recompilation of C/C++ code ii cabextract 1.11-2 amd64 Microsoft Cabinet file unpacker
ii chrpath 0.16-2build1 amd64 Tool to edit the rpath in ELF binaries ii ccache 4.9.1-1 amd64 Compiler cache for fast recompilation of C/C++ code
ii cmake 3.28.3-1build7 amd64 cross-platform, open-source make system ii chrpath 0.16-2build1 amd64 Tool to edit the rpath in ELF binaries
ii cmake-data 3.28.3-1build7 all CMake data files (modules, templates and documentation) ii cmake 3.28.3-1build7 amd64 cross-platform, open-source make system
ii coreutils 9.4-3ubuntu6 amd64 GNU core utilities ii cmake-data 3.28.3-1build7 all CMake data files (modules, templates and documentation)
ii cpio 2.15+dfsg-1ubuntu2 amd64 GNU cpio -- a program to manage archives of files ii coreutils 9.4-3ubuntu6.1 amd64 GNU core utilities
ii cpp 4:13.2.0-7ubuntu1 amd64 GNU C preprocessor (cpp) ii cpio 2.15+dfsg-1ubuntu2 amd64 GNU cpio -- a program to manage archives of files
ii cpp-13 13.3.0-6ubuntu2~24.04 amd64 GNU C preprocessor ii cpp 4:13.2.0-7ubuntu1 amd64 GNU C preprocessor (cpp)
ii cpp-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C preprocessor for x86_64-linux-gnu ii cpp-13 13.3.0-6ubuntu2~24.04 amd64 GNU C preprocessor
ii cpp-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C preprocessor (cpp) for the amd64 architecture ii cpp-13-riscv64-linux-gnu 13.3.0-6ubuntu2~24.04cross1 amd64 GNU C preprocessor for riscv64-linux-gnu
ii curl 8.5.0-2ubuntu10.6 amd64 command line tool for transferring data with URL syntax ii cpp-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C preprocessor for x86_64-linux-gnu
ii dash 0.5.12-6ubuntu5 amd64 POSIX-compliant shell ii cpp-riscv64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C preprocessor (cpp) for the riscv64 architecture
ii debconf 1.5.86ubuntu1 all Debian configuration management system ii cpp-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C preprocessor (cpp) for the amd64 architecture
ii debianutils 5.17build1 amd64 Miscellaneous utilities specific to Debian ii curl 8.5.0-2ubuntu10.6 amd64 command line tool for transferring data with URL syntax
ii diffstat 1.66-1build1 amd64 produces graph of changes introduced by a diff file ii dash 0.5.12-6ubuntu5 amd64 POSIX-compliant shell
ii diffutils 1:3.10-1build1 amd64 File comparison utilities ii debconf 1.5.86ubuntu1 all Debian configuration management system
ii direnv 2.32.1-2ubuntu0.24.04.2 amd64 Utility to set directory specific environment variables ii debianutils 5.17build1 amd64 Miscellaneous utilities specific to Debian
ii dpkg 1.22.6ubuntu6.1 amd64 Debian package management system ii diffstat 1.66-1build1 amd64 produces graph of changes introduced by a diff file
ii e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 amd64 ext2/ext3/ext4 file system utilities ii diffutils 1:3.10-1build1 amd64 File comparison utilities
ii elfutils 0.190-1.1ubuntu0.1 amd64 collection of utilities to handle ELF objects ii direnv 2.32.1-2ubuntu0.24.04.3 amd64 Utility to set directory specific environment variables
ii execstack 0.0.20131005-1.1ubuntu1 amd64 ELF GNU_STACK program header editing utility ii dmidecode 3.5-3ubuntu0.1 amd64 SMBIOS/DMI table decoder
ii eza 0.18.2-1 amd64 Modern replacement for ls ii dpkg 1.22.6ubuntu6.5 amd64 Debian package management system
ii fd-find 9.0.0-1 amd64 Simple, fast and user-friendly alternative to find ii e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 amd64 ext2/ext3/ext4 file system utilities
ii file 1:5.45-3build1 amd64 Recognize the type of data in a file using "magic" numbers ii elfutils 0.190-1.1ubuntu0.1 amd64 collection of utilities to handle ELF objects
ii findutils 4.9.0-5build1 amd64 utilities for finding files--find, xargs ii execstack 0.0.20131005-1.1ubuntu1 amd64 ELF GNU_STACK program header editing utility
ii fish 3.7.0-1 amd64 friendly interactive shell ii eza 0.18.2-1 amd64 Modern replacement for ls
ii fish-common 3.7.0-1 all friendly interactive shell (architecture-independent files) ii fd-find 9.0.0-1 amd64 Simple, fast and user-friendly alternative to find
ii fzf 0.44.1-1ubuntu0.2 amd64 general-purpose command-line fuzzy finder ii file 1:5.45-3build1 amd64 Recognize the type of data in a file using "magic" numbers
ii g++ 4:13.2.0-7ubuntu1 amd64 GNU C++ compiler ii findutils 4.9.0-5build1 amd64 utilities for finding files--find, xargs
ii g++-13 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler ii fish 3.7.0-1 amd64 friendly interactive shell
ii g++-13-multilib 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler (multilib support) ii fish-common 3.7.0-1 all friendly interactive shell (architecture-independent files)
ii g++-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler for x86_64-linux-gnu architecture ii fzf 0.44.1-1ubuntu0.3 amd64 general-purpose command-line fuzzy finder
ii g++-multilib 4:13.2.0-7ubuntu1 amd64 GNU C++ compiler (multilib files) ii g++ 4:13.2.0-7ubuntu1 amd64 GNU C++ compiler
ii g++-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C++ compiler for the amd64 architecture ii g++-13 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler
ii gawk 1:5.2.1-2build3 amd64 GNU awk, a pattern scanning and processing language ii g++-13-multilib 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler (multilib support)
ii gcc 4:13.2.0-7ubuntu1 amd64 GNU C compiler ii g++-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C++ compiler for x86_64-linux-gnu architecture
ii gcc-13 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler ii g++-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C++ compiler for the amd64 architecture
ii gcc-13-base:amd64 13.3.0-6ubuntu2~24.04 amd64 GCC, the GNU Compiler Collection (base package) ii gawk 1:5.2.1-2build3 amd64 GNU awk, a pattern scanning and processing language
ii gcc-13-multilib 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler (multilib support) ii gcc 4:13.2.0-7ubuntu1 amd64 GNU C compiler
ii gcc-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler for the x86_64-linux-gnu architecture ii gcc-13 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler
ii gcc-14-base:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC, the GNU Compiler Collection (base package) ii gcc-13-base:amd64 13.3.0-6ubuntu2~24.04 amd64 GCC, the GNU Compiler Collection (base package)
ii gcc-14-base:i386 14.2.0-4ubuntu2~24.04 i386 GCC, the GNU Compiler Collection (base package) ii gcc-13-cross-base 13.3.0-6ubuntu2~24.04cross1 all GCC, the GNU Compiler Collection (library base package)
ii gcc-multilib 4:13.2.0-7ubuntu1 amd64 GNU C compiler (multilib files) ii gcc-13-multilib 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler (multilib support)
ii gcc-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C compiler for the amd64 architecture ii gcc-13-riscv64-linux-gnu 13.3.0-6ubuntu2~24.04cross1 amd64 GNU C compiler for the riscv64-linux-gnu architecture
ii gdb 15.0.50.20240403-0ubuntu1 amd64 GNU Debugger ii gcc-13-riscv64-linux-gnu-base:amd64 13.3.0-6ubuntu2~24.04cross1 amd64 GCC, the GNU Compiler Collection (base package)
ii gh 2.45.0-1ubuntu0.2 amd64 GitHub CLI, GitHubs official command line tool ii gcc-13-x86-64-linux-gnu 13.3.0-6ubuntu2~24.04 amd64 GNU C compiler for the x86_64-linux-gnu architecture
ii git 1:2.43.0-1ubuntu7.2 amd64 fast, scalable, distributed revision control system ii gcc-14-base:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC, the GNU Compiler Collection (base package)
ii git-man 1:2.43.0-1ubuntu7.2 all fast, scalable, distributed revision control system (manual pages) ii gcc-14-base:i386 14.2.0-4ubuntu2~24.04 i386 GCC, the GNU Compiler Collection (base package)
ii gojq 0.12.13-1ubuntu0.24.04.2 amd64 pure Go implementation of jq (program) ii gcc-14-cross-base 14.2.0-4ubuntu2~24.04cross1 all GCC, the GNU Compiler Collection (library base package)
ii gpgv 2.4.4-2ubuntu17.2 amd64 GNU privacy guard - signature verification tool ii gcc-riscv64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C compiler for the riscv64 architecture
ii grep 3.11-4build1 amd64 GNU grep, egrep and fgrep ii gcc-x86-64-linux-gnu 4:13.2.0-7ubuntu1 amd64 GNU C compiler for the amd64 architecture
ii groff-base 1.23.0-3build2 amd64 GNU troff text-formatting system (base system components) ii gdb 15.0.50.20240403-0ubuntu1 amd64 GNU Debugger
ii gzip 1.12-1ubuntu3 amd64 GNU compression utilities ii gh 2.45.0-1ubuntu0.3 amd64 GitHub CLI, GitHubs official command line tool
ii hostname 3.23+nmu2ubuntu2 amd64 utility to set/show the host name or domain name ii git 1:2.43.0-1ubuntu7.3 amd64 fast, scalable, distributed revision control system
ii ht 2.1.0+repack1-5 amd64 Viewer/editor/analyser (mostly) for executables ii git-man 1:2.43.0-1ubuntu7.3 all fast, scalable, distributed revision control system (manual pages)
ii htop 3.3.0-4build1 amd64 interactive processes viewer ii gojq 0.12.13-1ubuntu0.24.04.3 amd64 pure Go implementation of jq (program)
ii hyperfine 1.18.0-2build1 amd64 Command-line benchmarking tool ii gpgv 2.4.4-2ubuntu17.3 amd64 GNU privacy guard - signature verification tool
ii init-system-helpers 1.66ubuntu1 all helper tools for all init systems ii grep 3.11-4build1 amd64 GNU grep, egrep and fgrep
ii jq 1.7.1-3build1 amd64 lightweight and flexible command-line JSON processor ii groff-base 1.23.0-3build2 amd64 GNU troff text-formatting system (base system components)
ii ksh 20240113 all transitional package ii gzip 1.12-1ubuntu3.1 amd64 GNU compression utilities
ii ksh93u+m 1.0.8-1 amd64 AT&T KornShell ii hostname 3.23+nmu2ubuntu2 amd64 utility to set/show the host name or domain name
ii less 590-2ubuntu2.1 amd64 pager program similar to more ii ht 2.1.0+repack1-5 amd64 Viewer/editor/analyser (mostly) for executables
ii lftp 4.9.2-2ubuntu1 amd64 Sophisticated command-line FTP/HTTP/BitTorrent client programs ii htop 3.3.0-4build1 amd64 interactive processes viewer
ii lib32asan8 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector (32bit) ii hyperfine 1.18.0-2build1 amd64 Command-line benchmarking tool
ii lib32atomic1 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions (32bit) ii init-system-helpers 1.66ubuntu1 all helper tools for all init systems
ii lib32gcc-13-dev 13.3.0-6ubuntu2~24.04 amd64 GCC support library (32 bit development files) ii jq 1.7.1-3ubuntu0.24.04.1 amd64 lightweight and flexible command-line JSON processor
ii lib32gcc-s1 14.2.0-4ubuntu2~24.04 amd64 GCC support library (32 bit Version) ii just 1.21.0-1 amd64 Save and run project-specific commands
ii lib32gomp1 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library (32bit) ii ksh 20240113 all transitional package
ii lib32itm1 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library (32bit) ii ksh93u+m 1.0.8-1 amd64 AT&T KornShell
ii lib32quadmath0 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library (32bit) ii less 590-2ubuntu2.1 amd64 pager program similar to more
ii lib32stdc++-13-dev 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files) ii lftp 4.9.2-2ubuntu1.1 amd64 Sophisticated command-line FTP/HTTP/BitTorrent client programs
ii lib32stdc++6 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (32 bit Version) ii lib32asan8 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector (32bit)
ii lib32ubsan1 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (32bit) ii lib32atomic1 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions (32bit)
ii libacl1:amd64 2.3.2-1build1.1 amd64 access control list - shared library ii lib32gcc-13-dev 13.3.0-6ubuntu2~24.04 amd64 GCC support library (32 bit development files)
ii libapt-pkg6.0t64:amd64 2.8.3 amd64 package management runtime library ii lib32gcc-s1 14.2.0-4ubuntu2~24.04 amd64 GCC support library (32 bit Version)
ii libarchive13t64:amd64 3.7.2-2ubuntu0.4 amd64 Multi-format archive and compression library (shared library) ii lib32gomp1 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library (32bit)
ii libaria2-0:amd64 1.37.0+debian-1build3 amd64 C++ library interface to aria2 ii lib32itm1 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library (32bit)
ii libasan8:amd64 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector ii lib32quadmath0 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library (32bit)
ii libasm1t64:amd64 0.190-1.1ubuntu0.1 amd64 library with a programmable assembler interface ii lib32stdc++-13-dev 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files)
ii libassuan0:amd64 2.5.6-1build1 amd64 IPC library for the GnuPG components ii lib32stdc++6 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (32 bit Version)
ii libatomic1:amd64 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions ii lib32ubsan1 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (32bit)
ii libattr1:amd64 1:2.5.2-1build1.1 amd64 extended attribute handling - shared library ii libacl1:amd64 2.3.2-1build1.1 amd64 access control list - shared library
ii libaudit-common 1:3.1.2-2.1build1.1 all Dynamic library for security auditing - common files ii libapparmor1:amd64 4.0.1really4.0.1-0ubuntu0.24.04.4 amd64 changehat AppArmor library
ii libaudit1:amd64 1:3.1.2-2.1build1.1 amd64 Dynamic library for security auditing ii libapt-pkg6.0t64:amd64 2.8.3 amd64 package management runtime library
ii libbabeltrace1:amd64 1.5.11-3build3 amd64 Babeltrace conversion libraries ii libarchive13t64:amd64 3.7.2-2ubuntu0.5 amd64 Multi-format archive and compression library (shared library)
ii libbinutils:amd64 2.42-4ubuntu2.5 amd64 GNU binary utilities (private shared library) ii libaria2-0:amd64 1.37.0+debian-1build3 amd64 C++ library interface to aria2
ii libblkid1:amd64 2.39.3-9ubuntu6.2 amd64 block device ID library ii libasan8-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all AddressSanitizer -- a fast memory error detector
ii libbrotli1:amd64 1.1.0-2build2 amd64 library implementing brotli encoder and decoder (shared libraries) ii libasan8:amd64 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector
ii libbsd0:amd64 0.12.1-1build1.1 amd64 utility functions from BSD systems - shared library ii libasm1t64:amd64 0.190-1.1ubuntu0.1 amd64 library with a programmable assembler interface
ii libbz2-1.0:amd64 1.0.8-5.1build0.1 amd64 high-quality block-sorting file compressor library - runtime ii libassuan0:amd64 2.5.6-1build1 amd64 IPC library for the GnuPG components
ii libbzip3-0:amd64 1.4.0-1 amd64 better, faster and stronger spiritual successor to bzip2 - runtime ii libatomic1-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all support library providing __atomic built-in functions
ii libc-bin 2.39-0ubuntu8.4 amd64 GNU C Library: Binaries ii libatomic1:amd64 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions
ii libc-dev-bin 2.39-0ubuntu8.4 amd64 GNU C Library: Development binaries ii libattr1:amd64 1:2.5.2-1build1.1 amd64 extended attribute handling - shared library
ii libc6-dbg:amd64 2.39-0ubuntu8.4 amd64 GNU C Library: detached debugging symbols ii libaudit-common 1:3.1.2-2.1build1.1 all Dynamic library for security auditing - common files
ii libc6-dev-i386 2.39-0ubuntu8.4 amd64 GNU C Library: 32-bit development libraries for AMD64 ii libaudit1:amd64 1:3.1.2-2.1build1.1 amd64 Dynamic library for security auditing
ii libc6-dev-x32 2.39-0ubuntu8.4 amd64 GNU C Library: X32 ABI Development Libraries for AMD64 ii libbabeltrace1:amd64 1.5.11-3build3 amd64 Babeltrace conversion libraries
ii libc6-dev:amd64 2.39-0ubuntu8.4 amd64 GNU C Library: Development Libraries and Header Files ii libbinutils:amd64 2.42-4ubuntu2.6 amd64 GNU binary utilities (private shared library)
ii libc6-i386 2.39-0ubuntu8.4 amd64 GNU C Library: 32-bit shared libraries for AMD64 ii libblkid1:amd64 2.39.3-9ubuntu6.3 amd64 block device ID library
ii libc6-x32 2.39-0ubuntu8.4 amd64 GNU C Library: X32 ABI Shared libraries for AMD64 ii libbrotli1:amd64 1.1.0-2build2 amd64 library implementing brotli encoder and decoder (shared libraries)
ii libc6:amd64 2.39-0ubuntu8.4 amd64 GNU C Library: Shared libraries ii libbsd0:amd64 0.12.1-1build1.1 amd64 utility functions from BSD systems - shared library
ii libc6:i386 2.39-0ubuntu8.4 i386 GNU C Library: Shared libraries ii libbz2-1.0:amd64 1.0.8-5.1build0.1 amd64 high-quality block-sorting file compressor library - runtime
ii libcap-ng0:amd64 0.8.4-2build2 amd64 alternate POSIX capabilities library ii libbzip3-0:amd64 1.4.0-1 amd64 better, faster and stronger spiritual successor to bzip2 - runtime
ii libcap2:amd64 1:2.66-5ubuntu2.2 amd64 POSIX 1003.1e capabilities (library) ii libc-bin 2.39-0ubuntu8.6 amd64 GNU C Library: Binaries
ii libcares2:amd64 1.27.0-1.0ubuntu1 amd64 asynchronous name resolver ii libc-dev-bin 2.39-0ubuntu8.6 amd64 GNU C Library: Development binaries
ii libcc1-0:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC cc1 plugin for GDB ii libc6-dbg:amd64 2.39-0ubuntu8.6 amd64 GNU C Library: detached debugging symbols
ii libcom-err2:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 common error description library ii libc6-dev-i386 2.39-0ubuntu8.6 amd64 GNU C Library: 32-bit development libraries for AMD64
ii libcrypt-dev:amd64 1:4.4.36-4build1 amd64 libcrypt development files ii libc6-dev-riscv64-cross 2.39-0ubuntu8cross1 all GNU C Library: Development Libraries and Header Files (for cross-compiling)
ii libcrypt1:amd64 1:4.4.36-4build1 amd64 libcrypt shared library ii libc6-dev-x32 2.39-0ubuntu8.6 amd64 GNU C Library: X32 ABI Development Libraries for AMD64
ii libctf-nobfd0:amd64 2.42-4ubuntu2.5 amd64 Compact C Type Format library (runtime, no BFD dependency) ii libc6-dev:amd64 2.39-0ubuntu8.6 amd64 GNU C Library: Development Libraries and Header Files
ii libctf0:amd64 2.42-4ubuntu2.5 amd64 Compact C Type Format library (runtime, BFD dependency) ii libc6-i386 2.39-0ubuntu8.6 amd64 GNU C Library: 32-bit shared libraries for AMD64
ii libcurl3t64-gnutls:amd64 8.5.0-2ubuntu10.6 amd64 easy-to-use client-side URL transfer library (GnuTLS flavour) ii libc6-riscv64-cross 2.39-0ubuntu8cross1 all GNU C Library: Shared libraries (for cross-compiling)
ii libcurl4t64:amd64 8.5.0-2ubuntu10.6 amd64 easy-to-use client-side URL transfer library (OpenSSL flavour) ii libc6-x32 2.39-0ubuntu8.6 amd64 GNU C Library: X32 ABI Shared libraries for AMD64
ii libdb5.3t64:amd64 5.3.28+dfsg2-7 amd64 Berkeley v5.3 Database Libraries [runtime] ii libc6:amd64 2.39-0ubuntu8.6 amd64 GNU C Library: Shared libraries
ii libdebconfclient0:amd64 0.271ubuntu3 amd64 Debian Configuration Management System (C-implementation library) ii libc6:i386 2.39-0ubuntu8.6 i386 GNU C Library: Shared libraries
ii libdebuginfod-common 0.190-1.1ubuntu0.1 all configuration to enable the Debian debug info server ii libcap-ng0:amd64 0.8.4-2build2 amd64 alternate POSIX capabilities library
ii libdebuginfod1t64:amd64 0.190-1.1ubuntu0.1 amd64 library to interact with debuginfod (development files) ii libcap2:amd64 1:2.66-5ubuntu2.2 amd64 POSIX 1003.1e capabilities (library)
ii libdw1t64:amd64 0.190-1.1ubuntu0.1 amd64 library that provides access to the DWARF debug information ii libcares2:amd64 1.27.0-1.0ubuntu1 amd64 asynchronous name resolver
ii libelf1t64:amd64 0.190-1.1ubuntu0.1 amd64 library to read and write ELF files ii libcc1-0:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC cc1 plugin for GDB
ii liberror-perl 0.17029-2 all Perl module for error/exception handling in an OO-ish way ii libcom-err2:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 common error description library
ii libexpat1:amd64 2.6.1-2ubuntu0.3 amd64 XML parsing C library - runtime library ii libcrypt-dev:amd64 1:4.4.36-4build1 amd64 libcrypt development files
ii libext2fs2t64:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 ext2/ext3/ext4 file system libraries ii libcrypt1:amd64 1:4.4.36-4build1 amd64 libcrypt shared library
ii libffi8:amd64 3.4.6-1build1 amd64 Foreign Function Interface library runtime ii libctf-nobfd0:amd64 2.42-4ubuntu2.6 amd64 Compact C Type Format library (runtime, no BFD dependency)
ii libgcc-13-dev:amd64 13.3.0-6ubuntu2~24.04 amd64 GCC support library (development files) ii libctf0:amd64 2.42-4ubuntu2.6 amd64 Compact C Type Format library (runtime, BFD dependency)
ii libgcc-s1:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC support library ii libcurl3t64-gnutls:amd64 8.5.0-2ubuntu10.6 amd64 easy-to-use client-side URL transfer library (GnuTLS flavour)
ii libgcc-s1:i386 14.2.0-4ubuntu2~24.04 i386 GCC support library ii libcurl4t64:amd64 8.5.0-2ubuntu10.6 amd64 easy-to-use client-side URL transfer library (OpenSSL flavour)
ii libgcrypt20:amd64 1.10.3-2build1 amd64 LGPL Crypto library - runtime library ii libdb5.3t64:amd64 5.3.28+dfsg2-7 amd64 Berkeley v5.3 Database Libraries [runtime]
ii libgdbm-compat4t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (legacy support runtime version) ii libdebconfclient0:amd64 0.271ubuntu3 amd64 Debian Configuration Management System (C-implementation library)
ii libgdbm6t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (runtime version) ii libdebuginfod-common 0.190-1.1ubuntu0.1 all configuration to enable the Debian debug info server
ii libgit2-1.7:amd64 1.7.2+ds-1ubuntu3 amd64 low-level Git library ii libdebuginfod1t64:amd64 0.190-1.1ubuntu0.1 amd64 library to interact with debuginfod (development files)
ii libglib2.0-0t64:amd64 2.80.0-6ubuntu3.4 amd64 GLib library of C routines ii libdw1t64:amd64 0.190-1.1ubuntu0.1 amd64 library that provides access to the DWARF debug information
ii libgmp10:amd64 2:6.3.0+dfsg-2ubuntu6.1 amd64 Multiprecision arithmetic library ii libelf1t64:amd64 0.190-1.1ubuntu0.1 amd64 library to read and write ELF files
ii libgnutls30t64:amd64 3.8.3-1.1ubuntu3.3 amd64 GNU TLS library - main runtime library ii liberror-perl 0.17029-2 all Perl module for error/exception handling in an OO-ish way
ii libgomp1:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library ii libexpat1:amd64 2.6.1-2ubuntu0.3 amd64 XML parsing C library - runtime library
ii libgpg-error0:amd64 1.47-3build2.1 amd64 GnuPG development runtime library ii libext2fs2t64:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 ext2/ext3/ext4 file system libraries
ii libgprofng0:amd64 2.42-4ubuntu2.5 amd64 GNU Next Generation profiler (runtime library) ii libffi8:amd64 3.4.6-1build1 amd64 Foreign Function Interface library runtime
ii libgssapi-krb5-2:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism ii libgcc-13-dev-riscv64-cross 13.3.0-6ubuntu2~24.04cross1 all GCC support library (development files)
ii libhiredis1.1.0:amd64 1.2.0-6ubuntu3 amd64 minimalistic C client library for Redis ii libgcc-13-dev:amd64 13.3.0-6ubuntu2~24.04 amd64 GCC support library (development files)
ii libhogweed6t64:amd64 3.9.1-2.2build1.1 amd64 low level cryptographic library (public-key cryptos) ii libgcc-s1-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all GCC support library (riscv64)
ii libhttp-parser2.9:amd64 2.9.4-6build1 amd64 parser for HTTP messages written in C ii libgcc-s1:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC support library
ii libhwasan0:amd64 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector ii libgcc-s1:i386 14.2.0-4ubuntu2~24.04 i386 GCC support library
ii libicu74:amd64 74.2-1ubuntu3.1 amd64 International Components for Unicode ii libgcrypt20:amd64 1.10.3-2build1 amd64 LGPL Crypto library - runtime library
ii libidn2-0:amd64 2.3.7-2build1.1 amd64 Internationalized domain names (IDNA2008/TR46) library ii libgdbm-compat4t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (legacy support runtime version)
ii libio-pty-perl 1:1.20-1build2 amd64 Perl module for pseudo tty IO ii libgdbm6t64:amd64 1.23-5.1build1 amd64 GNU dbm database routines (runtime version)
ii libipc-run-perl 20231003.0-1 all Perl module for running processes ii libgit2-1.7:amd64 1.7.2+ds-1ubuntu3 amd64 low-level Git library
ii libipt2 2.0.6-1build1 amd64 Intel Processor Trace Decoder Library ii libglib2.0-0t64:amd64 2.80.0-6ubuntu3.4 amd64 GLib library of C routines
ii libisl23:amd64 0.26-3build1.1 amd64 manipulating sets and relations of integer points bounded by linear constraints ii libgmp10:amd64 2:6.3.0+dfsg-2ubuntu6.1 amd64 Multiprecision arithmetic library
ii libitm1:amd64 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library ii libgnutls30t64:amd64 3.8.3-1.1ubuntu3.4 amd64 GNU TLS library - main runtime library
ii libjansson4:amd64 2.14-2build2 amd64 C library for encoding, decoding and manipulating JSON data ii libgomp1-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all GCC OpenMP (GOMP) support library
ii libjq1:amd64 1.7.1-3build1 amd64 lightweight and flexible command-line JSON processor - shared library ii libgomp1:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library
ii libjsoncpp25:amd64 1.9.5-6build1 amd64 library for reading and writing JSON for C++ ii libgpg-error0:amd64 1.47-3build2.1 amd64 GnuPG development runtime library
ii libk5crypto3:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - Crypto Library ii libgprofng0:amd64 2.42-4ubuntu2.6 amd64 GNU Next Generation profiler (runtime library)
ii libkeyutils1:amd64 1.6.3-3build1 amd64 Linux Key Management Utilities (library) ii libgssapi-krb5-2:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
ii libkrb5-3:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries ii libhiredis1.1.0:amd64 1.2.0-6ubuntu3 amd64 minimalistic C client library for Redis
ii libkrb5support0:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - Support library ii libhogweed6t64:amd64 3.9.1-2.2build1.1 amd64 low level cryptographic library (public-key cryptos)
ii libldap2:amd64 2.6.7+dfsg-1~exp1ubuntu8.2 amd64 OpenLDAP libraries ii libhttp-parser2.9:amd64 2.9.4-6build1 amd64 parser for HTTP messages written in C
ii liblsan0:amd64 14.2.0-4ubuntu2~24.04 amd64 LeakSanitizer -- a memory leak detector (runtime) ii libhwasan0:amd64 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector
ii libluajit-5.1-2:amd64 2.1.0+git20231223.c525bcb+dfsg-1 amd64 Just in time compiler for Lua - library version ii libicu74:amd64 74.2-1ubuntu3.1 amd64 International Components for Unicode
ii libluajit-5.1-common 2.1.0+git20231223.c525bcb+dfsg-1 all Just in time compiler for Lua - common files ii libidn2-0:amd64 2.3.7-2build1.1 amd64 Internationalized domain names (IDNA2008/TR46) library
ii liblz4-1:amd64 1.9.4-1build1.1 amd64 Fast LZ compression algorithm library - runtime ii libio-pty-perl 1:1.20-1build2 amd64 Perl module for pseudo tty IO
ii liblzma5:amd64 5.6.1+really5.4.5-1ubuntu0.2 amd64 XZ-format compression library ii libipc-run-perl 20231003.0-1 all Perl module for running processes
ii liblzo2-2:amd64 2.10-2build4 amd64 data compression library ii libipt2 2.0.6-1build1 amd64 Intel Processor Trace Decoder Library
ii libmagic-mgc 1:5.45-3build1 amd64 File type determination library using "magic" numbers (compiled magic file) ii libisl23:amd64 0.26-3build1.1 amd64 manipulating sets and relations of integer points bounded by linear constraints
ii libmagic1t64:amd64 1:5.45-3build1 amd64 Recognize the type of data in a file using "magic" numbers - library ii libitm1-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all GNU Transactional Memory Library
ii libmd0:amd64 1.1.0-2build1.1 amd64 message digest functions from BSD systems - shared library ii libitm1:amd64 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library
ii libmount1:amd64 2.39.3-9ubuntu6.2 amd64 device mounting library ii libjansson4:amd64 2.14-2build2 amd64 C library for encoding, decoding and manipulating JSON data
ii libmpc3:amd64 1.3.1-1build1.1 amd64 multiple precision complex floating-point library ii libjq1:amd64 1.7.1-3ubuntu0.24.04.1 amd64 lightweight and flexible command-line JSON processor - shared library
ii libmpfr6:amd64 4.2.1-1build1.1 amd64 multiple precision floating-point computation ii libjsoncpp25:amd64 1.9.5-6build1 amd64 library for reading and writing JSON for C++
ii libmsgpackc2:amd64 4.0.0-3build1 amd64 binary-based efficient object serialization library ii libk5crypto3:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - Crypto Library
ii libmspack0t64:amd64 0.11-1.1build1 amd64 library for Microsoft compression formats (shared library) ii libkeyutils1:amd64 1.6.3-3build1 amd64 Linux Key Management Utilities (library)
ii libncurses6:amd64 6.4+20240113-1ubuntu2 amd64 shared libraries for terminal handling ii libkrb5-3:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries
ii libncursesw6:amd64 6.4+20240113-1ubuntu2 amd64 shared libraries for terminal handling (wide character support) ii libkrb5support0:amd64 1.20.1-6ubuntu2.6 amd64 MIT Kerberos runtime libraries - Support library
ii libnettle8t64:amd64 3.9.1-2.2build1.1 amd64 low level cryptographic library (symmetric and one-way cryptos) ii libldap2:amd64 2.6.7+dfsg-1~exp1ubuntu8.2 amd64 OpenLDAP libraries
ii libnghttp2-14:amd64 1.59.0-1ubuntu0.2 amd64 library implementing HTTP/2 protocol (shared library) ii liblsan0:amd64 14.2.0-4ubuntu2~24.04 amd64 LeakSanitizer -- a memory leak detector (runtime)
ii libnl-3-200:amd64 3.7.0-0.3build1.1 amd64 library for dealing with netlink sockets ii libluajit-5.1-2:amd64 2.1.0+git20231223.c525bcb+dfsg-1 amd64 Just in time compiler for Lua - library version
ii libnl-genl-3-200:amd64 3.7.0-0.3build1.1 amd64 library for dealing with netlink sockets - generic netlink ii libluajit-5.1-common 2.1.0+git20231223.c525bcb+dfsg-1 all Just in time compiler for Lua - common files
ii libnpth0t64:amd64 1.6-3.1build1 amd64 replacement for GNU Pth using system threads ii liblz4-1:amd64 1.9.4-1build1.1 amd64 Fast LZ compression algorithm library - runtime
ii libonig5:amd64 6.9.9-1build1 amd64 regular expressions library ii liblzma5:amd64 5.6.1+really5.4.5-1ubuntu0.2 amd64 XZ-format compression library
ii libp11-kit0:amd64 0.25.3-4ubuntu2.1 amd64 library for loading and coordinating access to PKCS#11 modules - runtime ii liblzo2-2:amd64 2.10-2build4 amd64 data compression library
ii libpam-modules-bin 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules for PAM - helper binaries ii libmagic-mgc 1:5.45-3build1 amd64 File type determination library using "magic" numbers (compiled magic file)
ii libpam-modules:amd64 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules for PAM ii libmagic1t64:amd64 1:5.45-3build1 amd64 Recognize the type of data in a file using "magic" numbers - library
ii libpam-runtime 1.5.3-5ubuntu5.1 all Runtime support for the PAM library ii libmd0:amd64 1.1.0-2build1.1 amd64 message digest functions from BSD systems - shared library
ii libpam0g:amd64 1.5.3-5ubuntu5.1 amd64 Pluggable Authentication Modules library ii libmount1:amd64 2.39.3-9ubuntu6.3 amd64 device mounting library
ii libpcre2-32-0:amd64 10.42-4ubuntu2.1 amd64 New Perl Compatible Regular Expression Library - 32 bit runtime files ii libmpc3:amd64 1.3.1-1build1.1 amd64 multiple precision complex floating-point library
ii libpcre2-8-0:amd64 10.42-4ubuntu2.1 amd64 New Perl Compatible Regular Expression Library- 8 bit runtime files ii libmpfr6:amd64 4.2.1-1build1.1 amd64 multiple precision floating-point computation
ii libperl5.38t64:amd64 5.38.2-3.2ubuntu0.1 amd64 shared Perl library ii libmsgpackc2:amd64 4.0.0-3build1 amd64 binary-based efficient object serialization library
ii libpipeline1:amd64 1.5.7-2 amd64 Unix process pipeline manipulation library ii libmspack0t64:amd64 0.11-1.1build1 amd64 library for Microsoft compression formats (shared library)
ii libpopt0:amd64 1.19+dfsg-1build1 amd64 lib for parsing cmdline parameters ii libncurses6:amd64 6.4+20240113-1ubuntu2 amd64 shared libraries for terminal handling
ii libproc2-0:amd64 2:4.0.4-4ubuntu3.2 amd64 library for accessing process information from /proc ii libncursesw6:amd64 6.4+20240113-1ubuntu2 amd64 shared libraries for terminal handling (wide character support)
ii libpsl5t64:amd64 0.21.2-1.1build1 amd64 Library for Public Suffix List (shared libraries) ii libnettle8t64:amd64 3.9.1-2.2build1.1 amd64 low level cryptographic library (symmetric and one-way cryptos)
ii libpython2.7-minimal:amd64 2.7.18-8+deb11u1 amd64 Minimal subset of the Python language (version 2.7) ii libnghttp2-14:amd64 1.59.0-1ubuntu0.2 amd64 library implementing HTTP/2 protocol (shared library)
ii libpython3-stdlib:amd64 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii libnl-3-200:amd64 3.7.0-0.3build1.1 amd64 library for dealing with netlink sockets
ii libpython3.12-minimal:amd64 3.12.3-1ubuntu0.5 amd64 Minimal subset of the Python language (version 3.12) ii libnl-genl-3-200:amd64 3.7.0-0.3build1.1 amd64 library for dealing with netlink sockets - generic netlink
ii libpython3.12-stdlib:amd64 3.12.3-1ubuntu0.5 amd64 Interactive high-level object-oriented language (standard library, version 3.12) ii libnpth0t64:amd64 1.6-3.1build1 amd64 replacement for GNU Pth using system threads
ii libpython3.12t64:amd64 3.12.3-1ubuntu0.5 amd64 Shared Python runtime library (version 3.12) ii libonig5:amd64 6.9.9-1build1 amd64 regular expressions library
ii libquadmath0:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library ii libp11-kit0:amd64 0.25.3-4ubuntu2.1 amd64 library for loading and coordinating access to PKCS#11 modules - runtime
ii libreadline8t64:amd64 8.2-4build1 amd64 GNU readline and history libraries, run-time libraries ii libpam-modules-bin 1.5.3-5ubuntu5.5 amd64 Pluggable Authentication Modules for PAM - helper binaries
ii librhash0:amd64 1.4.3-3build1 amd64 shared library for hash functions computing ii libpam-modules:amd64 1.5.3-5ubuntu5.5 amd64 Pluggable Authentication Modules for PAM
ii librtmp1:amd64 2.4+20151223.gitfa8646d.1-2build7 amd64 toolkit for RTMP streams (shared library) ii libpam-runtime 1.5.3-5ubuntu5.5 all Runtime support for the PAM library
ii libsasl2-2:amd64 2.1.28+dfsg1-5ubuntu3.1 amd64 Cyrus SASL - authentication abstraction library ii libpam0g:amd64 1.5.3-5ubuntu5.5 amd64 Pluggable Authentication Modules library
ii libsasl2-modules-db:amd64 2.1.28+dfsg1-5ubuntu3.1 amd64 Cyrus SASL - pluggable authentication modules (DB) ii libpcre2-32-0:amd64 10.42-4ubuntu2.1 amd64 New Perl Compatible Regular Expression Library - 32 bit runtime files
ii libseccomp2:amd64 2.5.5-1ubuntu3.1 amd64 high level interface to Linux seccomp filter ii libpcre2-8-0:amd64 10.42-4ubuntu2.1 amd64 New Perl Compatible Regular Expression Library- 8 bit runtime files
ii libselinux1:amd64 3.5-2ubuntu2.1 amd64 SELinux runtime shared libraries ii libperl5.38t64:amd64 5.38.2-3.2ubuntu0.2 amd64 shared Perl library
ii libsemanage-common 3.5-1build5 all Common files for SELinux policy management libraries ii libpipeline1:amd64 1.5.7-2 amd64 Unix process pipeline manipulation library
ii libsemanage2:amd64 3.5-1build5 amd64 SELinux policy management library ii libpopt0:amd64 1.19+dfsg-1build1 amd64 lib for parsing cmdline parameters
ii libsensors-config 1:3.6.0-9build1 all lm-sensors configuration files ii libproc2-0:amd64 2:4.0.4-4ubuntu3.2 amd64 library for accessing process information from /proc
ii libsensors5:amd64 1:3.6.0-9build1 amd64 library to read temperature/voltage/fan sensors ii libpsl5t64:amd64 0.21.2-1.1build1 amd64 Library for Public Suffix List (shared libraries)
ii libsepol2:amd64 3.5-2build1 amd64 SELinux library for manipulating binary security policies ii libpython2.7-minimal:amd64 2.7.18-8+deb11u1 amd64 Minimal subset of the Python language (version 2.7)
ii libsframe1:amd64 2.42-4ubuntu2.5 amd64 Library to handle the SFrame format (runtime library) ii libpython3-stdlib:amd64 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
ii libsigsegv2:amd64 2.14-1ubuntu2 amd64 Library for handling page faults in a portable way ii libpython3.12-minimal:amd64 3.12.3-1ubuntu0.8 amd64 Minimal subset of the Python language (version 3.12)
ii libsmartcols1:amd64 2.39.3-9ubuntu6.2 amd64 smart column output alignment library ii libpython3.12-stdlib:amd64 3.12.3-1ubuntu0.8 amd64 Interactive high-level object-oriented language (standard library, version 3.12)
ii libsource-highlight-common 3.1.9-4.3build1 all architecture-independent files for source highlighting library ii libpython3.12t64:amd64 3.12.3-1ubuntu0.8 amd64 Shared Python runtime library (version 3.12)
ii libsource-highlight4t64:amd64 3.1.9-4.3build1 amd64 source highlighting library ii libquadmath0:amd64 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library
ii libsqlite3-0:amd64 3.45.1-1ubuntu2.3 amd64 SQLite 3 shared library ii libreadline8t64:amd64 8.2-4build1 amd64 GNU readline and history libraries, run-time libraries
ii libss2:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 command-line interface parsing library ii librhash0:amd64 1.4.3-3build1 amd64 shared library for hash functions computing
ii libssh-4:amd64 0.10.6-2build2 amd64 tiny C SSH library (OpenSSL flavor) ii librtmp1:amd64 2.4+20151223.gitfa8646d.1-2build7 amd64 toolkit for RTMP streams (shared library)
ii libssh2-1t64:amd64 1.11.0-4.1build2 amd64 SSH2 client-side library ii libsasl2-2:amd64 2.1.28+dfsg1-5ubuntu3.1 amd64 Cyrus SASL - authentication abstraction library
ii libssl3t64:amd64 3.0.13-0ubuntu3.5 amd64 Secure Sockets Layer toolkit - shared libraries ii libsasl2-modules-db:amd64 2.1.28+dfsg1-5ubuntu3.1 amd64 Cyrus SASL - pluggable authentication modules (DB)
ii libstdc++-13-dev:amd64 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files) ii libseccomp2:amd64 2.5.5-1ubuntu3.1 amd64 high level interface to Linux seccomp filter
ii libstdc++6:amd64 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3 ii libselinux1:amd64 3.5-2ubuntu2.1 amd64 SELinux runtime shared libraries
ii libsystemd0:amd64 255.4-1ubuntu8.6 amd64 systemd utility library ii libsemanage-common 3.5-1build5 all Common files for SELinux policy management libraries
ii libtalloc2:amd64 2.4.2-1build2 amd64 hierarchical pool based memory allocator ii libsemanage2:amd64 3.5-1build5 amd64 SELinux policy management library
ii libtasn1-6:amd64 4.19.0-3ubuntu0.24.04.1 amd64 Manage ASN.1 structures (runtime) ii libsensors-config 1:3.6.0-9build1 all lm-sensors configuration files
ii libtermkey1:amd64 0.22-1 amd64 library for processing keyboard input ii libsensors5:amd64 1:3.6.0-9build1 amd64 library to read temperature/voltage/fan sensors
ii libtime-duration-perl 1.21-2 all module for rounded or exact English expression of durations ii libsepol2:amd64 3.5-2build1 amd64 SELinux library for manipulating binary security policies
ii libtimedate-perl 2.3300-2 all collection of modules to manipulate date/time information ii libsframe1:amd64 2.42-4ubuntu2.6 amd64 Library to handle the SFrame format (runtime library)
ii libtinfo6:amd64 6.4+20240113-1ubuntu2 amd64 shared low-level terminfo library for terminal handling ii libsigsegv2:amd64 2.14-1ubuntu2 amd64 Library for handling page faults in a portable way
ii libtree-sitter0:amd64 0.20.8-2 amd64 incremental parsing system for programming tools ii libsmartcols1:amd64 2.39.3-9ubuntu6.3 amd64 smart column output alignment library
ii libtsan2:amd64 14.2.0-4ubuntu2~24.04 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime) ii libsource-highlight-common 3.1.9-4.3build1 all architecture-independent files for source highlighting library
ii libubsan1:amd64 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (runtime) ii libsource-highlight4t64:amd64 3.1.9-4.3build1 amd64 source highlighting library
ii libuchardet0:amd64 0.0.8-1build1 amd64 universal charset detection library - shared library ii libsqlite3-0:amd64 3.45.1-1ubuntu2.5 amd64 SQLite 3 shared library
ii libudev1:amd64 255.4-1ubuntu8.6 amd64 libudev shared library ii libss2:amd64 1.47.0-2.4~exp1ubuntu4.1 amd64 command-line interface parsing library
ii libunibilium4:amd64 2.1.0-3 amd64 simple, self-contained terminfo library ii libssh-4:amd64 0.10.6-2ubuntu0.2 amd64 tiny C SSH library (OpenSSL flavor)
ii libunistring5:amd64 1.1-2build1.1 amd64 Unicode string library for C ii libssh2-1t64:amd64 1.11.0-4.1build2 amd64 SSH2 client-side library
ii libunwind8:amd64 1.6.2-3build1.1 amd64 library to determine the call-chain of a program - runtime ii libssl3t64:amd64 3.0.13-0ubuntu3.6 amd64 Secure Sockets Layer toolkit - shared libraries
ii liburing2:amd64 2.5-1build1 amd64 Linux kernel io_uring access library - shared library ii libstdc++-13-dev:amd64 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files)
ii libutempter0:amd64 1.2.1-3build1 amd64 privileged helper for utmp/wtmp updates (runtime) ii libstdc++6-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all GNU Standard C++ Library v3 (riscv64)
ii libuuid1:amd64 2.39.3-9ubuntu6.2 amd64 Universally Unique ID library ii libstdc++6:amd64 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3
ii libuv1t64:amd64 1.48.0-1.1build1 amd64 asynchronous event notification library - runtime library ii libsystemd0:amd64 255.4-1ubuntu8.11 amd64 systemd utility library
ii libvterm0:amd64 0.3.3-2build1 amd64 abstract terminal library ii libtalloc2:amd64 2.4.2-1build2 amd64 hierarchical pool based memory allocator
ii libwrap0:amd64 7.6.q-33 amd64 Wietse Venema's TCP wrappers library ii libtasn1-6:amd64 4.19.0-3ubuntu0.24.04.1 amd64 Manage ASN.1 structures (runtime)
ii libx11-6:amd64 2:1.8.7-1build1 amd64 X11 client-side library ii libtermkey1:amd64 0.22-1 amd64 library for processing keyboard input
ii libx11-data 2:1.8.7-1build1 all X11 client-side library ii libtime-duration-perl 1.21-2 all module for rounded or exact English expression of durations
ii libx32asan8 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector (x32) ii libtimedate-perl 2.3300-2 all collection of modules to manipulate date/time information
ii libx32atomic1 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions (x32) ii libtinfo6:amd64 6.4+20240113-1ubuntu2 amd64 shared low-level terminfo library for terminal handling
ii libx32gcc-13-dev 13.3.0-6ubuntu2~24.04 amd64 GCC support library (x32 development files) ii libtree-sitter0:amd64 0.20.8-2 amd64 incremental parsing system for programming tools
ii libx32gcc-s1 14.2.0-4ubuntu2~24.04 amd64 GCC support library (x32) ii libtsan2:amd64 14.2.0-4ubuntu2~24.04 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime)
ii libx32gomp1 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library (x32) ii libubsan1-riscv64-cross 14.2.0-4ubuntu2~24.04cross1 all UBSan -- undefined behaviour sanitizer (runtime)
ii libx32itm1 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library (x32) ii libubsan1:amd64 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (runtime)
ii libx32quadmath0 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library (x32) ii libuchardet0:amd64 0.0.8-1build1 amd64 universal charset detection library - shared library
ii libx32stdc++-13-dev 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files) ii libudev1:amd64 255.4-1ubuntu8.11 amd64 libudev shared library
ii libx32stdc++6 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (x32) ii libunibilium4:amd64 2.1.0-3 amd64 simple, self-contained terminfo library
ii libx32ubsan1 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (x32) ii libunistring5:amd64 1.1-2build1.1 amd64 Unicode string library for C
ii libxau6:amd64 1:1.0.9-1build6 amd64 X11 authorisation library ii libunwind8:amd64 1.6.2-3build1.1 amd64 library to determine the call-chain of a program - runtime
ii libxcb1:amd64 1.15-1ubuntu2 amd64 X C Binding ii liburing2:amd64 2.5-1build1 amd64 Linux kernel io_uring access library - shared library
ii libxdmcp6:amd64 1:1.1.3-0ubuntu6 amd64 X11 Display Manager Control Protocol library ii libutempter0:amd64 1.2.1-3build1 amd64 privileged helper for utmp/wtmp updates (runtime)
ii libxml2:amd64 2.9.14+dfsg-1.3ubuntu3.3 amd64 GNOME XML library ii libuuid1:amd64 2.39.3-9ubuntu6.3 amd64 Universally Unique ID library
ii libxxhash0:amd64 0.8.2-2build1 amd64 shared library for xxhash ii libuv1t64:amd64 1.48.0-1.1build1 amd64 asynchronous event notification library - runtime library
ii libyaml-0-2:amd64 0.2.5-1build1 amd64 Fast YAML 1.1 parser and emitter library ii libvterm0:amd64 0.3.3-2build1 amd64 abstract terminal library
ii libzstd-dev:amd64 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm -- development files ii libwrap0:amd64 7.6.q-33 amd64 Wietse Venema's TCP wrappers library
ii libzstd1:amd64 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm ii libx11-6:amd64 2:1.8.7-1build1 amd64 X11 client-side library
ii linux-libc-dev:amd64 6.8.0-60.63 amd64 Linux Kernel Headers for development ii libx11-data 2:1.8.7-1build1 all X11 client-side library
ii login 1:4.13+dfsg1-4ubuntu3.2 amd64 system login tools ii libx32asan8 14.2.0-4ubuntu2~24.04 amd64 AddressSanitizer -- a fast memory error detector (x32)
ii logsave 1.47.0-2.4~exp1ubuntu4.1 amd64 save the output of a command in a log file ii libx32atomic1 14.2.0-4ubuntu2~24.04 amd64 support library providing __atomic built-in functions (x32)
ii lsb-release 12.0-2 all Linux Standard Base version reporting utility (minimal implementation) ii libx32gcc-13-dev 13.3.0-6ubuntu2~24.04 amd64 GCC support library (x32 development files)
ii lsd 1.0.0-2 amd64 ls command with a lot of pretty colors and some other stuff ii libx32gcc-s1 14.2.0-4ubuntu2~24.04 amd64 GCC support library (x32)
ii lua-luv:amd64 1.48.0-2-2build1 amd64 libuv bindings for Lua ii libx32gomp1 14.2.0-4ubuntu2~24.04 amd64 GCC OpenMP (GOMP) support library (x32)
ii lz4 1.9.4-1build1.1 amd64 Fast LZ compression algorithm library - tool ii libx32itm1 14.2.0-4ubuntu2~24.04 amd64 GNU Transactional Memory Library (x32)
ii lzip 1.24.1-1build1 amd64 lossless data compressor based on the LZMA algorithm ii libx32quadmath0 14.2.0-4ubuntu2~24.04 amd64 GCC Quad-Precision Math Library (x32)
ii lzop 1.04-2build3 amd64 fast compression program ii libx32stdc++-13-dev 13.3.0-6ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (development files)
ii make 4.3-4.1build2 amd64 utility for directing compilation ii libx32stdc++6 14.2.0-4ubuntu2~24.04 amd64 GNU Standard C++ Library v3 (x32)
ii man-db 2.12.0-4build2 amd64 tools for reading manual pages ii libx32ubsan1 14.2.0-4ubuntu2~24.04 amd64 UBSan -- undefined behaviour sanitizer (x32)
ii mawk 1.3.4.20240123-1build1 amd64 Pattern scanning and text processing language ii libxau6:amd64 1:1.0.9-1build6 amd64 X11 authorisation library
ii media-types 10.1.0 all List of standard media types and their usual file extension ii libxcb1:amd64 1.15-1ubuntu2 amd64 X C Binding
ii minify 2.20.17-1 amd64 CLI implementation of the Go minify library package ii libxdmcp6:amd64 1:1.1.3-0ubuntu6 amd64 X11 Display Manager Control Protocol library
ii mksh 59c-37 amd64 MirBSD Korn Shell ii libxml2:amd64 2.9.14+dfsg-1.3ubuntu3.6 amd64 GNOME XML library
ii moreutils 0.69-1 amd64 additional Unix utilities ii libxxhash0:amd64 0.8.2-2build1 amd64 shared library for xxhash
ii mount 2.39.3-9ubuntu6.2 amd64 tools for mounting and manipulating filesystems ii libyaml-0-2:amd64 0.2.5-1build1 amd64 Fast YAML 1.1 parser and emitter library
ii musl:amd64 1.2.4-2 amd64 standard C library ii libzstd-dev:amd64 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm -- development files
ii ncurses-base 6.4+20240113-1ubuntu2 all basic terminal type definitions ii libzstd1:amd64 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm
ii ncurses-bin 6.4+20240113-1ubuntu2 amd64 terminal-related programs and man pages ii linux-libc-dev-riscv64-cross 6.8.0-25.25cross1 all Linux Kernel Headers for development (for cross-compiling)
ii ncurses-term 6.4+20240113-1ubuntu2 all additional terminal type definitions ii linux-libc-dev:amd64 6.8.0-87.88 amd64 Linux Kernel Headers for development
ii neovim 0.9.5-6ubuntu2 amd64 heavily refactored vim fork ii login 1:4.13+dfsg1-4ubuntu3.2 amd64 system login tools
ii neovim-runtime 0.9.5-6ubuntu2 all heavily refactored vim fork (runtime files) ii logsave 1.47.0-2.4~exp1ubuntu4.1 amd64 save the output of a command in a log file
ii netbase 6.4 all Basic TCP/IP networking system ii lsb-release 12.0-2 all Linux Standard Base version reporting utility (minimal implementation)
ii ninja-build 1.11.1-2 amd64 small build system closest in spirit to Make ii lsd 1.0.0-2 amd64 ls command with a lot of pretty colors and some other stuff
ii openssl 3.0.13-0ubuntu3.5 amd64 Secure Sockets Layer toolkit - cryptographic utility ii lua-luv:amd64 1.48.0-2-2build1 amd64 libuv bindings for Lua
ii p7zip 16.02+transitional.1 all transitional package ii lz4 1.9.4-1build1.1 amd64 Fast LZ compression algorithm library - tool
ii parallel 20231122+ds-1 all build and execute command lines from standard input in parallel ii lzip 1.24.1-1build1 amd64 lossless data compressor based on the LZMA algorithm
ii passwd 1:4.13+dfsg1-4ubuntu3.2 amd64 change and administer password and group data ii lzop 1.04-2build3 amd64 fast compression program
ii patch 2.7.6-7build3 amd64 Apply a diff file to an original ii make 4.3-4.1build2 amd64 utility for directing compilation
ii patchelf 0.18.0-1.1build1 amd64 modify properties of ELF executables ii man-db 2.12.0-4build2 amd64 tools for reading manual pages
ii patchutils 0.4.2-1build3 amd64 Utilities to work with patches ii mawk 1.3.4.20240123-1build1 amd64 Pattern scanning and text processing language
ii pax-utils 1.3.7-1 amd64 Security-focused ELF files checking tool ii media-types 10.1.0 all List of standard media types and their usual file extension
ii perl 5.38.2-3.2ubuntu0.1 amd64 Larry Wall's Practical Extraction and Report Language ii minify 2.20.17-1 amd64 CLI implementation of the Go minify library package
ii perl-base 5.38.2-3.2ubuntu0.1 amd64 minimal Perl system ii mksh 59c-37 amd64 MirBSD Korn Shell
ii perl-modules-5.38 5.38.2-3.2ubuntu0.1 all Core Perl modules ii moreutils 0.69-1 amd64 additional Unix utilities
ii procps 2:4.0.4-4ubuntu3.2 amd64 /proc file system utilities ii mount 2.39.3-9ubuntu6.3 amd64 tools for mounting and manipulating filesystems
ii proot 5.1.0-1.3 amd64 emulate chroot, bind mount and binfmt_misc for non-root users ii musl:amd64 1.2.4-2 amd64 standard C library
ii python2.7-minimal 2.7.18-8+deb11u1 amd64 Minimal subset of the Python language (version 2.7) ii ncurses-base 6.4+20240113-1ubuntu2 all basic terminal type definitions
ii python3 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii ncurses-bin 6.4+20240113-1ubuntu2 amd64 terminal-related programs and man pages
ii python3-argcomplete 3.1.4-1ubuntu0.1 all bash tab completion for argparse (for Python 3) ii ncurses-term 6.4+20240113-1ubuntu2 all additional terminal type definitions
ii python3-minimal 3.12.3-0ubuntu2 amd64 minimal subset of the Python language (default python3 version) ii neovim 0.9.5-6ubuntu2 amd64 heavily refactored vim fork
ii python3-pyasn1 0.4.8-4 all ASN.1 library for Python (Python 3 module) ii neovim-runtime 0.9.5-6ubuntu2 all heavily refactored vim fork (runtime files)
ii python3-pycryptodome 3.20.0+dfsg-1 amd64 cryptographic Python library (Python 3) ii netbase 6.4 all Basic TCP/IP networking system
ii python3-pycurl 7.45.3-1build2 amd64 Python bindings to libcurl (Python 3) ii ninja-build 1.11.1-2 amd64 small build system closest in spirit to Make
ii python3-pyelftools 0.30-1 all pure-python3 library for parsing ELF and DWARF ii openssl 3.0.13-0ubuntu3.6 amd64 Secure Sockets Layer toolkit - cryptographic utility
ii python3-toml 0.10.2-1 all library for Tom's Obvious, Minimal Language - Python 3.x ii p7zip 16.02+transitional.1 all transitional package
ii python3-tomli 2.0.1-2 all lil' TOML parser for Python ii parallel 20231122+ds-1 all build and execute command lines from standard input in parallel
ii python3-tomli-w 1.0.0-2 all lil' TOML writer for Python ii passwd 1:4.13+dfsg1-4ubuntu3.2 amd64 change and administer password and group data
ii python3-xmltodict 0.13.0-1 all Makes working with XML feel like you are working with JSON (Python 3) ii patch 2.7.6-7build3 amd64 Apply a diff file to an original
ii python3-yaml 6.0.1-2build2 amd64 YAML parser and emitter for Python3 ii patchelf 0.18.0-1.1build1 amd64 modify properties of ELF executables
ii python3-zstd 1.5.5.1-1build1 amd64 python bindings to Yann Collet ZSTD compression library ii patchutils 0.4.2-1build3 amd64 Utilities to work with patches
ii python3.12 3.12.3-1ubuntu0.5 amd64 Interactive high-level object-oriented language (version 3.12) ii pax-utils 1.3.7-1 amd64 Security-focused ELF files checking tool
ii python3.12-minimal 3.12.3-1ubuntu0.5 amd64 Minimal subset of the Python language (version 3.12) ii perl 5.38.2-3.2ubuntu0.2 amd64 Larry Wall's Practical Extraction and Report Language
ii re2c 3.1-1build1 amd64 lexer generator for C, C++, Go and Rust ii perl-base 5.38.2-3.2ubuntu0.2 amd64 minimal Perl system
ii readline-common 8.2-4build1 all GNU readline and history libraries, common files ii perl-modules-5.38 5.38.2-3.2ubuntu0.2 all Core Perl modules
ii ripgrep 14.1.0-1 amd64 Recursively searches directories for a regex pattern ii procps 2:4.0.4-4ubuntu3.2 amd64 /proc file system utilities
ii rpcsvc-proto 1.4.2-0ubuntu7 amd64 RPC protocol compiler and definitions ii proot 5.1.0-1.3 amd64 emulate chroot, bind mount and binfmt_misc for non-root users
ii rsync 3.2.7-1ubuntu1.2 amd64 fast, versatile, remote (and local) file-copying tool ii python2.7-minimal 2.7.18-8+deb11u1 amd64 Minimal subset of the Python language (version 2.7)
ii screen 4.9.1-1build1 amd64 terminal multiplexer with VT100/ANSI terminal emulation ii python3 3.12.3-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
ii sed 4.9-2build1 amd64 GNU stream editor for filtering/transforming text ii python3-argcomplete 3.1.4-1ubuntu0.1 all bash tab completion for argparse (for Python 3)
ii sensible-utils 0.0.22 all Utilities for sensible alternative selection ii python3-minimal 3.12.3-0ubuntu2 amd64 minimal subset of the Python language (default python3 version)
ii socat 1.8.0.0-4build3 amd64 multipurpose relay for bidirectional data transfer ii python3-pyasn1 0.4.8-4 all ASN.1 library for Python (Python 3 module)
ii strace 6.8-0ubuntu2 amd64 System call tracer ii python3-pycryptodome 3.20.0+dfsg-1 amd64 cryptographic Python library (Python 3)
ii sysstat 12.6.1-2 amd64 system performance tools for Linux ii python3-pycurl 7.45.3-1build2 amd64 Python bindings to libcurl (Python 3)
ii sysvinit-utils 3.08-6ubuntu3 amd64 System-V-like utilities ii python3-pyelftools 0.30-1 all pure-python3 library for parsing ELF and DWARF
ii tar 1.35+dfsg-3build1 amd64 GNU version of the tar archiving utility ii python3-toml 0.10.2-1 all library for Tom's Obvious, Minimal Language - Python 3.x
ii time 1.9-0.2build1 amd64 GNU time program for measuring CPU resource usage ii python3-tomli 2.0.1-2 all lil' TOML parser for Python
ii tzdata 2025b-0ubuntu0.24.04.1 all time zone and daylight-saving time data ii python3-tomli-w 1.0.0-2 all lil' TOML writer for Python
ii ubuntu-keyring 2023.11.28.1 all GnuPG keys of the Ubuntu archive ii python3-xmltodict 0.13.0-1ubuntu0.24.04.1 all Makes working with XML feel like you are working with JSON (Python 3)
ii ucf 3.0043+nmu1 all Update Configuration File(s): preserve user changes to config files ii python3-yaml 6.0.1-2build2 amd64 YAML parser and emitter for Python3
ii universal-ctags 5.9.20210829.0-1 amd64 build tag file indexes of source code definitions ii python3-zstd 1.5.5.1-1build1 amd64 python bindings to Yann Collet ZSTD compression library
ii unminimize 0.2.1 amd64 Un-minimize your minimial images or setup ii python3.12 3.12.3-1ubuntu0.8 amd64 Interactive high-level object-oriented language (version 3.12)
ii unzip 6.0-28ubuntu4.1 amd64 De-archiver for .zip files ii python3.12-minimal 3.12.3-1ubuntu0.8 amd64 Minimal subset of the Python language (version 3.12)
ii util-linux 2.39.3-9ubuntu6.2 amd64 miscellaneous system utilities ii re2c 3.1-1build1 amd64 lexer generator for C, C++, Go and Rust
ii valgrind 1:3.22.0-0ubuntu3 amd64 instrumentation framework for building dynamic analysis tools ii readline-common 8.2-4build1 all GNU readline and history libraries, common files
ii wget 1.21.4-1ubuntu4.1 amd64 retrieves files from the web ii ripgrep 14.1.0-1 amd64 Recursively searches directories for a regex pattern
ii xz-utils 5.6.1+really5.4.5-1ubuntu0.2 amd64 XZ-format compression utilities ii rpcsvc-proto 1.4.2-0ubuntu7 amd64 RPC protocol compiler and definitions
ii yash 2.55-2 amd64 yet another shell ii rsync 3.2.7-1ubuntu1.2 amd64 fast, versatile, remote (and local) file-copying tool
ii yq 3.1.0-3 all Command-line YAML processor - jq wrapper for YAML documents ii screen 4.9.1-1build1 amd64 terminal multiplexer with VT100/ANSI terminal emulation
ii zip 3.0-13ubuntu0.2 amd64 Archiver for .zip files ii sed 4.9-2build1 amd64 GNU stream editor for filtering/transforming text
ii zlib1g-dev:amd64 1:1.3.dfsg-3.1ubuntu2.1 amd64 compression library - development ii sensible-utils 0.0.22 all Utilities for sensible alternative selection
ii zlib1g:amd64 1:1.3.dfsg-3.1ubuntu2.1 amd64 compression library - runtime ii socat 1.8.0.0-4build3 amd64 multipurpose relay for bidirectional data transfer
ii zlib1g:i386 1:1.3.dfsg-3.1ubuntu2.1 i386 compression library - runtime ii strace 6.8-0ubuntu2 amd64 System call tracer
ii zoxide 0.9.3-1 amd64 Smarter cd command for your terminal ii sudo 1.9.15p5-3ubuntu5.24.04.1 amd64 Provide limited super user privileges to specific users
ii zsh 5.9-6ubuntu2 amd64 shell with lots of features ii sysstat 12.6.1-2 amd64 system performance tools for Linux
ii zsh-common 5.9-6ubuntu2 all architecture independent files for Zsh ii sysvinit-utils 3.08-6ubuntu3 amd64 System-V-like utilities
ii zstd 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm -- CLI tool 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 2025b-0ubuntu0.24.04.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
ii unminimize 0.2.1 amd64 Un-minimize your minimial images or setup
ii unzip 6.0-28ubuntu4.1 amd64 De-archiver for .zip files
ii util-linux 2.39.3-9ubuntu6.3 amd64 miscellaneous system utilities
ii valgrind 1:3.22.0-0ubuntu3 amd64 instrumentation framework for building dynamic analysis tools
ii wget 1.21.4-1ubuntu4.1 amd64 retrieves files from the web
ii xz-utils 5.6.1+really5.4.5-1ubuntu0.2 amd64 XZ-format compression utilities
ii yash 2.55-2 amd64 yet another shell
ii yq 3.1.0-3 all Command-line YAML processor - jq wrapper for YAML documents
ii zip 3.0-13ubuntu0.2 amd64 Archiver for .zip files
ii zlib1g-dev:amd64 1:1.3.dfsg-3.1ubuntu2.1 amd64 compression library - development
ii zlib1g:amd64 1:1.3.dfsg-3.1ubuntu2.1 amd64 compression library - runtime
ii zlib1g:i386 1:1.3.dfsg-3.1ubuntu2.1 i386 compression library - runtime
ii zoxide 0.9.3-1 amd64 Smarter cd command for your terminal
ii zsh 5.9-6ubuntu2 amd64 shell with lots of features
ii zsh-common 5.9-6ubuntu2 all architecture independent files for Zsh
ii zstd 1.5.5+dfsg2-2build1.1 amd64 fast lossless compression algorithm -- CLI tool
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description ||/ Name Version Architecture Description
Packages sorted by Installed-Size: Packages sorted by Installed-Size:
1015747 ===== TOTAL (369 packages) 1156978 ===== TOTAL (390 packages)
76943 valgrind amd64 76943 valgrind amd64
61804 gcc-13-riscv64-linux-gnu amd64
61333 gcc-13-x86-64-linux-gnu amd64 61333 gcc-13-x86-64-linux-gnu amd64
44381 gh amd64 44381 gh amd64
36493 cmake amd64 36493 cmake amd64
35919 libicu74 amd64 35919 libicu74 amd64
33545 g++-13-x86-64-linux-gnu amd64 33545 g++-13-x86-64-linux-gnu amd64
30811 cpp-13-x86-64-linux-gnu amd64 30811 cpp-13-x86-64-linux-gnu amd64
29327 libperl5.38t64 amd64 29774 cpp-13-riscv64-linux-gnu amd64
29333 libperl5.38t64 amd64
21815 neovim-runtime all 21815 neovim-runtime all
21692 git amd64 21692 git amd64
21662 libstdc++-13-dev amd64 21662 libstdc++-13-dev amd64
19159 perl-modules-5.38 all 19159 perl-modules-5.38 all
18028 libgcc-13-dev-riscv64-cross all
16248 zsh-common all 16248 zsh-common all
16082 libgcc-13-dev amd64 16082 libgcc-13-dev amd64
13431 libc6 amd64 13431 libc6 amd64
@@ -398,23 +437,25 @@ Packages sorted by Installed-Size:
12004 libc6-x32 amd64 12004 libc6-x32 amd64
11989 libc6-i386 amd64 11989 libc6-i386 amd64
11549 binutils-x86-64-linux-gnu amd64 11549 binutils-x86-64-linux-gnu amd64
11182 libc6-dbg amd64 11179 libc6-dbg amd64
10984 cmake-data all 10984 cmake-data all
10791 libasan8 amd64 10791 libasan8 amd64
9704 libx32asan8 amd64 9704 libx32asan8 amd64
9539 lib32asan8 amd64 9539 lib32asan8 amd64
9017 libpython3.12-stdlib amd64 9420 binutils-riscv64-linux-gnu amd64
8917 libpython3.12t64 amd64 9023 libpython3.12-stdlib amd64
8924 libpython3.12t64 amd64
8902 libtsan2 amd64 8902 libtsan2 amd64
8335 libmagic-mgc amd64 8335 libmagic-mgc amd64
8296 lib32gcc-13-dev amd64 8296 lib32gcc-13-dev amd64
8119 libc6-dev-x32 amd64 8119 libc6-dev-x32 amd64
7924 python3.12-minimal amd64 7927 python3.12-minimal amd64
7913 perl-base amd64 7913 perl-base amd64
7531 libx32gcc-13-dev amd64 7531 libx32gcc-13-dev amd64
7437 linux-libc-dev amd64 7493 linux-libc-dev amd64
7226 lib32stdc++-13-dev amd64 7226 lib32stdc++-13-dev amd64
7059 libx32stdc++-13-dev amd64 7059 libx32stdc++-13-dev amd64
7025 linux-libc-dev-riscv64-cross all
7024 direnv amd64 7024 direnv amd64
6947 libc6-dev-i386 amd64 6947 libc6-dev-i386 amd64
6944 coreutils amd64 6944 coreutils amd64
@@ -424,7 +465,7 @@ Packages sorted by Installed-Size:
6158 7zip amd64 6158 7zip amd64
5219 bat amd64 5219 bat amd64
5210 ripgrep amd64 5210 ripgrep amd64
5179 libpython3.12-minimal amd64 5181 libpython3.12-minimal amd64
4897 libhwasan0 amd64 4897 libhwasan0 amd64
4341 ncurses-term all 4341 ncurses-term all
4244 minify amd64 4244 minify amd64
@@ -437,6 +478,8 @@ Packages sorted by Installed-Size:
3738 fzf amd64 3738 fzf amd64
3721 groff-base amd64 3721 groff-base amd64
3605 python2.7-minimal amd64 3605 python2.7-minimal amd64
3568 just amd64
3468 sudo amd64
3443 fish amd64 3443 fish amd64
3441 re2c amd64 3441 re2c amd64
3438 util-linux amd64 3438 util-linux amd64
@@ -446,6 +489,7 @@ Packages sorted by Installed-Size:
3364 libubsan1 amd64 3364 libubsan1 amd64
3249 libapt-pkg6.0t64 amd64 3249 libapt-pkg6.0t64 amd64
3181 libx32ubsan1 amd64 3181 libx32ubsan1 amd64
3181 libstdc++6-riscv64-cross all
3111 ksh93u+m amd64 3111 ksh93u+m amd64
3110 libstdc++6 amd64 3110 libstdc++6 amd64
3104 lib32ubsan1 amd64 3104 lib32ubsan1 amd64
@@ -455,13 +499,14 @@ Packages sorted by Installed-Size:
2894 lib32stdc++6 amd64 2894 lib32stdc++6 amd64
2810 libx32stdc++6 amd64 2810 libx32stdc++6 amd64
2785 libpython2.7-minimal amd64 2785 libpython2.7-minimal amd64
2642 libasan8-riscv64-cross all
2431 zsh amd64 2431 zsh amd64
2419 passwd amd64 2419 passwd amd64
2352 libgnutls30t64 amd64 2352 libgnutls30t64 amd64
2350 libbinutils amd64 2350 libbinutils amd64
2191 ht amd64 2191 ht amd64
2183 libc-bin amd64 2183 libc-bin amd64
2163 git-man all 2162 git-man all
2103 strace amd64 2103 strace amd64
2079 libxml2 amd64 2079 libxml2 amd64
2032 libisl23 amd64 2032 libisl23 amd64
@@ -494,18 +539,19 @@ Packages sorted by Installed-Size:
1237 libzstd-dev amd64 1237 libzstd-dev amd64
1237 libgit2-1.7 amd64 1237 libgit2-1.7 amd64
1186 libmpfr6 amd64 1186 libmpfr6 amd64
1145 libpam-modules amd64 1150 libpam-modules amd64
1142 eza amd64 1142 eza amd64
1136 zoxide amd64 1136 zoxide amd64
1025 libsystemd0 amd64 1026 libsystemd0 amd64
1015 libkrb5-3 amd64 1015 libkrb5-3 amd64
996 screen amd64 996 screen amd64
925 libcurl4t64 amd64 925 libcurl4t64 amd64
916 wget amd64 916 wget amd64
906 libcurl3t64-gnutls amd64 906 libcurl3t64-gnutls amd64
904 libarchive13t64 amd64 905 libarchive13t64 amd64
884 login amd64 884 login amd64
852 busybox amd64 852 busybox amd64
851 libubsan1-riscv64-cross all
843 libbrotli1 amd64 843 libbrotli1 amd64
812 lua-luv amd64 812 lua-luv amd64
785 musl amd64 785 musl amd64
@@ -514,7 +560,7 @@ Packages sorted by Installed-Size:
761 libzstd1 amd64 761 libzstd1 amd64
751 libsepol2 amd64 751 libsepol2 amd64
745 libsource-highlight4t64 amd64 745 libsource-highlight4t64 amd64
736 python3.12 amd64 737 python3.12 amd64
732 xz-utils amd64 732 xz-utils amd64
708 tar amd64 708 tar amd64
672 perl amd64 672 perl amd64
@@ -536,7 +582,7 @@ Packages sorted by Installed-Size:
521 curl amd64 521 curl amd64
512 python3-yaml amd64 512 python3-yaml amd64
508 libbabeltrace1 amd64 508 libbabeltrace1 amd64
496 libssh-4 amd64 497 libssh-4 amd64
493 debconf all 493 debconf all
467 libreadline8t64 amd64 467 libreadline8t64 amd64
452 diffutils amd64 452 diffutils amd64
@@ -555,6 +601,7 @@ Packages sorted by Installed-Size:
375 unzip amd64 375 unzip amd64
373 libgomp1 amd64 373 libgomp1 amd64
367 libmount1 amd64 367 libmount1 amd64
362 libgomp1-riscv64-cross all
358 libjq1 amd64 358 libjq1 amd64
357 bfs amd64 357 bfs amd64
355 ninja-build amd64 355 ninja-build amd64
@@ -568,7 +615,7 @@ Packages sorted by Installed-Size:
337 gpgv amd64 337 gpgv amd64
336 libncurses6 amd64 336 libncurses6 amd64
328 cpio amd64 328 cpio amd64
314 libudev1 amd64 315 libudev1 amd64
311 libx32quadmath0 amd64 311 libx32quadmath0 amd64
309 less amd64 309 less amd64
307 libctf-nobfd0 amd64 307 libctf-nobfd0 amd64
@@ -596,6 +643,7 @@ Packages sorted by Installed-Size:
232 libctf0 amd64 232 libctf0 amd64
231 moreutils amd64 231 moreutils amd64
230 librhash0 amd64 230 librhash0 amd64
228 dmidecode amd64
226 libcrypt1 amd64 226 libcrypt1 amd64
224 libidn2-0 amd64 224 libidn2-0 amd64
224 debianutils amd64 224 debianutils amd64
@@ -633,6 +681,7 @@ Packages sorted by Installed-Size:
151 libaudit1 amd64 151 libaudit1 amd64
150 python3-argcomplete all 150 python3-argcomplete all
149 libmpc3 amd64 149 libmpc3 amd64
149 libitm1-riscv64-cross all
148 libsasl2-2 amd64 148 libsasl2-2 amd64
148 libcc1-0 amd64 148 libcc1-0 amd64
143 libyaml-0-2 amd64 143 libyaml-0-2 amd64
@@ -640,6 +689,7 @@ Packages sorted by Installed-Size:
137 librtmp1 amd64 137 librtmp1 amd64
136 libhiredis1.1.0 amd64 136 libhiredis1.1.0 amd64
133 libkrb5support0 amd64 133 libkrb5support0 amd64
133 libgcc-s1-riscv64-cross all
131 libipt2 amd64 131 libipt2 amd64
130 init-system-helpers all 130 init-system-helpers all
130 bubblewrap amd64 130 bubblewrap amd64
@@ -650,6 +700,8 @@ Packages sorted by Installed-Size:
122 libtasn1-6 amd64 122 libtasn1-6 amd64
120 libpopt0 amd64 120 libpopt0 amd64
115 libitm1 amd64 115 libitm1 amd64
115 libapparmor1 amd64
113 gcc-13-riscv64-linux-gnu-base amd64
113 gcc-13-base amd64 113 gcc-13-base amd64
112 jq amd64 112 jq amd64
112 gcc-14-base i386 112 gcc-14-base i386
@@ -660,7 +712,9 @@ Packages sorted by Installed-Size:
107 sysvinit-utils amd64 107 sysvinit-utils amd64
107 libwrap0 amd64 107 libwrap0 amd64
106 libc-dev-bin amd64 106 libc-dev-bin amd64
106 gcc-13-cross-base all
105 lib32itm1 amd64 105 lib32itm1 amd64
105 gcc-14-cross-base all
103 libio-pty-perl amd64 103 libio-pty-perl amd64
100 libassuan0 amd64 100 libassuan0 amd64
99 libpsl5t64 amd64 99 libpsl5t64 amd64
@@ -707,9 +761,9 @@ Packages sorted by Installed-Size:
51 logsave amd64 51 logsave amd64
51 libutempter0 amd64 51 libutempter0 amd64
51 libdebuginfod-common all 51 libdebuginfod-common all
49 python3-xmltodict all
49 libatomic1 amd64 49 libatomic1 amd64
48 libmsgpackc2 amd64 48 libmsgpackc2 amd64
47 python3-xmltodict all
47 libx32atomic1 amd64 47 libx32atomic1 amd64
47 libsigsegv2 amd64 47 libsigsegv2 amd64
46 hostname amd64 46 hostname amd64
@@ -717,6 +771,7 @@ Packages sorted by Installed-Size:
42 libnpth0t64 amd64 42 libnpth0t64 amd64
41 libxdmcp6 amd64 41 libxdmcp6 amd64
41 libkeyutils1 amd64 41 libkeyutils1 amd64
40 libatomic1-riscv64-cross all
39 lib32atomic1 amd64 39 lib32atomic1 amd64
38 libdebconfclient0 amd64 38 libdebconfclient0 amd64
37 gcc amd64 37 gcc amd64
@@ -733,7 +788,9 @@ Packages sorted by Installed-Size:
26 libsemanage-common all 26 libsemanage-common all
25 libsensors-config all 25 libsensors-config all
25 gcc-x86-64-linux-gnu amd64 25 gcc-x86-64-linux-gnu amd64
25 gcc-riscv64-linux-gnu amd64
20 cpp-x86-64-linux-gnu amd64 20 cpp-x86-64-linux-gnu amd64
20 cpp-riscv64-linux-gnu amd64
17 lsb-release all 17 lsb-release all
17 libaudit-common all 17 libaudit-common all
16 unminimize amd64 16 unminimize amd64
@@ -741,7 +798,7 @@ Packages sorted by Installed-Size:
11 g++-x86-64-linux-gnu amd64 11 g++-x86-64-linux-gnu amd64
11 cpp-13 amd64 11 cpp-13 amd64
8 p7zip all 8 p7zip all
8 gcc-multilib amd64
6 gcc-13-multilib amd64 6 gcc-13-multilib amd64
6 g++-multilib amd64
6 g++-13-multilib amd64 6 g++-13-multilib amd64
0 libc6-riscv64-cross all
0 libc6-dev-riscv64-cross all
+1 -1
View File
@@ -14,7 +14,7 @@ __add_cmake_config() {
} }
# pass common CMake settings # pass common CMake settings
for v in CMAKE_VERBOSE_MAKEFILE; do for v in CMAKE_INSTALL_PREFIX CMAKE_VERBOSE_MAKEFILE; do
__add_cmake_config $v __add_cmake_config $v
done done
# pass common CMake toolchain settings # pass common CMake toolchain settings
+1 -1
View File
@@ -29,6 +29,6 @@ fi
# limit memory usage to 1 GiB (in case of clang-format problems with invalid files) # limit memory usage to 1 GiB (in case of clang-format problems with invalid files)
ulimit -v 1048576 || true ulimit -v 1048576 || true
#echo $UPX_CLANG_FORMAT #echo "$UPX_CLANG_FORMAT"
exec "$UPX_CLANG_FORMAT" -style=file "$@" exec "$UPX_CLANG_FORMAT" -style=file "$@"
exit 99 exit 99
+5 -1
View File
@@ -48,6 +48,7 @@ run_upx=( "${emu[@]}" "$upx_exe" )
echo "run_upx='${run_upx[*]}'" echo "run_upx='${run_upx[*]}'"
# run_upx sanity check # run_upx sanity check
"${run_upx[@]}" --version-short || true
if ! "${run_upx[@]}" --version-short >/dev/null; then echo "UPX-ERROR: FATAL: upx --version-short FAILED"; exit 1; fi if ! "${run_upx[@]}" --version-short >/dev/null; then echo "UPX-ERROR: FATAL: upx --version-short FAILED"; exit 1; fi
if ! "${run_upx[@]}" -L >/dev/null 2>&1; then echo "UPX-ERROR: FATAL: upx -L FAILED"; exit 1; fi if ! "${run_upx[@]}" -L >/dev/null 2>&1; then echo "UPX-ERROR: FATAL: upx -L FAILED"; exit 1; fi
if ! "${run_upx[@]}" --help >/dev/null; then echo "UPX-ERROR: FATAL: upx --help FAILED"; exit 1; fi if ! "${run_upx[@]}" --help >/dev/null; then echo "UPX-ERROR: FATAL: upx --help FAILED"; exit 1; fi
@@ -169,7 +170,10 @@ if [[ $UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS != ON ]]; then
"${run_upx[@]}" -qq -d upx-packed-${s}${exe} ${fo} -o upx-unpacked-${s}${exe} "${run_upx[@]}" -qq -d upx-packed-${s}${exe} ${fo} -o upx-unpacked-${s}${exe}
cmp -s upx-unpacked${exe} upx-unpacked-${s}${exe} cmp -s upx-unpacked${exe} upx-unpacked-${s}${exe}
if [[ $UPX_CONFIG_DISABLE_RUN_PACKED_TEST != ON ]]; then if [[ $UPX_CONFIG_DISABLE_RUN_PACKED_TEST != ON ]]; then
"${emu[@]}" ./upx-packed-${s}${exe} --version-short : ${upx_run_packed_test_count:=20}
for ((i = 0; i < $upx_run_packed_test_count; i++)); do
"${emu[@]}" ./upx-packed-${s}${exe} --version-short
done
fi fi
done done
done done
+1 -1
View File
@@ -40,7 +40,7 @@ elif [[ -n $CMAKE_CROSSCOMPILING_EMULATOR ]]; then
true true
else else
upx_exe_runner=emu_gdb upx_exe_runner=emu_gdb
true : ${upx_run_packed_test_count:=20}
fi fi
source "$argv0dir/mimic_ctest.sh" source "$argv0dir/mimic_ctest.sh"
+49 -49
View File
@@ -46,14 +46,14 @@ b8c35fa2956da17ca505956e9f5017bb5f3a746322647e24ccb8ff28059cafa4 *powerpc-linux.
a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95 a0950546dc17fca9437219431d8ddb0249ce5b08e899e0c799a87ac982adee70 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\ expected_sha256sums__t110_compress_ucl_nrv2b_3_no_filter="\
919f31ec6a70a81159f4fc1d3cd4e9d66800a242df2fac9e339a36e1bf648091 *amd64-linux.elf/upx-3.91 836d9c5d9092421e49aeb573cde449ef740afbfea54d131ccbd88d8c7d87860d *amd64-linux.elf/upx-3.91
548e950c9f082eb0eb42b18411bbc257365cfc9c937ab20f501ebf0db5850d25 *amd64-linux.elf/upx-3.95 9776a2d030719f9d74413d17c1bb732aaabb610b341031facd2c1a75348fc661 *amd64-linux.elf/upx-3.95
822718cc0f6ac5e57bb23eeb65be6f3f7e73df8b062853abddcc924ec8207596 *amd64-win64.pe/upx-3.95.exe 822718cc0f6ac5e57bb23eeb65be6f3f7e73df8b062853abddcc924ec8207596 *amd64-win64.pe/upx-3.95.exe
4d8b2a8f29b38e097287e550d11810d7ecd4c5f07744545b3a315de908987bf6 *arm-linux.elf/upx-3.95 40353c37020fd4bb713c5d54273b8dc07666e262b83a4f0652ccb8a236465f9c *arm-linux.elf/upx-3.95
1440d6b44968954baf56fbc2a0739a51873455876114d4445ae4b67cb5e7893b *arm-wince.pe/upx-3.91.exe 1440d6b44968954baf56fbc2a0739a51873455876114d4445ae4b67cb5e7893b *arm-wince.pe/upx-3.91.exe
04c08626d4b03a4e969018eed7093c24de191b5d27db2a25221b134827806929 *arm64-linux.elf/upx-3.95 35c08bf5086fe21ff19e3512359e54ac97c6d4513e6bb9ef4a59294bebf18f6a *arm64-linux.elf/upx-3.95
6c8b276a0b611402d336b43cf8514b9a8d98be4f55a8301e784b7b88031b2b85 *armeb-linux.elf/upx-3.91 0ca2dcd9e8b5c3f16dcb31e30b42ec57a70b8fe90281d412081095a3d7812f01 *armeb-linux.elf/upx-3.91
dcd0c0060d44886966ae4e97b79a2c172f02d56228ea76dbc5c880ad59ef4ee5 *armeb-linux.elf/upx-3.95 462a72efbb580a2e90564412737bb3c1db1d930cde5b4f2c94782df91c8e4f4b *armeb-linux.elf/upx-3.95
a7ee051c5f9dcf233e2ee248274121b99fb8f098eff95469bc0638a7423723f0 *i386-dos32.djgpp2.coff/upx-3.91.exe a7ee051c5f9dcf233e2ee248274121b99fb8f098eff95469bc0638a7423723f0 *i386-dos32.djgpp2.coff/upx-3.91.exe
85cf31be166cb59587a99419cdd0fc5a79825d7508ab2c9a4bc0d700d603354d *i386-dos32.djgpp2.coff/upx-3.95.exe 85cf31be166cb59587a99419cdd0fc5a79825d7508ab2c9a4bc0d700d603354d *i386-dos32.djgpp2.coff/upx-3.95.exe
fc7656d9a877967be7e339bfc98a0c63ea7b5abc30b96fa9e5931c75ecbe9827 *i386-linux.elf/upx-3.91 fc7656d9a877967be7e339bfc98a0c63ea7b5abc30b96fa9e5931c75ecbe9827 *i386-linux.elf/upx-3.91
@@ -66,17 +66,17 @@ f60bab42fe3914109ab1b9f5d00a5be753cd0a2c1a79a3998d58800efedbfff7 *mipsel-linux.e
b6d8cc9e2023a3fc415166afc378ccf2eb505487df84c8d959ec74b3fb4f8256 *mipsel-linux.elf/upx-3.95 b6d8cc9e2023a3fc415166afc378ccf2eb505487df84c8d959ec74b3fb4f8256 *mipsel-linux.elf/upx-3.95
acd3dc5ed3e4c4eeaa42e7cca71a79d687dd844ce5f384666ed6e78327b5a8e3 *powerpc-linux.elf/upx-3.91 acd3dc5ed3e4c4eeaa42e7cca71a79d687dd844ce5f384666ed6e78327b5a8e3 *powerpc-linux.elf/upx-3.91
03600584c97fa466ef58239452baf9ec6ff2f06b79d97d45c8490953080de6e3 *powerpc-linux.elf/upx-3.95 03600584c97fa466ef58239452baf9ec6ff2f06b79d97d45c8490953080de6e3 *powerpc-linux.elf/upx-3.95
e615fc0e61d2bdd09f34275ec6c3de46fe5ce54da61cf5f5c94c40c6072bc1d6 *powerpc64le-linux.elf/upx-3.95 3f02885d1e94e59062eb78c4c910cde042475a6cadb77a85a603de747a50f45c *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\ expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
c5bafac11df5a38c1b72fd070373a0e1d5a066527129937c5bc9a280e21ad656 *amd64-linux.elf/upx-3.91 8431343adec632690cec669038c246438c799e7dc1b8bc85586e0d2bcd2eebad *amd64-linux.elf/upx-3.91
6cc1e01ac0b6140464a06f5aefb51c0388fdfe28f264a38061b50b3508203c07 *amd64-linux.elf/upx-3.95 1852bded40be6eb5ddb07a491476dcfcca69cadda45a5f128aa8f967d567fa0b *amd64-linux.elf/upx-3.95
5ab022e2c3ecb09931e2181fb5f7699f35e2b453b54c823e42653c84b0df5f2c *amd64-win64.pe/upx-3.95.exe 5ab022e2c3ecb09931e2181fb5f7699f35e2b453b54c823e42653c84b0df5f2c *amd64-win64.pe/upx-3.95.exe
e21b2305df2c1896eeae61010c3b65d8a50d476ea4a9bab6ec2fa4f9a0bed5a6 *arm-linux.elf/upx-3.95 6de0cf1903760710a95cb5330d0ffb406a93f081dbe6806935f51b0c75e23f03 *arm-linux.elf/upx-3.95
53121baf42c85991900aa3947f3d817fe6e894bc6f325ab1d576de6fba5fbcbf *arm-wince.pe/upx-3.91.exe 53121baf42c85991900aa3947f3d817fe6e894bc6f325ab1d576de6fba5fbcbf *arm-wince.pe/upx-3.91.exe
7431abc46f0960311364ecd690965dd1fc74b2de4baca8e0af8f966735b6372e *arm64-linux.elf/upx-3.95 3c9e49445280de6a771e77f6a88b3c3957815baa193e92a893d5defe6699f50a *arm64-linux.elf/upx-3.95
8b67fc95dc555c2de4e3d0c85e4ab977f4c3fba24d68a2f9c402c51e08ad5f3b *armeb-linux.elf/upx-3.91 627a3c77adfcd4ef8c32f1638a6b99e20e79bb914cbcebed6fb9ad5f96936530 *armeb-linux.elf/upx-3.91
c3b3e5b0a379022b26bae96432c3f5f946990f45b0b26afe056afe1170bf33c7 *armeb-linux.elf/upx-3.95 7faf9f0adf508cf29bf0ac2a62234df06d6c9153d6d59cf61019361db906daf8 *armeb-linux.elf/upx-3.95
51e4faea51e12c7442b27bb50150f532ac51d8102f77a669cbce82f2675a2ef2 *i386-dos32.djgpp2.coff/upx-3.91.exe 51e4faea51e12c7442b27bb50150f532ac51d8102f77a669cbce82f2675a2ef2 *i386-dos32.djgpp2.coff/upx-3.91.exe
1196f578ab0b862bae8ac6b5166b770f072cf0ac521a2a23a6347c19ea82a0da *i386-dos32.djgpp2.coff/upx-3.95.exe 1196f578ab0b862bae8ac6b5166b770f072cf0ac521a2a23a6347c19ea82a0da *i386-dos32.djgpp2.coff/upx-3.95.exe
3015651261f28fb43ed43a8c1fa257bcfcdc788e6fd3f436f3de23733736c724 *i386-linux.elf/upx-3.91 3015651261f28fb43ed43a8c1fa257bcfcdc788e6fd3f436f3de23733736c724 *i386-linux.elf/upx-3.91
@@ -89,17 +89,17 @@ c3b3e5b0a379022b26bae96432c3f5f946990f45b0b26afe056afe1170bf33c7 *armeb-linux.el
b78d8cd3a3402fed266c737cc34a32cc21b2b67b573e9e9071d4faf9fca89b89 *mipsel-linux.elf/upx-3.95 b78d8cd3a3402fed266c737cc34a32cc21b2b67b573e9e9071d4faf9fca89b89 *mipsel-linux.elf/upx-3.95
ea9cae1d1701db3a0c53e9a651766db5bdc30032f48913a4a9e99f193a800acc *powerpc-linux.elf/upx-3.91 ea9cae1d1701db3a0c53e9a651766db5bdc30032f48913a4a9e99f193a800acc *powerpc-linux.elf/upx-3.91
aea86bf87870a1e48a454ac1ea9a80d90d8abe5113d418a71d8a9c4a74bb2d0a *powerpc-linux.elf/upx-3.95 aea86bf87870a1e48a454ac1ea9a80d90d8abe5113d418a71d8a9c4a74bb2d0a *powerpc-linux.elf/upx-3.95
5fbc114a7fec5ed8e098d8e918cdf7b446a8c9dc5496336fe077fe084dbea8ce *powerpc64le-linux.elf/upx-3.95 62038c87489dc5cd3772e8e4051cf1d416edecf267d37f390a649f4ae657e0f9 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\ expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
509bc9676a0f5f5ce6df118da8e792151db816fcce5490eadc87fc525aad5a35 *amd64-linux.elf/upx-3.91 f817034e8b7765d8b422dac9cb6f24f78ce5bfd7169cd3b33e8224e00b131eca *amd64-linux.elf/upx-3.91
e8d6bf8204c6bf5d170ca8d4c9cb48b3b7a48b04d665dd6e111980081fcba3b3 *amd64-linux.elf/upx-3.95 d21441a05514c085c10e99b00d8cc4d45484297a8e4e8a246364ca4347d0ed56 *amd64-linux.elf/upx-3.95
7bd7cd37093200fa94d21dd7fdfef4d7fb9c3049fbf5f408f1f242cb8d9c6a55 *amd64-win64.pe/upx-3.95.exe 7bd7cd37093200fa94d21dd7fdfef4d7fb9c3049fbf5f408f1f242cb8d9c6a55 *amd64-win64.pe/upx-3.95.exe
4424d813ae55bec589779461c4d4b25361a58ea91659f4a12a7a2d08158cea64 *arm-linux.elf/upx-3.95 d328a89b333d0b36e96d0c61375bf686e8f3b73a188dd4d0df4d78e30af08632 *arm-linux.elf/upx-3.95
ad0a7a18e87657d28260b7c527d284863becd3c5f92259c570125465f88d4042 *arm-wince.pe/upx-3.91.exe ad0a7a18e87657d28260b7c527d284863becd3c5f92259c570125465f88d4042 *arm-wince.pe/upx-3.91.exe
0bbeb73af475bc852313074a14360ae863364175d7fbd4c2f3450790bc3a58ee *arm64-linux.elf/upx-3.95 0b700f0f7dde3118694155e876e6c2003ef701fe94856d6562936ec081278747 *arm64-linux.elf/upx-3.95
7da4a04118f50824821c00f4f9abf6056128ac33de6ac45a145fb5d4810850d9 *armeb-linux.elf/upx-3.91 53a1d04fa62e25e64e6f792b079e21b4c42676a73503ae6d9e67ae16c98e6d04 *armeb-linux.elf/upx-3.91
b4191959889ecb2b9bd2dd046318b414ab5a8268517572017466fbc9c986925e *armeb-linux.elf/upx-3.95 33ed1e3b84836d2af52295ba0b90343ac0b8d524539ce3b8d0aa9f19a51d70dd *armeb-linux.elf/upx-3.95
6fcdc8e34ce8b3501db2260c8a921c6e963954fdeffedfefca353a27bcc02d56 *i386-dos32.djgpp2.coff/upx-3.91.exe 6fcdc8e34ce8b3501db2260c8a921c6e963954fdeffedfefca353a27bcc02d56 *i386-dos32.djgpp2.coff/upx-3.91.exe
6f4f901c1838252f9b3104060475a6f13a2ebec830096ff28d870148580e4287 *i386-dos32.djgpp2.coff/upx-3.95.exe 6f4f901c1838252f9b3104060475a6f13a2ebec830096ff28d870148580e4287 *i386-dos32.djgpp2.coff/upx-3.95.exe
8127f8380300508e8062e9391e321abd0429a6a31fec41e769cc7fe80af27e27 *i386-linux.elf/upx-3.91 8127f8380300508e8062e9391e321abd0429a6a31fec41e769cc7fe80af27e27 *i386-linux.elf/upx-3.91
@@ -112,17 +112,17 @@ cd9b3d3780a79cb416b261d622e8e86f2369fa8bb9bc49b529c50cac2980d528 *mipsel-linux.e
5baf7db9e4335c0227106262efc9d18ad23b88c6d6bb636656aea67bb063b6ec *mipsel-linux.elf/upx-3.95 5baf7db9e4335c0227106262efc9d18ad23b88c6d6bb636656aea67bb063b6ec *mipsel-linux.elf/upx-3.95
aba8bd826ee52d533f9e1c4270d4f4194fe8d8747ea10a1d3ce59b6443f1a9f2 *powerpc-linux.elf/upx-3.91 aba8bd826ee52d533f9e1c4270d4f4194fe8d8747ea10a1d3ce59b6443f1a9f2 *powerpc-linux.elf/upx-3.91
6f737ccbf8c830476bed9c4dd33dd7757ea25bf2f8fb03b44d03e9b77ada0f1b *powerpc-linux.elf/upx-3.95 6f737ccbf8c830476bed9c4dd33dd7757ea25bf2f8fb03b44d03e9b77ada0f1b *powerpc-linux.elf/upx-3.95
62eeb7b59d1eafa59cbb5ffa6572fd47560a8a8bf85274e711f29d2fe390c773 *powerpc64le-linux.elf/upx-3.95 d313dd128a54189b9551a529b1ed21b222aa0394a30f9ba552cde96edcd4011e *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t140_compress_lzma_2_no_filter="\ expected_sha256sums__t140_compress_lzma_2_no_filter="\
ed2849169a873bb4070e9d878126f7bc19fb326d1dc6e169901ff3a3026661c3 *amd64-linux.elf/upx-3.91 fefac6fbd1e95479eb4066519f9bd801a30c29966685840b6a011e2911b984ca *amd64-linux.elf/upx-3.91
2b7f9baf27490274fe9301e8a962ac2bae03da0afec67c17df8f8f0e27157891 *amd64-linux.elf/upx-3.95 64487a0e0aade092a8ff7e6d8d9528ca550540cac8d432005ba610179782d042 *amd64-linux.elf/upx-3.95
a55ec5a7f2911f6da8b9336daf4f1051e753cfb7a4458c7f7baa6b63340c6daf *amd64-win64.pe/upx-3.95.exe a55ec5a7f2911f6da8b9336daf4f1051e753cfb7a4458c7f7baa6b63340c6daf *amd64-win64.pe/upx-3.95.exe
8765db7ae04a03af743ad8afc586b943b84b65aca9f1ec240232daa2161ba703 *arm-linux.elf/upx-3.95 9f405739b904bb85053b75187c9175e4ac7f66a07ac5e320eaa4e9771e1ec79e *arm-linux.elf/upx-3.95
7a6c603eecf214e5d6742f1fce922223c97c8bd2527678a968640dd6c1bc0d71 *arm-wince.pe/upx-3.91.exe 7a6c603eecf214e5d6742f1fce922223c97c8bd2527678a968640dd6c1bc0d71 *arm-wince.pe/upx-3.91.exe
810aa1e8f15d9617a0fac4bc4e5c5c5219fc44125d41ced661c744d6c5bb9857 *arm64-linux.elf/upx-3.95 c8435e2f82ba72a0b6abad4146539d40d495461c5e480af705b2bbd21d192128 *arm64-linux.elf/upx-3.95
1dbb05c09fb972c3a5f87ace0c802af48f8b20f7f977f5a14b91dad59800d6a6 *armeb-linux.elf/upx-3.91 21fc48eaaedc73fe9239159fb864c6149f729ef1661a8407b88ad9c9a19f9a54 *armeb-linux.elf/upx-3.91
a1fba814639540616175e0c058267e96f839d85a187b01af764af14ae1b6019c *armeb-linux.elf/upx-3.95 742db587dc53f616c7b276a930c3f586da2b7c3ce6ccd523c041e88a9671b99b *armeb-linux.elf/upx-3.95
7a8eaa5139b95cc56591200fce62d3c9af163671467952cab6fcf487318107bb *i386-dos32.djgpp2.coff/upx-3.91.exe 7a8eaa5139b95cc56591200fce62d3c9af163671467952cab6fcf487318107bb *i386-dos32.djgpp2.coff/upx-3.91.exe
9b5fc0f54a5f811bda190c36fb2fa5c5b03c6c3de0c62693e4191230b5a419b8 *i386-dos32.djgpp2.coff/upx-3.95.exe 9b5fc0f54a5f811bda190c36fb2fa5c5b03c6c3de0c62693e4191230b5a419b8 *i386-dos32.djgpp2.coff/upx-3.95.exe
68b4ce63cb0bd7dd5b287e1f9fa5d9bc234ac36359ce3ebff863984c503a698e *i386-linux.elf/upx-3.91 68b4ce63cb0bd7dd5b287e1f9fa5d9bc234ac36359ce3ebff863984c503a698e *i386-linux.elf/upx-3.91
@@ -135,17 +135,17 @@ e268c98fdacfd04268d76644f2bb4746ae04b57801407aaa1867798840eeeea0 *m68k-atari.tos
339d38602413d97d9bba113f39884815af10ebcdccf37e3f5e8d0879f262a048 *mipsel-linux.elf/upx-3.95 339d38602413d97d9bba113f39884815af10ebcdccf37e3f5e8d0879f262a048 *mipsel-linux.elf/upx-3.95
6d4f9d4383ebc9d8411d06a7c219dcf3e8513ea8c989f2d31ab382602f873ba5 *powerpc-linux.elf/upx-3.91 6d4f9d4383ebc9d8411d06a7c219dcf3e8513ea8c989f2d31ab382602f873ba5 *powerpc-linux.elf/upx-3.91
5dd727d8d5a35cc0ab86d629285d8ff450f52b538118679edaa886ce9c1fed7d *powerpc-linux.elf/upx-3.95 5dd727d8d5a35cc0ab86d629285d8ff450f52b538118679edaa886ce9c1fed7d *powerpc-linux.elf/upx-3.95
7b9aeffda399143db878f24a9faecdc21fb8ec906fed80bc6636d82771090f2f *powerpc64le-linux.elf/upx-3.95 efec1e5bbb9bcf11dbc7081adfc2020de18fae326ad86194551c44fba0d2148d *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t150_compress_ucl_2_all_filters="\ expected_sha256sums__t150_compress_ucl_2_all_filters="\
fc30606d37c697f5c79742bf6e7d2afa8503e69fc87e52274d00b5210d03157a *amd64-linux.elf/upx-3.91 05b29bde32af1e63e837e2be499567c4b10d7e692c88082f24e3417e0c7b9f40 *amd64-linux.elf/upx-3.91
c6d66f6d4f92812801c021a854fbd94745a7b63e0477678b8eb1dc26c5b0a9a4 *amd64-linux.elf/upx-3.95 65c142ee01af09fa8741932c1f21d466be971aad059cc5afddbb7ecdf142c1bb *amd64-linux.elf/upx-3.95
cbb5c90bd9195bd9e3acd931312a70deeccfab5540f398ceda8826f8d6b332bf *amd64-win64.pe/upx-3.95.exe cbb5c90bd9195bd9e3acd931312a70deeccfab5540f398ceda8826f8d6b332bf *amd64-win64.pe/upx-3.95.exe
bb88759de778b1099b51a012f915e646ebfddcbd2fb26b3a1e760fc81a41d2b9 *arm-linux.elf/upx-3.95 1ea1bb18c0ac85c07450f0a6704b84e58a1322556757e2943340ef381b2ce675 *arm-linux.elf/upx-3.95
76a5f0518fc797bd3f132ce6eb61ca187b5d463f191417883a73d4584716c23a *arm-wince.pe/upx-3.91.exe 76a5f0518fc797bd3f132ce6eb61ca187b5d463f191417883a73d4584716c23a *arm-wince.pe/upx-3.91.exe
7b9290c2ab01632d8baa28b24498fbcd734caf8e3846864bb62a8282de3ffd9a *arm64-linux.elf/upx-3.95 4df30002376a4f18029ea9dd8260d395bec3a3fa11fbc5aa19859c2f0efdc2e6 *arm64-linux.elf/upx-3.95
0bafd7837327b590b3be06676ee73c52405e5e4a36a6d06f8b6773e93c499420 *armeb-linux.elf/upx-3.91 ba03fd4889210435c9673f2dcbd2269162037090eccc79cf7d2b896e64a57e2e *armeb-linux.elf/upx-3.91
aea39071ff8ce0b2a59f30e50603ef2ec39789693a3dd9baa4e6be1e49b4e068 *armeb-linux.elf/upx-3.95 681f32d01c76ff31776b8d6f1556daa38eee297f675aa40ff1bb2e47e12adf15 *armeb-linux.elf/upx-3.95
aa05c3a2953f0f2d70842cba45786b707a79ffef22fd084f51e304762cc67765 *i386-dos32.djgpp2.coff/upx-3.91.exe aa05c3a2953f0f2d70842cba45786b707a79ffef22fd084f51e304762cc67765 *i386-dos32.djgpp2.coff/upx-3.91.exe
c677241e9a8753ba1332ac3875ab6398fb2d792d2627edd9e58f2535b3131abe *i386-dos32.djgpp2.coff/upx-3.95.exe c677241e9a8753ba1332ac3875ab6398fb2d792d2627edd9e58f2535b3131abe *i386-dos32.djgpp2.coff/upx-3.95.exe
7bcd42f58dcc8ddb6cb1a4e33d56b584fe6d49b002b01a0859571d1324dd593a *i386-linux.elf/upx-3.91 7bcd42f58dcc8ddb6cb1a4e33d56b584fe6d49b002b01a0859571d1324dd593a *i386-linux.elf/upx-3.91
@@ -158,17 +158,17 @@ c5107a84d32de820c81401259a7dd23435ea625588d56c6c75ad6fa14b0dbf8b *mips-linux.elf
fd9ea397a29b41a2143f9e02217e181d0075d7ad7d87bdbadc7fc94bfb1b0d76 *mipsel-linux.elf/upx-3.95 fd9ea397a29b41a2143f9e02217e181d0075d7ad7d87bdbadc7fc94bfb1b0d76 *mipsel-linux.elf/upx-3.95
c47d1299f6ecf86e62528fc54979117b2b2ddbb6c80f553689402399fc7eab28 *powerpc-linux.elf/upx-3.91 c47d1299f6ecf86e62528fc54979117b2b2ddbb6c80f553689402399fc7eab28 *powerpc-linux.elf/upx-3.91
77c3b4ba6909a4e20180bc13775e280086d67240519c323c2005f3fcee6e0b78 *powerpc-linux.elf/upx-3.95 77c3b4ba6909a4e20180bc13775e280086d67240519c323c2005f3fcee6e0b78 *powerpc-linux.elf/upx-3.95
030a1ac080381a5ec7ad1e167f8809709620e555db792f43146c8c34e2cb37ec *powerpc64le-linux.elf/upx-3.95 e3ce51b863905a4831958c72541b04e9f893f0d9827f32e615822db7aebd56bc *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t160_compress_all_methods_1_no_filter="\ expected_sha256sums__t160_compress_all_methods_1_no_filter="\
115046275f6bccbaa34b7aefbedeba8741aba4e4876340a3d7363bae86ee4209 *amd64-linux.elf/upx-3.91 94c91b97fcce7402a4494b22699b2450e8e4e2a9f4ddd66e1133c76ce198c167 *amd64-linux.elf/upx-3.91
a8394890b5d731258316b520da2a5e4b43902742d237536fb7fbc578c6197fbb *amd64-linux.elf/upx-3.95 5b3e85adb37919d051c6eaff205b8e1d77a2dfde0d8e7dcdee7c22f8fd5dc8c7 *amd64-linux.elf/upx-3.95
5a0ecb45658904bcd0b823b77dba039c9814e2eff4ed429784c36b7074b9858c *amd64-win64.pe/upx-3.95.exe 5a0ecb45658904bcd0b823b77dba039c9814e2eff4ed429784c36b7074b9858c *amd64-win64.pe/upx-3.95.exe
0976be6c56de1ac2314d8a4962ae3d9d7be962847600db5e2bab529ab32cebd6 *arm-linux.elf/upx-3.95 de93a219ca3c4ea84bd9c1b5fb37ff4aaa0a08ea6eac18da6d7a5865e4dad19c *arm-linux.elf/upx-3.95
fdbe0395ac401285edb9c2f9bfbb0fbd3c0eaad5052a88d8369b1a66b35a8a3e *arm-wince.pe/upx-3.91.exe fdbe0395ac401285edb9c2f9bfbb0fbd3c0eaad5052a88d8369b1a66b35a8a3e *arm-wince.pe/upx-3.91.exe
1c8d536870d0244bb12cb8fdd6cd35ad7e9a53bbc4aa8e2e12af72447caaf467 *arm64-linux.elf/upx-3.95 acdb7ff90d7c6f403872ec333e2987ee74e99d6e1390863b321b528d312c1084 *arm64-linux.elf/upx-3.95
912b6ca141a028974bc46aeb571314db371647201974283992752933f39200b1 *armeb-linux.elf/upx-3.91 54860e61da36414dc105aafcdbb86c79b745913a7d0da911fa58a6941f111e2d *armeb-linux.elf/upx-3.91
0b5757e474bcf3136edf10e403f95e706b214a5cf7d8577fbf7778175b1bef61 *armeb-linux.elf/upx-3.95 7c36b75cc8a0712515e12a9e565df4ca43bff6cc0077afb282d367fcc2ee2acd *armeb-linux.elf/upx-3.95
0a0099246096d20ff6035a4df6566954b9d8aff9ed8fdbd35aa5ee4995b02bfe *i386-dos32.djgpp2.coff/upx-3.91.exe 0a0099246096d20ff6035a4df6566954b9d8aff9ed8fdbd35aa5ee4995b02bfe *i386-dos32.djgpp2.coff/upx-3.91.exe
5df7aa9f0896df87eb8798119ad16a9b89c87a7568a67339e33b5baa99ec361f *i386-dos32.djgpp2.coff/upx-3.95.exe 5df7aa9f0896df87eb8798119ad16a9b89c87a7568a67339e33b5baa99ec361f *i386-dos32.djgpp2.coff/upx-3.95.exe
53e5aae9bc70f58e3dc2aef5a94f66df2517d547670e72ee2b3189b7da809f41 *i386-linux.elf/upx-3.91 53e5aae9bc70f58e3dc2aef5a94f66df2517d547670e72ee2b3189b7da809f41 *i386-linux.elf/upx-3.91
@@ -181,17 +181,17 @@ f3d33c5c9809943a902133490bcf0cfbe39a5ef1635a0c29b3bdc4f35dfffa50 *i386-win32.pe/
68f674d081d87e86e54f0051eee9e2bc85b566051992774ab28ff3173cbcb75a *mipsel-linux.elf/upx-3.95 68f674d081d87e86e54f0051eee9e2bc85b566051992774ab28ff3173cbcb75a *mipsel-linux.elf/upx-3.95
f569d8f49d7110bb8b262a48055b39d889e9977c40c5f1b21e74f8cbf93b27ae *powerpc-linux.elf/upx-3.91 f569d8f49d7110bb8b262a48055b39d889e9977c40c5f1b21e74f8cbf93b27ae *powerpc-linux.elf/upx-3.91
d8227a8a88c083760889acaf259e7da59eab75a23e341289bc8e3c60563ae344 *powerpc-linux.elf/upx-3.95 d8227a8a88c083760889acaf259e7da59eab75a23e341289bc8e3c60563ae344 *powerpc-linux.elf/upx-3.95
8260862f104a23c2a3fa574e10d882204ed40a17702040edbbbc8d25f961163f *powerpc64le-linux.elf/upx-3.95 e4b58ed65025b765953af02e80be9a171c49b6c707c835949b1c888fdbe8bba0 *powerpc64le-linux.elf/upx-3.95
" "
expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\ expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
09cee61e2a4e94455d75a76711078719c3ca7fab77f047c4c85c9424e651956d *amd64-linux.elf/upx-3.91 52a39c30b60abb82c1ec2826297eb46abdc29b5dd55d7a7a41dd2fc1c573f60a *amd64-linux.elf/upx-3.91
0196cbaa36e5224b26729f1bb13990327878ffb0d2cd5784f8fbe715f12dcc1c *amd64-linux.elf/upx-3.95 f0c728c42e8775767e0d963e1eef7ca78711f3f6dd180df980a1faef926d7cac *amd64-linux.elf/upx-3.95
e07e9babdeb12fddeebbfa1b0293163cc5e63017d6f0933d02587c8da1e90a82 *amd64-win64.pe/upx-3.95.exe e07e9babdeb12fddeebbfa1b0293163cc5e63017d6f0933d02587c8da1e90a82 *amd64-win64.pe/upx-3.95.exe
4b93e4dd9baea301479fa989d935b7b6b43b2b54464c5def0db1a00b6a15d719 *arm-linux.elf/upx-3.95 f0359efa2247e9ea756f54c85e7518d61f3b293e08f566c3812c64c7d5f0db0f *arm-linux.elf/upx-3.95
8d1706ab02013b536c3a4cec20d40a96591ffa45fdcb464ccd3f038567006d79 *arm-wince.pe/upx-3.91.exe 8d1706ab02013b536c3a4cec20d40a96591ffa45fdcb464ccd3f038567006d79 *arm-wince.pe/upx-3.91.exe
be753ff9bc789d80f32cec35cc0f9c67b102d297f607b328779ba8d80da13593 *arm64-linux.elf/upx-3.95 14932490ff17e27bb5bedde576b8683892c4720f4a0058f373aab9f8894fda09 *arm64-linux.elf/upx-3.95
4c6d40107b5bce15a40aef514b57ac6dd644162998915aee412feca21582118a *armeb-linux.elf/upx-3.91 64a73512e40c2fb49d8ae3a1d496b379c97b8724cf8ca4461a85825ff04366a0 *armeb-linux.elf/upx-3.91
9d70d663c00378aa1c1c43d55327a895be33ea081bac13ce8a7ea6895b539679 *armeb-linux.elf/upx-3.95 078e7cd073ba071f17ad4292e2211b7d635f57e974546e7f156cc87f9aa716e2 *armeb-linux.elf/upx-3.95
dda2c348c43741a1bd65049a8e7b51be1ebf873d215370ec002185c85390c168 *i386-dos32.djgpp2.coff/upx-3.91.exe dda2c348c43741a1bd65049a8e7b51be1ebf873d215370ec002185c85390c168 *i386-dos32.djgpp2.coff/upx-3.91.exe
560392427ded22f2f3fea59ef10e55d65cf841001e67b1e4558ef13514baa602 *i386-dos32.djgpp2.coff/upx-3.95.exe 560392427ded22f2f3fea59ef10e55d65cf841001e67b1e4558ef13514baa602 *i386-dos32.djgpp2.coff/upx-3.95.exe
f3f8feceebe8536633554b204df68c2e94e1d1a313fe7a576b7f5d404c916083 *i386-linux.elf/upx-3.91 f3f8feceebe8536633554b204df68c2e94e1d1a313fe7a576b7f5d404c916083 *i386-linux.elf/upx-3.91
@@ -204,6 +204,6 @@ ad47c7522167f6f7e47d495e1fa119431386ca5ea9bc16b6a4b9cb38cf9cd29f *i386-win32.pe/
1dcd626fc4566c608e987fd6999b695793c5cae7f78872e3d1a9a23942fea188 *mipsel-linux.elf/upx-3.95 1dcd626fc4566c608e987fd6999b695793c5cae7f78872e3d1a9a23942fea188 *mipsel-linux.elf/upx-3.95
2047a4a880322bf41e8afbb4787f6103364de4a299b543808251a4144c4d990b *powerpc-linux.elf/upx-3.91 2047a4a880322bf41e8afbb4787f6103364de4a299b543808251a4144c4d990b *powerpc-linux.elf/upx-3.91
63679bd238f30bfb14853246eb257536471fea10f942b2adfdd43cbef21dea30 *powerpc-linux.elf/upx-3.95 63679bd238f30bfb14853246eb257536471fea10f942b2adfdd43cbef21dea30 *powerpc-linux.elf/upx-3.95
bee0b9b5fa783550d3e7e5ba6e48d92776578dd82d6ac644e14191e0879d185b *powerpc64le-linux.elf/upx-3.95 c75d1548db879ed589b55bc1319869b49d37595f4560a64b34016951dc02f997 *powerpc64le-linux.elf/upx-3.95
" "
########## end .sha256sums.recreate ########## end .sha256sums.recreate
+6
View File
@@ -9,6 +9,12 @@
Memcheck:Cond Memcheck:Cond
fun:enframe fun:enframe
} }
{
musl-malloc-get_nominal_size
Memcheck:Cond
fun:get_nominal_size
fun:__libc_free
}
# these are only needed for older musl versions # these are only needed for older musl versions
+121
View File
@@ -0,0 +1,121 @@
#!/usr/bin/env python3
import argparse
import random
from pathlib import Path
def random_string(length=4):
import random, string
return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))
def modify_upx_magic(data: bytearray) -> bytearray:
pos = data.find(b'UPX!')
if pos != -1:
new_magic = random_string(4).encode('ascii')
print(f"[+] UPX! → {new_magic.decode()}")
data[pos:pos+4] = new_magic
else:
print("[i] UPX! magic not found (maybe already modified)")
return data
def rename_upx_sections(data: bytearray):
# Find PE offset
if len(data) < 0x40:
return data, False
pe_offset = int.from_bytes(data[0x3C:0x40], 'little')
if data[pe_offset:pe_offset+4] != b'PE\x00\x00':
print("[-] Not a valid PE file")
return data, False
num_sections = int.from_bytes(data[pe_offset + 6:pe_offset + 8], 'little')
size_of_optional_header = int.from_bytes(data[pe_offset + 20:pe_offset + 22], 'little')
section_table_offset = pe_offset + 24 + size_of_optional_header
replacements = {
b'UPX0': b'.text\x00\x00\x00',
b'UPX1': b'.data\x00\x00\x00',
b'UPX2': b'.rdata\x00\x00',
}
modified = False
for i in range(num_sections):
sec_offset = section_table_offset + i * 40
sec_name_raw = data[sec_offset:sec_offset + 8]
# Convert to immutable bytes for dict lookup
sec_name = bytes(sec_name_raw.split(b'\x00', 1)[0])
if sec_name in replacements:
new_name = replacements[sec_name]
old_name = sec_name.decode(errors='ignore')
print(f"[+] Section '{old_name}''{new_name.split(b'\x00')[0].decode()}'")
data[sec_offset:sec_offset + 8] = new_name
modified = True
if not modified:
print("[i] No UPX sections found maybe already renamed")
return data, modified
def tweak_upx_info_blocks(data: bytearray) -> bytearray:
for pos in range(len(data)-0x2000, 0x400, -4):
block = data[pos:pos+12]
if len(block) != 12 or block[0] >= 10:
continue
sz_packed = int.from_bytes(block[4:8], 'little')
sz_unpacked = int.from_bytes(block[8:12], 'little')
if 1000 < sz_packed < 50_000_000 and 1000 < sz_unpacked < 100_000_000:
tweak = random.randint(1, 7)
data[pos+4:pos+8] = (sz_packed + tweak).to_bytes(4, 'little')
data[pos+8:pos+12] = (sz_unpacked - tweak).to_bytes(4, 'little')
print(f"[+] Tweaked info block: packed +{tweak}, unpacked -{tweak}")
return data
print("[i] No info block tweaked")
return data
def add_padding(data: bytearray) -> bytearray:
import random
kb = random.randint(3, 15)
padding = bytearray(random.getrandbits(8) for _ in range(kb * 1024))
data.extend(padding)
print(f"[+] Added {kb} KB random overlay padding")
return data
def strip_relocations(data: bytearray) -> bytearray:
pe_offset = int.from_bytes(data[0x3C:0x40], 'little')
reloc_rva = int.from_bytes(data[pe_offset + 160:pe_offset + 164], 'little')
if reloc_rva != 0:
data[pe_offset + 160:pe_offset + 168] = b'\x00' * 8
print("[+] Stripped relocation table")
else:
print("[i] No relocations to strip")
return data
def main():
parser = argparse.ArgumentParser(description="Automatic UPX evasion")
parser.add_argument("input", help="UPX-packed DLL")
parser.add_argument("-o", "--output", help="Output filename")
parser.add_argument("--keep-relocs", action="store_true", help="Don't strip relocations")
args = parser.parse_args()
in_file = Path(args.input)
if not in_file.exists():
print(f"[-] File not found: {in_file}")
return
out_file = Path(args.output or f"{in_file.stem}_stealth{in_file.suffix}")
print(f"[*] Loading {in_file} ({in_file.stat().st_size // 1024} KB)")
data = bytearray(in_file.read_bytes())
print("[+] Applying evasion...")
data = modify_upx_magic(data)
data, _ = rename_upx_sections(data)
# data = tweak_upx_info_blocks(data)
data = add_padding(data)
if not args.keep_relocs:
data = strip_relocations(data)
out_file.write_bytes(data)
print(f"[+] Saved → {out_file} ({len(data)//1024} KB)")
if __name__ == "__main__":
main()
+2793
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -25,11 +25,11 @@ endif
.SECONDEXPANSION: .SECONDEXPANSION:
.SUFFIXES: .SUFFIXES:
build/debug build/release build/all: PHONY; $(MAKE) -C $(top_srcdir) $@ build/debug build/release build/all: PHONY; $(MAKE) -C "$(top_srcdir)" $@
build/debug+test build/release+test build/all+test: PHONY; $(MAKE) -C $(top_srcdir) $@ build/debug+test build/release+test build/all+test: PHONY; $(MAKE) -C "$(top_srcdir)" $@
# shortcuts # shortcuts
debug release all: PHONY; $(MAKE) -C $(top_srcdir) $@ debug release all: PHONY; $(MAKE) -C "$(top_srcdir)" $@
debug+test release+test all+test: PHONY; $(MAKE) -C $(top_srcdir) $@ debug+test release+test all+test: PHONY; $(MAKE) -C "$(top_srcdir)" $@
test: $$(patsubst %+test,%,$$(.DEFAULT_GOAL))+test PHONY test: $$(patsubst %+test,%,$$(.DEFAULT_GOAL))+test PHONY
@@ -61,11 +61,11 @@ run-testsuite-%: export upx_testsuite_SRCDIR := $(upx_testsuite_SRCDIR)
run-testsuite-debug: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite-debug run-testsuite-debug: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite-debug
run-testsuite-debug: export upx_exe := $(top_srcdir)/build/debug/upx run-testsuite-debug: export upx_exe := $(top_srcdir)/build/debug/upx
run-testsuite-debug: build/debug PHONY run-testsuite-debug: build/debug PHONY
time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh time -p bash "$(top_srcdir)/misc/testsuite/upx_testsuite_1.sh"
run-testsuite-release: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite-release run-testsuite-release: export upx_testsuite_BUILDDIR := ./tmp-upx-testsuite-release
run-testsuite-release: export upx_exe := $(top_srcdir)/build/release/upx run-testsuite-release: export upx_exe := $(top_srcdir)/build/release/upx
run-testsuite-release: build/release PHONY run-testsuite-release: build/release PHONY
time -p bash $(top_srcdir)/misc/testsuite/upx_testsuite_1.sh time -p bash "$(top_srcdir)/misc/testsuite/upx_testsuite_1.sh"
endif endif
endif endif
@@ -75,9 +75,9 @@ endif
ifneq ($(wildcard /usr/bin/env),) # need Unix utils like bash, perl, sed, xargs, etc. ifneq ($(wildcard /usr/bin/env),) # need Unix utils like bash, perl, sed, xargs, etc.
CHECK_WHITESPACE = bash $(top_srcdir)/misc/scripts/check_whitespace.sh $(top_srcdir) CHECK_WHITESPACE = bash "$(top_srcdir)/misc/scripts/check_whitespace.sh" "$(top_srcdir)"
ifneq ($(wildcard $(top_srcdir)/.git/.),) ifneq ($(wildcard $(top_srcdir)/.git/.),)
CHECK_WHITESPACE = bash $(top_srcdir)/misc/scripts/check_whitespace_git.sh $(top_srcdir) CHECK_WHITESPACE = bash "$(top_srcdir)/misc/scripts/check_whitespace_git.sh" "$(top_srcdir)"
endif endif
check-whitespace: PHONY; $(CHECK_WHITESPACE) check-whitespace: PHONY; $(CHECK_WHITESPACE)
@@ -100,7 +100,7 @@ CLANG_FORMAT_FILES += $(sort $(wildcard ../misc/cmake/try_compile/*.[ch]*))
CLANG_FORMAT_FILES := $(sort $(filter-out $(CLANG_FORMAT_EXCLUDE_FILES),$(CLANG_FORMAT_FILES))) CLANG_FORMAT_FILES := $(sort $(filter-out $(CLANG_FORMAT_EXCLUDE_FILES),$(CLANG_FORMAT_FILES)))
clang-format: $(CLANG_FORMAT_FILES) PHONY clang-format: $(CLANG_FORMAT_FILES) PHONY
@echo "running upx-clang-format" @echo "running upx-clang-format"
@bash $(top_srcdir)/misc/scripts/upx-clang-format.sh -i $(CLANG_FORMAT_FILES) @bash "$(top_srcdir)/misc/scripts/upx-clang-format.sh" -i $(CLANG_FORMAT_FILES)
endif # Linux endif # Linux
endif # /usr/bin/env endif # /usr/bin/env
+19 -3
View File
@@ -295,13 +295,15 @@ forceinline constexpr upx_uint64_t no_bswap64(upx_uint64_t v) noexcept { return
#define ne16_to_le16(v) bswap16(v) #define ne16_to_le16(v) bswap16(v)
#define ne32_to_le32(v) bswap32(v) #define ne32_to_le32(v) bswap32(v)
#define ne64_to_le64(v) bswap64(v) #define ne64_to_le64(v) bswap64(v)
#else #elif (ACC_ABI_LITTLE_ENDIAN)
#define ne16_to_be16(v) bswap16(v) #define ne16_to_be16(v) bswap16(v)
#define ne32_to_be32(v) bswap32(v) #define ne32_to_be32(v) bswap32(v)
#define ne64_to_be64(v) bswap64(v) #define ne64_to_be64(v) bswap64(v)
#define ne16_to_le16(v) no_bswap16(v) #define ne16_to_le16(v) no_bswap16(v)
#define ne32_to_le32(v) no_bswap32(v) #define ne32_to_le32(v) no_bswap32(v)
#define ne64_to_le64(v) no_bswap64(v) #define ne64_to_le64(v) no_bswap64(v)
#else
#error "ACC_ABI_ENDIAN"
#endif #endif
/************************************************************************* /*************************************************************************
@@ -360,8 +362,12 @@ inline constexpr unsigned get_be24(const byte *p) noexcept {
inline constexpr unsigned get_le24(const byte *p) noexcept { inline constexpr unsigned get_le24(const byte *p) noexcept {
return upx::compile_time::get_le24(p); return upx::compile_time::get_le24(p);
} }
inline constexpr unsigned get_ne24(const byte *p) noexcept {
return upx::compile_time::get_ne24(p);
}
inline constexpr void set_be24(byte *p, unsigned v) noexcept { upx::compile_time::set_be24(p, v); } inline constexpr void set_be24(byte *p, unsigned v) noexcept { upx::compile_time::set_be24(p, v); }
inline constexpr void set_le24(byte *p, unsigned v) noexcept { upx::compile_time::set_le24(p, v); } inline constexpr void set_le24(byte *p, unsigned v) noexcept { upx::compile_time::set_le24(p, v); }
inline constexpr void set_ne24(byte *p, unsigned v) noexcept { upx::compile_time::set_ne24(p, v); }
REQUIRE_XE24 REQUIRE_XE24
forceinline bele_constexpr unsigned get_be24(const XE24 *p) noexcept { forceinline bele_constexpr unsigned get_be24(const XE24 *p) noexcept {
@@ -372,6 +378,10 @@ forceinline bele_constexpr unsigned get_le24(const XE24 *p) noexcept {
return get_le24(upx::ptr_static_cast<const byte *>(p)); return get_le24(upx::ptr_static_cast<const byte *>(p));
} }
REQUIRE_XE24 REQUIRE_XE24
forceinline bele_constexpr unsigned get_ne24(const XE24 *p) noexcept {
return get_ne24(upx::ptr_static_cast<const byte *>(p));
}
REQUIRE_XE24
forceinline bele_constexpr void set_be24(XE24 *p, unsigned v) noexcept { forceinline bele_constexpr void set_be24(XE24 *p, unsigned v) noexcept {
set_be24(upx::ptr_static_cast<byte *>(p), v); set_be24(upx::ptr_static_cast<byte *>(p), v);
} }
@@ -379,6 +389,10 @@ REQUIRE_XE24
forceinline bele_constexpr void set_le24(XE24 *p, unsigned v) noexcept { forceinline bele_constexpr void set_le24(XE24 *p, unsigned v) noexcept {
set_le24(upx::ptr_static_cast<byte *>(p), v); set_le24(upx::ptr_static_cast<byte *>(p), v);
} }
REQUIRE_XE24
forceinline bele_constexpr void set_ne24(XE24 *p, unsigned v) noexcept {
set_ne24(upx::ptr_static_cast<byte *>(p), v);
}
REQUIRE_XE32 REQUIRE_XE32
inline bele_constexpr unsigned get_le26(const XE32 *p) noexcept { return get_le32(p) & 0x03ffffff; } inline bele_constexpr unsigned get_le26(const XE32 *p) noexcept { return get_le32(p) & 0x03ffffff; }
@@ -1085,7 +1099,7 @@ TT_UPX_IS_INTEGRAL(LE32);
TT_UPX_IS_INTEGRAL(LE64); TT_UPX_IS_INTEGRAL(LE64);
#undef TT_UPX_IS_INTEGRAL #undef TT_UPX_IS_INTEGRAL
// native types // NE - Native Endianness (aka Host Endianness aka CPU Endianness)
#if (ACC_ABI_BIG_ENDIAN) #if (ACC_ABI_BIG_ENDIAN)
typedef BE16 NE16; typedef BE16 NE16;
typedef BE32 NE32; typedef BE32 NE32;
@@ -1096,7 +1110,7 @@ typedef BE64 NE64;
#define ne16_compare_signed be16_compare_signed #define ne16_compare_signed be16_compare_signed
#define ne32_compare_signed be32_compare_signed #define ne32_compare_signed be32_compare_signed
#define ne64_compare_signed be64_compare_signed #define ne64_compare_signed be64_compare_signed
#else #elif (ACC_ABI_LITTLE_ENDIAN)
typedef LE16 NE16; typedef LE16 NE16;
typedef LE32 NE32; typedef LE32 NE32;
typedef LE64 NE64; typedef LE64 NE64;
@@ -1106,6 +1120,8 @@ typedef LE64 NE64;
#define ne16_compare_signed le16_compare_signed #define ne16_compare_signed le16_compare_signed
#define ne32_compare_signed le32_compare_signed #define ne32_compare_signed le32_compare_signed
#define ne64_compare_signed le64_compare_signed #define ne64_compare_signed le64_compare_signed
#else
#error "ACC_ABI_ENDIAN"
#endif #endif
/************************************************************************* /*************************************************************************
+3 -3
View File
@@ -135,7 +135,7 @@ struct BEPolicy final
S u32_compare_signed(const void *a, const void *b) C { return be32_compare_signed(a, b); } S u32_compare_signed(const void *a, const void *b) C { return be32_compare_signed(a, b); }
S u64_compare_signed(const void *a, const void *b) C { return be64_compare_signed(a, b); } S u64_compare_signed(const void *a, const void *b) C { return be64_compare_signed(a, b); }
static void compileTimeAssertions() { static void compileTimeAssertions() noexcept {
COMPILE_TIME_ASSERT(sizeof(U16) == 2) COMPILE_TIME_ASSERT(sizeof(U16) == 2)
COMPILE_TIME_ASSERT(sizeof(U32) == 4) COMPILE_TIME_ASSERT(sizeof(U32) == 4)
COMPILE_TIME_ASSERT(sizeof(U64) == 8) COMPILE_TIME_ASSERT(sizeof(U64) == 8)
@@ -194,7 +194,7 @@ struct LEPolicy final
S u32_compare_signed(const void *a, const void *b) C { return le32_compare_signed(a, b); } S u32_compare_signed(const void *a, const void *b) C { return le32_compare_signed(a, b); }
S u64_compare_signed(const void *a, const void *b) C { return le64_compare_signed(a, b); } S u64_compare_signed(const void *a, const void *b) C { return le64_compare_signed(a, b); }
static void compileTimeAssertions() { static void compileTimeAssertions() noexcept {
COMPILE_TIME_ASSERT(sizeof(U16) == 2) COMPILE_TIME_ASSERT(sizeof(U16) == 2)
COMPILE_TIME_ASSERT(sizeof(U32) == 4) COMPILE_TIME_ASSERT(sizeof(U32) == 4)
COMPILE_TIME_ASSERT(sizeof(U64) == 8) COMPILE_TIME_ASSERT(sizeof(U64) == 8)
@@ -210,7 +210,7 @@ private:
UPX_CXX_DISABLE_NEW_DELETE(LEPolicy) UPX_CXX_DISABLE_NEW_DELETE(LEPolicy)
}; };
// Native Endianness policy (aka host policy) // NE - Native Endianness policy (aka Host Policy)
#if (ACC_ABI_BIG_ENDIAN) #if (ACC_ABI_BIG_ENDIAN)
typedef BEPolicy NEPolicy; typedef BEPolicy NEPolicy;
typedef BEPolicy HostPolicy; typedef BEPolicy HostPolicy;
+10 -5
View File
@@ -262,7 +262,7 @@ ASSERT_SAME_TYPE(short, upx_int16_t);
ASSERT_SAME_TYPE(unsigned short, upx_uint16_t); ASSERT_SAME_TYPE(unsigned short, upx_uint16_t);
ASSERT_SAME_TYPE(int, upx_int32_t); ASSERT_SAME_TYPE(int, upx_int32_t);
ASSERT_SAME_TYPE(unsigned, upx_uint32_t); ASSERT_SAME_TYPE(unsigned, upx_uint32_t);
#if (__SIZEOF_LONG_LONG__ + 0 < 128) #if (__SIZEOF_LONG_LONG__ + 0 < 16)
ASSERT_SAME_TYPE(long long, upx_int64_t); ASSERT_SAME_TYPE(long long, upx_int64_t);
ASSERT_SAME_TYPE(unsigned long long, upx_uint64_t); ASSERT_SAME_TYPE(unsigned long long, upx_uint64_t);
#endif #endif
@@ -1101,14 +1101,14 @@ void upx_compiler_sanity_check(void) noexcept {
assert_noexcept(TestBELE<BE32>::test()); assert_noexcept(TestBELE<BE32>::test());
assert_noexcept(TestBELE<BE64>::test()); assert_noexcept(TestBELE<BE64>::test());
{ {
alignas(16) static constexpr byte dd[32] = { alignas(16) static constexpr const byte dd[32] = {
0, 0, 0, 0, 0, 0, 0, 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0,
0, 0, 0, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0, 0, 0, 0, 0}; 0, 0, 0, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0, 0, 0, 0, 0};
constexpr const byte *d = dd + 7;
#if !defined(upx_fake_alignas_16) #if !defined(upx_fake_alignas_16)
assert_noexcept(ptr_is_aligned<16>(dd)); assert_noexcept(ptr_is_aligned<16>(dd));
assert_noexcept(ptr_is_aligned(dd, 16)); assert_noexcept(ptr_is_aligned(dd, 16));
#endif #endif
constexpr const byte *d = dd + 7;
static_assert(upx::compile_time::get_be16(d) == 0xfffe); static_assert(upx::compile_time::get_be16(d) == 0xfffe);
static_assert(upx::compile_time::get_be24(d) == 0xfffefd); static_assert(upx::compile_time::get_be24(d) == 0xfffefd);
static_assert(upx::compile_time::get_be32(d) == 0xfffefdfc); static_assert(upx::compile_time::get_be32(d) == 0xfffefdfc);
@@ -1117,10 +1117,10 @@ void upx_compiler_sanity_check(void) noexcept {
static_assert(upx::compile_time::get_le24(d) == 0xfdfeff); static_assert(upx::compile_time::get_le24(d) == 0xfdfeff);
static_assert(upx::compile_time::get_le32(d) == 0xfcfdfeff); static_assert(upx::compile_time::get_le32(d) == 0xfcfdfeff);
static_assert(upx::compile_time::get_le64(d) == 0xf8f9fafbfcfdfeffULL); static_assert(upx::compile_time::get_le64(d) == 0xf8f9fafbfcfdfeffULL);
const N_BELE_RTP::AbstractPolicy *bele;
assert_noexcept(upx_adler32(d, 4) == 0x09f003f7); assert_noexcept(upx_adler32(d, 4) == 0x09f003f7);
assert_noexcept(upx_adler32(d, 4, 0) == 0x09ec03f6); assert_noexcept(upx_adler32(d, 4, 0) == 0x09ec03f6);
assert_noexcept(upx_adler32(d, 4, 1) == 0x09f003f7); assert_noexcept(upx_adler32(d, 4, 1) == 0x09f003f7);
const N_BELE_RTP::AbstractPolicy *bele;
bele = &N_BELE_RTP::be_policy; bele = &N_BELE_RTP::be_policy;
assert_noexcept(get_be16(d) == 0xfffe); assert_noexcept(get_be16(d) == 0xfffe);
assert_noexcept(bele->get16(d) == 0xfffe); assert_noexcept(bele->get16(d) == 0xfffe);
@@ -1292,6 +1292,9 @@ void upx_compiler_sanity_check(void) noexcept {
assert_noexcept(testNoAliasing(&u.v_int, &u.v_llong)); assert_noexcept(testNoAliasing(&u.v_int, &u.v_llong));
assert_noexcept(testNoAliasing(&u.v_long, &u.v_llong)); assert_noexcept(testNoAliasing(&u.v_long, &u.v_llong));
#if 1 && (ACC_CC_MSC) && (defined(_M_ARM64) || defined(_M_ARM64EC))
// @COMPILER_BUG @MSVC_BUG
#else
assert_noexcept(TestIntegerWrap<unsigned>::inc_gt(0)); assert_noexcept(TestIntegerWrap<unsigned>::inc_gt(0));
assert_noexcept(!TestIntegerWrap<unsigned>::inc_gt(UINT_MAX)); assert_noexcept(!TestIntegerWrap<unsigned>::inc_gt(UINT_MAX));
assert_noexcept(TestIntegerWrap<unsigned>::dec_lt(1)); assert_noexcept(TestIntegerWrap<unsigned>::dec_lt(1));
@@ -1308,6 +1311,7 @@ void upx_compiler_sanity_check(void) noexcept {
assert_noexcept(!TestIntegerWrap<int>::neg_eq(1)); assert_noexcept(!TestIntegerWrap<int>::neg_eq(1));
assert_noexcept(!TestIntegerWrap<int>::neg_eq(INT_MAX)); assert_noexcept(!TestIntegerWrap<int>::neg_eq(INT_MAX));
assert_noexcept(TestIntegerWrap<int>::neg_eq(INT_MIN)); // special case assert_noexcept(TestIntegerWrap<int>::neg_eq(INT_MIN)); // special case
#endif
} }
/************************************************************************* /*************************************************************************
@@ -1463,7 +1467,8 @@ TEST_CASE("libc qsort") {
return true; return true;
} }
}; };
constexpr size_t N = 4096;
constexpr size_t N = 256;
Elem e[N]; Elem e[N];
for (size_t n = 0; n <= N; n = 2 * n + 1) { for (size_t n = 0; n <= N; n = 2 * n + 1) {
// system sort functions // system sort functions
+3 -3
View File
@@ -770,7 +770,7 @@ static_assert(sizeof(TestCT) == 8);
static_assert(alignof(TestCT) == 1); static_assert(alignof(TestCT) == 1);
} // namespace } // namespace
TEST_CASE("upx::compile_time") { TEST_CASE("upx::compile_time 1") {
constexpr upx_uint16_t v16 = 0x0201; constexpr upx_uint16_t v16 = 0x0201;
constexpr upx_uint32_t v24 = 0x030201; constexpr upx_uint32_t v24 = 0x030201;
constexpr upx_uint32_t v32 = 0x04030201; constexpr upx_uint32_t v32 = 0x04030201;
@@ -867,7 +867,7 @@ TEST_CASE("upx::compile_time") {
constexpr auto le64 = TestCT::makeLE64(v64); constexpr auto le64 = TestCT::makeLE64(v64);
static_assert(upx::compile_time::get_le64(le64.d) == v64); static_assert(upx::compile_time::get_le64(le64.d) == v64);
static_assert(mem_eq(le64.d, "\x01\x02\x03\x04\x05\x06\x07\x08", 8)); static_assert(mem_eq(le64.d, "\x01\x02\x03\x04\x05\x06\x07\x08", 8));
memset(buf, 0, 8); upx::compile_time::mem_clear(buf, 8);
TestCT::noinline_set_le64(buf, v64); TestCT::noinline_set_le64(buf, v64);
assert_noexcept(TestCT::noinline_get_le64(buf) == v64); assert_noexcept(TestCT::noinline_get_le64(buf) == v64);
assert_noexcept(upx::compile_time::get_le64(buf) == v64); assert_noexcept(upx::compile_time::get_le64(buf) == v64);
@@ -888,7 +888,7 @@ TEST_CASE("upx::compile_time") {
} }
} }
TEST_CASE("upx::compile_time") { TEST_CASE("upx::compile_time 2") {
constexpr upx_uint16_t v16 = 0xf2f1; constexpr upx_uint16_t v16 = 0xf2f1;
constexpr upx_uint32_t v24 = 0xf3f2f1; constexpr upx_uint32_t v24 = 0xf3f2f1;
constexpr upx_uint32_t v32 = 0xf4f3f2f1; constexpr upx_uint32_t v32 = 0xf4f3f2f1;
+2
View File
@@ -68,7 +68,9 @@
#endif #endif
#endif #endif
// NOLINTBEGIN(bugprone-unintended-char-ostream-output)
#include <doctest/doctest/parts/doctest.cpp> #include <doctest/doctest/parts/doctest.cpp>
// NOLINTEND(bugprone-unintended-char-ostream-output)
#endif // DOCTEST_CONFIG_DISABLE #endif // DOCTEST_CONFIG_DISABLE
+189 -6
View File
@@ -101,9 +101,6 @@ TEST_CASE("basic xspan usage") {
CHECK(b0.raw_size_in_bytes() == 0u); CHECK(b0.raw_size_in_bytes() == 0u);
CHECK(bp.raw_size_in_bytes() == 0u); CHECK(bp.raw_size_in_bytes() == 0u);
#endif #endif
CHECK(raw_bytes(b0, 999999) == buf);
CHECK(raw_bytes(bp, 999999) == buf);
CHECK(raw_bytes(c0, 4) == buf); CHECK(raw_bytes(c0, 4) == buf);
CHECK(raw_index_bytes(c0, 1, 3) == buf + 1); CHECK(raw_index_bytes(c0, 1, 3) == buf + 1);
CHECK(raw_bytes(cp, 4) == buf); CHECK(raw_bytes(cp, 4) == buf);
@@ -180,9 +177,6 @@ TEST_CASE("basic xspan usage") {
CHECK(b0.raw_size_in_bytes() == 0u); CHECK(b0.raw_size_in_bytes() == 0u);
CHECK(bp.raw_size_in_bytes() == 0u); CHECK(bp.raw_size_in_bytes() == 0u);
#endif #endif
CHECK(raw_bytes(b0, 999999) == buf);
CHECK(raw_bytes(bp, 999999) == buf);
CHECK(raw_bytes(c0, 4) == buf); CHECK(raw_bytes(c0, 4) == buf);
CHECK(raw_index_bytes(c0, 1, 3) == buf + 1); CHECK(raw_index_bytes(c0, 1, 3) == buf + 1);
CHECK(raw_bytes(cp, 4) == buf); CHECK(raw_bytes(cp, 4) == buf);
@@ -876,6 +870,195 @@ TEST_CASE("PtrOrSpan int") {
CHECK(a == buf + 8); CHECK(a == buf + 8);
} }
/*************************************************************************
//
**************************************************************************/
#ifdef UPX_VERSION_HEX
namespace {
template <class T>
static noinline void check_bele_a(const T &mb, size_t i) {
if (i < 2) {
CHECK_THROWS(get_ne16(mb));
CHECK_THROWS(get_be16(mb));
CHECK_THROWS(get_le16(mb));
CHECK_THROWS(set_ne16(mb, 0));
CHECK_THROWS(set_be16(mb, 0));
CHECK_THROWS(set_le16(mb, 0));
} else {
CHECK_NOTHROW(get_ne16(mb));
CHECK_NOTHROW(get_be16(mb));
CHECK_NOTHROW(get_le16(mb));
CHECK_NOTHROW(set_ne16(mb, 0));
CHECK_NOTHROW(set_be16(mb, 0));
CHECK_NOTHROW(set_le16(mb, 0));
}
if (i < 3) {
CHECK_THROWS(get_ne24(mb));
CHECK_THROWS(get_be24(mb));
CHECK_THROWS(get_le24(mb));
CHECK_THROWS(set_ne24(mb, 0));
CHECK_THROWS(set_be24(mb, 0));
CHECK_THROWS(set_le24(mb, 0));
} else {
CHECK_NOTHROW(get_ne24(mb));
CHECK_NOTHROW(get_be24(mb));
CHECK_NOTHROW(get_le24(mb));
CHECK_NOTHROW(set_ne24(mb, 0));
CHECK_NOTHROW(set_be24(mb, 0));
CHECK_NOTHROW(set_le24(mb, 0));
}
if (i < 4) {
CHECK_THROWS(get_ne32(mb));
CHECK_THROWS(get_be32(mb));
CHECK_THROWS(get_le32(mb));
CHECK_THROWS(set_ne32(mb, 0));
CHECK_THROWS(set_be32(mb, 0));
CHECK_THROWS(set_le32(mb, 0));
} else {
CHECK_NOTHROW(get_ne32(mb));
CHECK_NOTHROW(get_be32(mb));
CHECK_NOTHROW(get_le32(mb));
CHECK_NOTHROW(set_ne32(mb, 0));
CHECK_NOTHROW(set_be32(mb, 0));
CHECK_NOTHROW(set_le32(mb, 0));
}
if (i < 8) {
CHECK_THROWS(get_ne64(mb));
CHECK_THROWS(get_be64(mb));
CHECK_THROWS(get_le64(mb));
CHECK_THROWS(set_ne64(mb, 0));
CHECK_THROWS(set_be64(mb, 0));
CHECK_THROWS(set_le64(mb, 0));
} else {
CHECK_NOTHROW(get_ne64(mb));
CHECK_NOTHROW(get_be64(mb));
CHECK_NOTHROW(get_le64(mb));
CHECK_NOTHROW(set_ne64(mb, 0));
CHECK_NOTHROW(set_be64(mb, 0));
CHECK_NOTHROW(set_le64(mb, 0));
}
}
template <class T>
static noinline void check_bele_c(const T &mb, size_t i) {
if (i < 2) {
CHECK_THROWS(get_ne16(mb));
CHECK_THROWS(get_be16(mb));
CHECK_THROWS(get_le16(mb));
} else {
CHECK_NOTHROW(get_ne16(mb));
CHECK_NOTHROW(get_be16(mb));
CHECK_NOTHROW(get_le16(mb));
}
if (i < 3) {
CHECK_THROWS(get_ne24(mb));
CHECK_THROWS(get_be24(mb));
CHECK_THROWS(get_le24(mb));
} else {
CHECK_NOTHROW(get_ne24(mb));
CHECK_NOTHROW(get_be24(mb));
CHECK_NOTHROW(get_le24(mb));
}
if (i < 4) {
CHECK_THROWS(get_ne32(mb));
CHECK_THROWS(get_be32(mb));
CHECK_THROWS(get_le32(mb));
} else {
CHECK_NOTHROW(get_ne32(mb));
CHECK_NOTHROW(get_be32(mb));
CHECK_NOTHROW(get_le32(mb));
}
if (i < 8) {
CHECK_THROWS(get_ne64(mb));
CHECK_THROWS(get_be64(mb));
CHECK_THROWS(get_le64(mb));
} else {
CHECK_NOTHROW(get_ne64(mb));
CHECK_NOTHROW(get_be64(mb));
CHECK_NOTHROW(get_le64(mb));
}
}
} // namespace
#endif // UPX_VERSION_HEX
TEST_CASE("xspan global overloads") {
byte buf_a[16] = {};
const byte buf_c[16] = {};
for (size_t i = 0; i < 16; i++) {
XSPAN_0_VAR(byte, a0, buf_a, i);
XSPAN_P_VAR(byte, ap, buf_a, i);
XSPAN_S_VAR(byte, as, buf_a, i);
XSPAN_0_VAR(const byte, c0, buf_c, i);
XSPAN_P_VAR(const byte, cp, buf_c, i);
XSPAN_S_VAR(const byte, cs, buf_c, i);
#ifdef UPX_VERSION_HEX
check_bele_a(a0, i);
check_bele_a(ap, i);
check_bele_a(as, i);
check_bele_c(c0, i);
check_bele_c(cp, i);
check_bele_c(cs, i);
CHECK_THROWS(upx_adler32(a0, i + 1));
CHECK_THROWS(upx_adler32(ap, i + 1));
CHECK_THROWS(upx_adler32(as, i + 1));
CHECK_THROWS(upx_adler32(c0, i + 1));
CHECK_THROWS(upx_adler32(cp, i + 1));
CHECK_THROWS(upx_adler32(cs, i + 1));
if (i == 0) {
CHECK_THROWS(upx_safe_strlen(a0));
CHECK_THROWS(upx_safe_strlen(ap));
CHECK_THROWS(upx_safe_strlen(as));
CHECK_THROWS(upx_safe_strlen(c0));
CHECK_THROWS(upx_safe_strlen(cp));
CHECK_THROWS(upx_safe_strlen(cs));
}
#endif
CHECK_THROWS(memchr(a0, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memchr(ap, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memchr(as, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memchr(c0, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memchr(cp, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memchr(cs, 0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK(memcmp(a0, a0, i) == 0);
CHECK(memcmp(ap, a0, i) == 0);
CHECK(memcmp(as, a0, i) == 0);
CHECK_THROWS(memcmp(a0, a0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memcmp(ap, a0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_THROWS(memcmp(as, a0, i + 1)); // NOLINT(bugprone-unused-return-value)
CHECK_NOTHROW(memcpy(a0, c0, i));
CHECK_NOTHROW(memcpy(ap, cp, i));
CHECK_NOTHROW(memcpy(as, cs, i));
CHECK_THROWS(memcpy(a0, c0, i + 1));
CHECK_THROWS(memcpy(ap, cp, i + 1));
CHECK_THROWS(memcpy(as, cs, i + 1));
CHECK_NOTHROW(memmove(a0, c0, i));
CHECK_NOTHROW(memmove(ap, cp, i));
CHECK_NOTHROW(memmove(as, cs, i));
CHECK_THROWS(memmove(a0, c0, i + 1));
CHECK_THROWS(memmove(ap, cp, i + 1));
CHECK_THROWS(memmove(as, cs, i + 1));
CHECK_NOTHROW(memset(a0, 255, i));
CHECK_NOTHROW(memset(ap, 255, i));
CHECK_NOTHROW(memset(as, 255, i));
CHECK_THROWS(memset(a0, 254, i + 1));
CHECK_THROWS(memset(ap, 254, i + 1));
CHECK_THROWS(memset(as, 254, i + 1));
}
}
/************************************************************************* /*************************************************************************
// codegen // codegen
**************************************************************************/ **************************************************************************/
+3 -2
View File
@@ -248,8 +248,9 @@ static void __UCL_CDECL my_free(ucl_voidp p) { free(p); }
} // extern "C" } // extern "C"
int upx_ucl_init(void) { int upx_ucl_init(void) {
#if (ACC_CC_MSC && ACC_ARCH_I386) && (_MSC_VER >= 1940) #if 1 && (ACC_CC_MSC && ACC_ARCH_I386) && (_MSC_VER >= 1940)
(void) ucl_init(); // TODO later // @COMPILER_BUG @MSVC_BUG
(void) ucl_init();
#else #else
if (ucl_init() != UCL_E_OK) if (ucl_init() != UCL_E_OK)
return -1; return -1;
+13 -11
View File
@@ -100,6 +100,7 @@ static_assert((char) (-1) == 255); // -funsigned-char
#endif // UPX_CONFIG_DISABLE_WERROR #endif // UPX_CONFIG_DISABLE_WERROR
#endif // UPX_CONFIG_DISABLE_WSTRICT #endif // UPX_CONFIG_DISABLE_WSTRICT
// upx_is_constant_evaluated
#if __cplusplus >= 202002L // C++20 #if __cplusplus >= 202002L // C++20
#define upx_is_constant_evaluated std::is_constant_evaluated #define upx_is_constant_evaluated std::is_constant_evaluated
#elif __has_builtin(__builtin_is_constant_evaluated) // clang-9, gcc-10 #elif __has_builtin(__builtin_is_constant_evaluated) // clang-9, gcc-10
@@ -119,7 +120,7 @@ static_assert((char) (-1) == 255); // -funsigned-char
#define upx_std_atomic(Type) Type #define upx_std_atomic(Type) Type
#define upx_std_once_flag upx_std_atomic(size_t) #define upx_std_once_flag upx_std_atomic(size_t)
template <class NoexceptCallable> template <class NoexceptCallable>
inline void upx_std_call_once(upx_std_once_flag &flag, NoexceptCallable &&f) { inline void upx_std_call_once(upx_std_once_flag &flag, NoexceptCallable &&f) noexcept {
if (__acc_unlikely(!flag)) { if (__acc_unlikely(!flag)) {
flag = 1; flag = 1;
f(); f();
@@ -141,7 +142,7 @@ inline constexpr bool upx_is_integral_v = upx_is_integral<T>::value;
#define upx_fake_alignas_16 __attribute__((__aligned__(2))) // object file maximum 2 ??? #define upx_fake_alignas_16 __attribute__((__aligned__(2))) // object file maximum 2 ???
#define upx_fake_alignas__(x) upx_fake_alignas_##x #define upx_fake_alignas__(x) upx_fake_alignas_##x
#define alignas(x) upx_fake_alignas__(x) #define alignas(x) upx_fake_alignas__(x)
#define upx_alignas_max upx_fake_alignas_4 #define upx_alignas_max upx_fake_alignas_2
#endif #endif
#ifndef upx_alignas_max #ifndef upx_alignas_max
#define upx_alignas_max alignas(std::max_align_t) #define upx_alignas_max alignas(std::max_align_t)
@@ -197,11 +198,7 @@ struct alignas(1) upx_charptr_unit_type final { char hidden__; };
static_assert(sizeof(upx_charptr_unit_type) == 1); static_assert(sizeof(upx_charptr_unit_type) == 1);
// using the system off_t was a bad idea even back in 199x... // using the system off_t was a bad idea even back in 199x...
#if (__SIZEOF_INT128__ == 16) && 0
typedef upx_int128_t upx_off_t;
#else
typedef long long upx_off_t; typedef long long upx_off_t;
#endif
#undef off_t #undef off_t
#if 0 #if 0
// TODO later cleanup: at some future point we can do this: // TODO later cleanup: at some future point we can do this:
@@ -234,7 +231,7 @@ typedef long long upx_off_t;
#define very_likely __acc_very_likely #define very_likely __acc_very_likely
#define very_unlikely __acc_very_unlikely #define very_unlikely __acc_very_unlikely
// cosmetic: explicitly annotate some functions which may throw exceptions // cosmetic: explicitly annotate some functions which may throw exceptions;
// note that noexcept(false) is the default for all C++ functions anyway // note that noexcept(false) is the default for all C++ functions anyway
#define may_throw noexcept(false) #define may_throw noexcept(false)
@@ -380,6 +377,7 @@ inline void NO_printf(const char *, ...) noexcept {}
inline void NO_fprintf(FILE *, const char *, ...) noexcept attribute_format(2, 3); inline void NO_fprintf(FILE *, const char *, ...) noexcept attribute_format(2, 3);
inline void NO_fprintf(FILE *, const char *, ...) noexcept {} inline void NO_fprintf(FILE *, const char *, ...) noexcept {}
// upx_memcmp_inline
#if __has_builtin(__builtin_memcmp) #if __has_builtin(__builtin_memcmp)
#define upx_memcmp_inline __builtin_memcmp #define upx_memcmp_inline __builtin_memcmp
#elif defined(__clang__) || defined(__GNUC__) #elif defined(__clang__) || defined(__GNUC__)
@@ -387,6 +385,8 @@ inline void NO_fprintf(FILE *, const char *, ...) noexcept {}
#else #else
#define upx_memcmp_inline memcmp #define upx_memcmp_inline memcmp
#endif #endif
// upx_memcpy_inline
#if __has_builtin(__builtin_memcpy_inline) && 0 // TODO later: clang constexpr limitation? #if __has_builtin(__builtin_memcpy_inline) && 0 // TODO later: clang constexpr limitation?
#define upx_memcpy_inline __builtin_memcpy_inline #define upx_memcpy_inline __builtin_memcpy_inline
#elif __has_builtin(__builtin_memcpy) #elif __has_builtin(__builtin_memcpy)
@@ -397,6 +397,7 @@ inline void NO_fprintf(FILE *, const char *, ...) noexcept {}
#define upx_memcpy_inline memcpy #define upx_memcpy_inline memcpy
#endif #endif
// upx_return_address()
#if defined(__wasi__) #if defined(__wasi__)
#define upx_return_address() nullptr #define upx_return_address() nullptr
#elif __has_builtin(__builtin_return_address) #elif __has_builtin(__builtin_return_address)
@@ -806,14 +807,15 @@ int upx_doctest_check();
// util/membuffer.h // util/membuffer.h
class MemBuffer; class MemBuffer;
void *membuffer_get_void_ptr(MemBuffer &mb) noexcept; void *membuffer_get_void_ptr(MemBuffer &mb) noexcept;
unsigned membuffer_get_size(MemBuffer &mb) noexcept; const void *membuffer_get_void_ptr(const MemBuffer &mb) noexcept;
unsigned membuffer_get_size_in_bytes(const MemBuffer &mb) noexcept;
// main.cpp // main.cpp
extern const char *progname; extern const char *progname;
bool main_set_exit_code(int ec); bool main_set_exit_code(int ec);
int main_get_options(int argc, char **argv); int main_get_options(int argc, char **argv);
void main_get_envoptions(); void main_get_envoptions();
int upx_main(int argc, char *argv[]) may_throw; noinline int upx_main(int argc, char *argv[]) may_throw;
// msg.cpp // msg.cpp
void printSetNl(int need_nl) noexcept; void printSetNl(int need_nl) noexcept;
@@ -830,8 +832,8 @@ void infoHeader();
void infoWriting(const char *what, upx_int64_t size); void infoWriting(const char *what, upx_int64_t size);
// work.cpp // work.cpp
void do_one_file(const char *iname, char *oname) may_throw; noinline void do_one_file(const char *iname, char *oname) may_throw;
int do_files(int i, int argc, char *argv[]) may_throw; noinline int do_files(int i, int argc, char *argv[]) may_throw;
// help.cpp // help.cpp
extern const char gitrev[]; extern const char gitrev[];
+4 -4
View File
@@ -200,15 +200,15 @@ noreturn void throwEOFException(const char *msg = nullptr, int e = 0) may_throw;
// some C++ template wizardry is needed to overload throwCantPack() for varargs // some C++ template wizardry is needed to overload throwCantPack() for varargs
template <class T> template <class T>
void throwCantPack(const T *, ...) DELETED_FUNCTION; void throwCantPack(const T *, ...) DELETED_FUNCTION;
template <>
noreturn void throwCantPack(const char *format, ...) may_throw attribute_format(1, 2);
template <class T> template <class T>
void throwCantUnpack(const T *, ...) DELETED_FUNCTION; void throwCantUnpack(const T *, ...) DELETED_FUNCTION;
template <>
noreturn void throwCantUnpack(const char *format, ...) may_throw attribute_format(1, 2);
template <class T> template <class T>
void throwInternalError(const T *, ...) DELETED_FUNCTION; void throwInternalError(const T *, ...) DELETED_FUNCTION;
template <> template <>
noreturn void throwCantPack(const char *format, ...) may_throw attribute_format(1, 2);
template <>
noreturn void throwCantUnpack(const char *format, ...) may_throw attribute_format(1, 2);
template <>
noreturn void throwInternalError(const char *format, ...) may_throw attribute_format(1, 2); noreturn void throwInternalError(const char *format, ...) may_throw attribute_format(1, 2);
/* vim:set ts=4 sw=4 et: */ /* vim:set ts=4 sw=4 et: */
+4 -3
View File
@@ -49,7 +49,7 @@ const char gitrev[] = UPX_VERSION_GITREV;
const char gitrev[1] = {0}; const char gitrev[1] = {0};
#endif #endif
void show_header(void) { void show_header() {
FILE *f = con_term; FILE *f = con_term;
int fg; int fg;
@@ -85,7 +85,7 @@ void show_header(void) {
// usage // usage
**************************************************************************/ **************************************************************************/
void show_usage(void) { void show_usage() {
FILE *f = con_term; FILE *f = con_term;
con_fprintf(f, "Usage: %s [-123456789dlthVL] [-qvfk] [-o file] %sfile..\n", progname, con_fprintf(f, "Usage: %s [-123456789dlthVL] [-qvfk] [-o file] %sfile..\n", progname,
@@ -342,6 +342,7 @@ void show_help(int verbose) {
fg = con_fg(f, fg); fg = con_fg(f, fg);
con_fprintf(f, con_fprintf(f,
" --preserve-build-id copy .gnu.note.build-id to compressed output\n" " --preserve-build-id copy .gnu.note.build-id to compressed output\n"
" --catch-sigsegv debug errors in hardware or de-compressor\n"
"\n"); "\n");
} }
// clang-format on // clang-format on
@@ -380,7 +381,7 @@ void show_help(int verbose) {
// license // license
**************************************************************************/ **************************************************************************/
void show_license(void) { void show_license() {
FILE *f = con_term; FILE *f = con_term;
show_header(); show_header();
+2 -1
View File
@@ -367,6 +367,8 @@ int ElfLinker::addLoader(const char *sname) {
return outputlen; return outputlen;
char *begin = strdup(sname); char *begin = strdup(sname);
assert(begin != nullptr);
const auto begin_deleter = upx::MallocDeleter(&begin, 1); // don't leak memory
char *end = begin + strlen(begin); char *end = begin + strlen(begin);
for (char *sect = begin; sect < end;) { for (char *sect = begin; sect < end;) {
for (char *tokend = sect; *tokend; tokend++) for (char *tokend = sect; *tokend; tokend++)
@@ -418,7 +420,6 @@ int ElfLinker::addLoader(const char *sname) {
} }
sect += strlen(sect) + 1; sect += strlen(sect) + 1;
} }
::free(begin);
return outputlen; return outputlen;
} }
+1 -1
View File
@@ -35,7 +35,7 @@ class ElfLinker /*not_final*/ : private upx::noncopyable {
friend class Packer; friend class Packer;
public: public:
const N_BELE_RTP::AbstractPolicy *const bele; // target endianness const N_BELE_RTP::AbstractPolicy *const bele; // TE - Target Endianness
protected: protected:
struct Section; struct Section;
struct Symbol; struct Symbol;
+12 -7
View File
@@ -67,12 +67,9 @@ static void handle_opterr(acc_getopt_p g, const char *f, void *v) {
static int exit_code = EXIT_OK; static int exit_code = EXIT_OK;
#if (WITH_GUI) #if (WITH_GUI)
static noinline void do_exit(void) { throw exit_code; } static noreturn void do_exit() { throw exit_code; }
#else #else
#if defined(__GNUC__) static noreturn void do_exit() {
static void do_exit(void) __attribute__((__noreturn__));
#endif
static void do_exit(void) {
static bool in_exit = false; static bool in_exit = false;
if (in_exit) if (in_exit)
@@ -115,7 +112,7 @@ static noinline void e_exit(int ec) {
do_exit(); do_exit();
} }
static noinline void e_usage(void) { static noinline void e_usage() {
if (opt->debug.getopt_throw_instead_of_exit) if (opt->debug.getopt_throw_instead_of_exit)
throw EXIT_USAGE; throw EXIT_USAGE;
show_usage(); show_usage();
@@ -217,7 +214,7 @@ static void check_and_update_options(int i, int argc) {
// misc // misc
**************************************************************************/ **************************************************************************/
static void e_help(void) { static void e_help() {
show_help(0); show_help(0);
e_exit(EXIT_USAGE); e_exit(EXIT_USAGE);
} }
@@ -585,6 +582,9 @@ static int do_option(int optc, const char *arg) {
case 525: // --exact case 525: // --exact
opt->exact = true; opt->exact = true;
break; break;
case 532: // --add-padding
opt->add_padding = true;
break;
// CRP - Compression Runtime Parameters (undocumented and subject to change) // CRP - Compression Runtime Parameters (undocumented and subject to change)
case 801: case 801:
getoptvar(&opt->crp.crp_ucl.c_flags, 0, 3, arg); getoptvar(&opt->crp.crp_ucl.c_flags, 0, 3, arg);
@@ -742,6 +742,9 @@ static int do_option(int optc, const char *arg) {
case 678: case 678:
opt->o_unix.android_old = true; opt->o_unix.android_old = true;
break; break;
case 679:
opt->o_unix.catch_sigsegv = true;
break;
// ps1/exe // ps1/exe
case 670: case 670:
opt->ps1_exe.boot_only = true; opt->ps1_exe.boot_only = true;
@@ -902,6 +905,7 @@ int main_get_options(int argc, char **argv) {
{"all-filters", 0x10, N, 523}, {"all-filters", 0x10, N, 523},
{"all-methods", 0x10, N, 524}, {"all-methods", 0x10, N, 524},
{"exact", 0x10, N, 525}, // user requires byte-identical decompression {"exact", 0x10, N, 525}, // user requires byte-identical decompression
{"add-padding", 0x10, N, 532}, // add padding to the packed file
{"filter", 0x31, N, 521}, // --filter= {"filter", 0x31, N, 521}, // --filter=
{"no-filter", 0x10, N, 522}, {"no-filter", 0x10, N, 522},
{"small", 0x10, N, 520}, {"small", 0x10, N, 520},
@@ -957,6 +961,7 @@ int main_get_options(int argc, char **argv) {
{"android-shlib", 0, N, 676}, {"android-shlib", 0, N, 676},
{"force-pie", 0x90, N, 677}, {"force-pie", 0x90, N, 677},
{"android-old", 0, N, 678}, {"android-old", 0, N, 678},
{"catch-sigsegv", 0, N, 679},
// ps1/exe // ps1/exe
{"boot-only", 0x90, N, 670}, {"boot-only", 0x90, N, 670},
{"no-align", 0x90, N, 671}, {"no-align", 0x90, N, 671},
+51
View File
@@ -0,0 +1,51 @@
static const char *getIdentstr_new(unsigned *size, int small) {
// IMPORTANT: we do NOT change "http://upx.sf.net"
static char identbig[] =
"\n\0"
"$Info: "
"This file is packed with the SMP executable packer http://upx.sf.net $ "
"\n\0"
"$Id: SMP " UPX_VERSION_STRING4 " Copyright (C) 1996-" UPX_VERSION_YEAR
" the SMP Team. All Rights Reserved. $"
"\n";
static char identsmall[] =
"\n"
"$Id: SMP "
"(C) 1996-" UPX_VERSION_YEAR " the SMP Team. All Rights Reserved. http://upx.sf.net $"
"\n";
static char identtiny[] = UPX_VERSION_STRING4;
static upx_std_once_flag init_done;
upx_std_call_once(init_done, []() noexcept {
if (opt->debug.fake_stub_version[0] || opt->debug.fake_stub_year[0]) {
struct Ident {
char *s;
int len;
};
static const Ident idents[] = {{identbig, (int) sizeof(identbig) - 1},
{identsmall, (int) sizeof(identsmall) - 1},
{identtiny, (int) sizeof(identtiny) - 1},
{nullptr, 0}};
for (const Ident *iter = idents; iter->s; ++iter) {
if (opt->debug.fake_stub_version[0])
mem_replace(iter->s, iter->len, UPX_VERSION_STRING4, 4,
opt->debug.fake_stub_version);
if (opt->debug.fake_stub_year[0])
mem_replace(iter->s, iter->len, UPX_VERSION_YEAR, 4, opt->debug.fake_stub_year);
}
}
});
if (small < 0)
small = opt->small;
if (small >= 2) {
*size = sizeof(identtiny);
return identtiny;
} else if (small >= 1) {
*size = sizeof(identsmall);
return identsmall;
} else {
*size = sizeof(identbig);
return identbig;
}
}
+1
View File
@@ -43,6 +43,7 @@ void Options::reset() noexcept {
#define opt ERROR_DO_NOT_USE_opt // self-protect against using the wrong variable #define opt ERROR_DO_NOT_USE_opt // self-protect against using the wrong variable
Options *const o = this; Options *const o = this;
mem_clear(o); mem_clear(o);
o->add_padding = false;
o->crp.reset(); o->crp.reset();
o->cmd = CMD_NONE; o->cmd = CMD_NONE;
+2
View File
@@ -75,6 +75,7 @@ struct Options final {
bool no_filter; // force no filter bool no_filter; // force no filter
bool prefer_ucl; // prefer UCL bool prefer_ucl; // prefer UCL
bool exact; // user requires byte-identical decompression bool exact; // user requires byte-identical decompression
bool add_padding;
// other options // other options
int backup; int backup;
@@ -162,6 +163,7 @@ struct Options final {
bool android_shlib; // keep some ElfXX_Shdr for dlopen() bool android_shlib; // keep some ElfXX_Shdr for dlopen()
bool android_old; // < Android_10 ==> no memfd_create, inconsistent __NR_ftruncate bool android_old; // < Android_10 ==> no memfd_create, inconsistent __NR_ftruncate
bool force_pie; // choose DF_1_PIE instead of is_shlib bool force_pie; // choose DF_1_PIE instead of is_shlib
bool catch_sigsegv; // to debug hardware or de-compressor
} o_unix; } o_unix;
struct { struct {
bool boot_only; bool boot_only;
+3 -1
View File
@@ -108,7 +108,8 @@ class Dummy {
/* Register usage information. */ // /* Register usage information. */ //
// PT_MIPS_RTPROC = 0x70000001, /* Runtime procedure table. */ // PT_MIPS_RTPROC = 0x70000001, /* Runtime procedure table. */
// PT_MIPS_OPTIONS = 0x70000002, // PT_MIPS_OPTIONS = 0x70000002,
PT_MIPS_ABIFLAGS = 0x70000003, /* FP mode requirement. */ PT_ARM_EXIDX = (0x70000000 + 1), /* ARM unwind segment. */
PT_MIPS_ABIFLAGS = 0x70000003, /* FP mode requirement. */
}; };
enum { // p_flags enum { // p_flags
@@ -148,6 +149,7 @@ class Dummy {
SHT_LOOS = 0x60000000, /* LOcal OS; SHT_ANDROID_REL{,A} is +1, +2 */ SHT_LOOS = 0x60000000, /* LOcal OS; SHT_ANDROID_REL{,A} is +1, +2 */
SHT_LOPROC = 0x70000000, /* Start of processor-specific */ SHT_LOPROC = 0x70000000, /* Start of processor-specific */
SHT_ARM_EXIDX = (SHT_LOPROC + 1), /* ARM unwind section. */
SHT_ARM_ATTRIBUTES = (SHT_LOPROC + 3), /* ARM attributes section. */ SHT_ARM_ATTRIBUTES = (SHT_LOPROC + 3), /* ARM attributes section. */
}; };
+93 -59
View File
@@ -487,17 +487,17 @@ PackLinuxElf32::slide_sh_offset(Elf32_Shdr *shdr)
{ {
unsigned sh_offset = get_te32(&shdr->sh_offset); unsigned sh_offset = get_te32(&shdr->sh_offset);
unsigned sh_addr = get_te32(&shdr->sh_addr); unsigned sh_addr = get_te32(&shdr->sh_addr);
char const *sh_name = get_te32(&shdr->sh_name) + shstrtab;
(void)sh_name; // convenience for debug
if (Elf32_Shdr::SHF_WRITE & get_te32(&shdr->sh_flags) if (Elf32_Shdr::SHF_WRITE & get_te32(&shdr->sh_flags)
|| (sh_offset && !sh_addr)) || (sh_offset && !sh_addr))
{ {
unsigned newoff = so_slide + sh_offset + (is_asl ? asl_delta : 0); unsigned newoff = so_slide + sh_offset + (is_asl ? asl_delta : 0);
if ((unsigned)this->file_size < newoff) { if (sh_addr // only check "real memory"
&& (unsigned)this->file_size < newoff) {
throwInternalError("bad slide %p %#x", shdr, (unsigned)so_slide); throwInternalError("bad slide %p %#x", shdr, (unsigned)so_slide);
} }
set_te32(&shdr->sh_offset, newoff); set_te32(&shdr->sh_offset, newoff);
if (sh_addr) // change only if non-zero
set_te32(&shdr->sh_addr,
so_slide + sh_addr + (is_asl ? asl_delta : 0));
return newoff; return newoff;
} }
return sh_offset; return sh_offset;
@@ -520,17 +520,17 @@ PackLinuxElf64::slide_sh_offset(Elf64_Shdr *shdr)
{ {
unsigned sh_offset = get_te64(&shdr->sh_offset); unsigned sh_offset = get_te64(&shdr->sh_offset);
unsigned sh_addr = get_te64(&shdr->sh_addr); unsigned sh_addr = get_te64(&shdr->sh_addr);
char const *sh_name = get_te32(&shdr->sh_name) + shstrtab;
(void)sh_name; // convenience for debug
if (Elf64_Shdr::SHF_WRITE & get_te64(&shdr->sh_flags) if (Elf64_Shdr::SHF_WRITE & get_te64(&shdr->sh_flags)
|| (sh_offset && !sh_addr)) || (sh_offset && !sh_addr))
{ {
unsigned newoff = so_slide + sh_offset + (is_asl ? asl_delta : 0); unsigned newoff = so_slide + sh_offset + (is_asl ? asl_delta : 0);
if ((unsigned)this->file_size < newoff) { if (sh_addr // only check "real memory"
&& (unsigned)this->file_size < newoff) {
throwInternalError("bad slide %p %#x", shdr, (unsigned)so_slide); throwInternalError("bad slide %p %#x", shdr, (unsigned)so_slide);
} }
set_te64(&shdr->sh_offset, newoff); set_te64(&shdr->sh_offset, newoff);
if (sh_addr) // change only if non-zero
set_te64(&shdr->sh_addr,
so_slide + sh_addr + (is_asl ? asl_delta : 0));
return newoff; return newoff;
} }
return sh_offset; return sh_offset;
@@ -641,25 +641,18 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft)
Elf32_Phdr *const phdr0 = (Elf32_Phdr *)lowmem.subref( Elf32_Phdr *const phdr0 = (Elf32_Phdr *)lowmem.subref(
"bad e_phoff", e_phoff, e_phnum * sizeof(Elf32_Phdr)); "bad e_phoff", e_phoff, e_phnum * sizeof(Elf32_Phdr));
Elf32_Phdr *phdr = phdr0; Elf32_Phdr *phdr = phdr0, *outp = phdr0;
upx_off_t off = fo->st_size(); // 64 bits upx_off_t off = fo->st_size(); // 64 bits
so_slide = 0; so_slide = 0;
for (unsigned j = 0; j < e_phnum; ++j, ++phdr) { for (unsigned j = 0; j < e_phnum; ++j, ++phdr) {
// p_vaddr and p_paddr do not change! // p_vaddr and p_paddr do not change!
unsigned const len = get_te32(&phdr->p_filesz);
unsigned const ioff = get_te32(&phdri[j].p_offset); // without asl_delta unsigned const ioff = get_te32(&phdri[j].p_offset); // without asl_delta
unsigned align= get_te32(&phdr->p_align); unsigned align= get_te32(&phdr->p_align);
unsigned const type = get_te32(&phdr->p_type); unsigned const type = get_te32(&phdr->p_type);
if (Elf32_Phdr::PT_INTERP==type) { unsigned const len = get_te32(&phdr->p_filesz);
// Rotate to highest position, so it can be lopped if (Elf32_Phdr::PT_INTERP==type
// by decrementing e_phnum. || Elf32_Phdr::PT_ARM_EXIDX==type) {
memcpy((unsigned char *)ibuf, phdr, sizeof(*phdr)); // extract /* OMIT */ continue; // OMIT: reference to compressed data
memmove(phdr, 1+phdr, (e_phnum - (1+ j))*sizeof(*phdr)); // overlapping
memcpy(&phdr[e_phnum - (1+ j)], (unsigned char *)ibuf, sizeof(*phdr)); // to top
--phdr; --e_phnum;
set_te16(&ehdri.e_phnum, e_phnum);
set_te16(&((Elf32_Ehdr *)(unsigned char *)lowmem)->e_phnum, e_phnum);
continue;
} }
if (PT_LOAD == type) { if (PT_LOAD == type) {
if (!ioff) { // first PT_LOAD must contain everything written so far if (!ioff) { // first PT_LOAD must contain everything written so far
@@ -707,12 +700,21 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft)
fo->seek(0, SEEK_END); fo->seek(0, SEEK_END);
} }
} }
continue; // all done with this PT_LOAD
} }
if (xct_off < ioff) { else if (Elf32_Phdr::PT_DYNAMIC == type
set_te32(&phdr->p_offset, so_slide + (is_asl ? asl_delta : 0) + ioff); || Elf32_Phdr::PT_GNU_RELRO == type) {
unsigned delta = so_slide + (is_asl ? asl_delta : 0);
set_te32(&phdr->p_offset, delta + ioff);
// unsigned x = get_te32(&phdr->p_vaddr);
// set_te32(&phdr->p_vaddr, delta + x);
// unsigned y = get_te32(&phdr->p_paddr);
// set_te32(&phdr->p_paddr, delta + y);
} }
*outp++ = *phdr; // propagate
} // end each Phdr } // end each Phdr
e_phnum = outp - phdr0;
set_te16(&ehdri.e_phnum, e_phnum);
set_te16(&((Elf32_Ehdr *)(unsigned char *)lowmem)->e_phnum, e_phnum);
if (sec_arm_attr || is_asl) { // must update Shdr.sh_offset for so_slide if (sec_arm_attr || is_asl) { // must update Shdr.sh_offset for so_slide
Elf32_Shdr *shdr = shdri; Elf32_Shdr *shdr = shdri;
@@ -769,6 +771,7 @@ off_t PackLinuxElf32::pack3(OutputFile *fo, Filter &ft)
return total_out; return total_out;
} }
// NYI 2025-12-10: should be updated from the Elf32::pack3 version
off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft) off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft)
{ {
if (!overlay_offset) { if (!overlay_offset) {
@@ -835,7 +838,7 @@ off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft)
Elf64_Phdr *const phdr0 = (Elf64_Phdr *)lowmem.subref( Elf64_Phdr *const phdr0 = (Elf64_Phdr *)lowmem.subref(
"bad e_phoff", e_phoff, e_phnum * sizeof(Elf64_Phdr)); "bad e_phoff", e_phoff, e_phnum * sizeof(Elf64_Phdr));
Elf64_Phdr *phdr = phdr0; Elf64_Phdr *phdr = phdr0, *outp = phdr0;
upx_off_t off = fo->st_size(); // 64 bits upx_off_t off = fo->st_size(); // 64 bits
so_slide = 0; so_slide = 0;
for (unsigned j = 0; j < e_phnum; ++j, ++phdr) { for (unsigned j = 0; j < e_phnum; ++j, ++phdr) {
@@ -845,16 +848,9 @@ off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft)
u64_t align= get_te64(&phdr->p_align); u64_t align= get_te64(&phdr->p_align);
unsigned const type = get_te32(&phdr->p_type); unsigned const type = get_te32(&phdr->p_type);
if (Elf64_Phdr::PT_INTERP==type) { if (Elf64_Phdr::PT_INTERP==type) {
// Rotate to highest position, so it can be lopped continue; // OMIT
// by decrementing e_phnum.
memcpy((unsigned char *)ibuf, phdr, sizeof(*phdr)); // extract
memmove(phdr, 1+phdr, (e_phnum - (1+ j))*sizeof(*phdr)); // overlapping
memcpy(&phdr[e_phnum - (1+ j)], (unsigned char *)ibuf, sizeof(*phdr)); // to top
--phdr; --e_phnum;
set_te16(&ehdri.e_phnum, e_phnum);
set_te16(&((Elf64_Ehdr *)(unsigned char *)lowmem)->e_phnum, e_phnum);
continue;
} }
*outp++ = *phdr; // propagate
if (PT_LOAD == type) { if (PT_LOAD == type) {
if (!ioff) { // first PT_LOAD must contain everything written so far if (!ioff) { // first PT_LOAD must contain everything written so far
set_te64(&phdr->p_filesz, sz_pack2 + lsize); // is this correct? set_te64(&phdr->p_filesz, sz_pack2 + lsize); // is this correct?
@@ -903,6 +899,9 @@ off_t PackLinuxElf64::pack3(OutputFile *fo, Filter &ft)
set_te64(&phdr->p_offset, so_slide + (is_asl ? asl_delta : 0) + ioff); set_te64(&phdr->p_offset, so_slide + (is_asl ? asl_delta : 0) + ioff);
} }
} // end each Phdr } // end each Phdr
e_phnum = outp - phdr0;
set_te16(&ehdri.e_phnum, e_phnum);
set_te16(&((Elf64_Ehdr *)(unsigned char *)lowmem)->e_phnum, e_phnum);
if (sec_arm_attr || is_asl) { // must update Shdr.sh_offset for so_slide if (sec_arm_attr || is_asl) { // must update Shdr.sh_offset for so_slide
// Update {DYNAMIC}.sh_offset by so_slide. // Update {DYNAMIC}.sh_offset by so_slide.
@@ -1681,7 +1680,11 @@ PackLinuxElf32::buildLinuxLoader(
|| this->e_machine==Elf32_Ehdr::EM_MIPS || this->e_machine==Elf32_Ehdr::EM_MIPS
) { // main program with ELF2 de-compressor ) { // main program with ELF2 de-compressor
addLoader("ELFMAINX"); addLoader("ELFMAINX");
if (this->e_machine==Elf32_Ehdr::EM_ARM) { // hardware is more problematic
if (opt->o_unix.catch_sigsegv && hasLoaderSection("ELFSIGSEGV"))
addLoader("ELFSIGSEGV");
addLoader("ELFMAINX2");
}
// Only if $ARCH-linux.elf-entry.S calls upx_mmap_and_fd instead of memfd_create // Only if $ARCH-linux.elf-entry.S calls upx_mmap_and_fd instead of memfd_create
if (this->e_machine != Elf32_Ehdr::EM_PPC if (this->e_machine != Elf32_Ehdr::EM_PPC
&& this->e_machine != Elf32_Ehdr::EM_MIPS) && this->e_machine != Elf32_Ehdr::EM_MIPS)
@@ -1700,6 +1703,8 @@ PackLinuxElf32::buildLinuxLoader(
relocateLoader(); relocateLoader();
} }
unsigned bb1; // aid for possible debugging NRV/UCL
void void
PackLinuxElf64::buildLinuxLoader( PackLinuxElf64::buildLinuxLoader(
upx_byte const *const proto, upx_byte const *const proto,
@@ -1871,7 +1876,14 @@ PackLinuxElf64::buildLinuxLoader(
|| this->e_machine==Elf64_Ehdr::EM_AARCH64 || this->e_machine==Elf64_Ehdr::EM_AARCH64
|| this->e_machine==Elf64_Ehdr::EM_PPC64 || this->e_machine==Elf64_Ehdr::EM_PPC64
) { // main program with ELF2 de-compressor ) { // main program with ELF2 de-compressor
addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR"); addLoader("ELFMAINX");
// NYI for PPC64 {
if (opt->o_unix.catch_sigsegv && hasLoaderSection("ELFSIGSEGV"))
addLoader("ELFSIGSEGV");
if (this->e_machine!=Elf64_Ehdr::EM_PPC64)
addLoader("ELFMAINX2");
// } end NYI for PPC64
addLoader("ELFMAINZ,FOLDEXEC,IDENTSTR");
if (this->e_machine==Elf64_Ehdr::EM_PPC64 if (this->e_machine==Elf64_Ehdr::EM_PPC64
&& ehdri.e_ident[Elf64_Ehdr::EI_DATA]==Elf64_Ehdr::ELFDATA2MSB) { && ehdri.e_ident[Elf64_Ehdr::EI_DATA]==Elf64_Ehdr::ELFDATA2MSB) {
addLoader("ELFMAINZe"); addLoader("ELFMAINZe");
@@ -6094,6 +6106,8 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
// Keep _Shdr for SHF_WRITE. // Keep _Shdr for SHF_WRITE.
// Discard _Shdr with (0==sh_addr), except _Shdr[0] // Discard _Shdr with (0==sh_addr), except _Shdr[0]
// Keep ARM_ATTRIBUTES // Keep ARM_ATTRIBUTES
// Remove .ARM.extab(PROGBITS) and .ARM.exidx(SHT_ARM_EXIDX)
// because they refer to compressed .text(PT_LOAD)
unsigned const want_types_mask = 0 unsigned const want_types_mask = 0
| 1u<<SHT_PROGBITS // see comment above, and special code below | 1u<<SHT_PROGBITS // see comment above, and special code below
| 1u<<SHT_HASH | 1u<<SHT_HASH
@@ -6168,30 +6182,14 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
|| (Elf32_Shdr::SHT_ARM_ATTRIBUTES == sh_type) || (Elf32_Shdr::SHT_ARM_ATTRIBUTES == sh_type)
) { ) {
*sh_out = *sh_in; // *sh_in is a candidate for fowarding *sh_out = *sh_in; // *sh_in is a candidate for fowarding
if (sh_offset > xct_off) { // may slide down: earlier compression
if (sh_offset >= xct_off_hi) { // easy: so_slide down
if (Elf32_Shdr::SHT_ARM_ATTRIBUTES != sh_type) {
slide_sh_offset(sh_out);
}
}
else { // somewhere in compressed; try proportional (aligned)
// But note that PROGBITS without SHF_ALLOC
// will be dropped below.
u32_t const slice = xct_off + (~0xFu & (unsigned)(
(sh_offset - xct_off) *
((sh_offset - xct_off) / (float)(xct_off_hi - xct_off))));
//set_te32(&sh_out->sh_addr, slice);
set_te32(&sh_out->sh_offset, slice);
}
u32_t const max_sz = total_out - get_te32(&sh_out->sh_offset);
if (sh_size > max_sz) { // avoid complaint "extends beyond EOF"
set_te32(&sh_out->sh_size, max_sz);
}
}
if (j == e_shstrndx) { // changes Elf32_Ehdr itself if (j == e_shstrndx) { // changes Elf32_Ehdr itself
set_te16(&eho->e_shstrndx, sh_out - set_te16(&eho->e_shstrndx, sh_out -
(Elf32_Shdr *)mb_shdro.getVoidPtr()); (Elf32_Shdr *)mb_shdro.getVoidPtr());
} }
if (Elf32_Shdr::SHT_ARM_EXIDX == sh_type
|| 0==strcmp(".ARM.extab", name)) {
/* OMIT */ continue; // OMIT: compressed contents
}
if (Elf32_Shdr::SHT_ARM_ATTRIBUTES == sh_type if (Elf32_Shdr::SHT_ARM_ATTRIBUTES == sh_type
|| (SHT_NOTE == sh_type && xct_off < sh_offset) || (SHT_NOTE == sh_type && xct_off < sh_offset)
) { // append a copy ) { // append a copy
@@ -6205,7 +6203,7 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
if (!(Elf32_Shdr::SHF_ALLOC & sh_flags)) { if (!(Elf32_Shdr::SHF_ALLOC & sh_flags)) {
// .debug_*, .gnu_debuglink etc. Typically compressed // .debug_*, .gnu_debuglink etc. Typically compressed
// but not in RAM, and gdb (BFD) gets confused. // but not in RAM, and gdb (BFD) gets confused.
continue; // OMIT the commit: do not forward /* OMIT */ continue; // OMIT the commit: do not forward
} else } else
if (sh_offset <= xct_off if (sh_offset <= xct_off
&& 0 == strcmp(".text", name) ) { && 0 == strcmp(".text", name) ) {
@@ -6220,9 +6218,31 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
n_shstrsec = sh_out; n_shstrsec = sh_out;
} else } else
if (strcmp(".dynstr", name)) { if (strcmp(".dynstr", name)) {
continue; // OMIT the commit of non-global symbol names /* OMIT */ continue; // OMIT the commit of non-global symbol names
} }
} }
if (sh_offset > xct_off) { // may slide down: earlier compression
if (sh_offset >= xct_off_hi) { // easy: so_slide down
if (Elf32_Shdr::SHT_ARM_ATTRIBUTES != sh_type
// && Elf32_Shdr::SHT_ARM_EXIDX != sh_type
) {
slide_sh_offset(sh_out);
}
}
else { // somewhere in compressed; try proportional (aligned)
// Note that PROGBITS without SHF_ALLOC is already omitted.
u32_t const slice = xct_off + (~0xFu & (unsigned)(
(sh_offset - xct_off) *
((sh_offset - xct_off) / (float)(xct_off_hi - xct_off))));
//set_te32(&sh_out->sh_addr, slice);
set_te32(&sh_out->sh_offset, slice);
}
u32_t const max_sz = total_out - get_te32(&sh_out->sh_offset);
if (sh_size > max_sz) { // avoid complaint "extends beyond EOF"
set_te32(&sh_out->sh_size, max_sz);
}
}
// Will be forwarded, but needs a name.
set_te32(&sh_out->sh_name, ptr_shstrings - (char *)mb_shstrings.getVoidPtr()); set_te32(&sh_out->sh_name, ptr_shstrings - (char *)mb_shstrings.getVoidPtr());
do { // stupid MSVC lacks stpcpy() do { // stupid MSVC lacks stpcpy()
*ptr_shstrings++ = *name; *ptr_shstrings++ = *name;
@@ -6268,6 +6288,7 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
} }
} }
} }
UNUSED(ptr);
fo->seek(0, SEEK_SET); fo->seek(0, SEEK_SET);
fo->rewrite(eho, sizeof(*eho)); fo->rewrite(eho, sizeof(*eho));
@@ -6278,6 +6299,7 @@ unsigned PackLinuxElf32::forward_Shdrs(OutputFile *fo, Elf32_Ehdr *const eho)
return penalty; return penalty;
} }
// NYI 2025-12-10: should be merged from Elf32::forward_Shdrs
unsigned PackLinuxElf64::forward_Shdrs(OutputFile *fo, Elf64_Ehdr *const eho) unsigned PackLinuxElf64::forward_Shdrs(OutputFile *fo, Elf64_Ehdr *const eho)
{ {
if (!fo) { if (!fo) {
@@ -6289,7 +6311,9 @@ unsigned PackLinuxElf64::forward_Shdrs(OutputFile *fo, Elf64_Ehdr *const eho)
// Keep _Shdr for rtld data (below xct_off). // Keep _Shdr for rtld data (below xct_off).
// Discard _Shdr for compressed regions, except ".text" for gdb. // Discard _Shdr for compressed regions, except ".text" for gdb.
// Keep _Shdr with SHF_WRITE. // Keep _Shdr with SHF_WRITE.
// Keep ARM_ATTRIBUTES // Keep ARM_ATTRIBUTES.
// Remove .ARM.extab(PROGBITS) and .ARM.exidx(ARM_EXIDX)
// because they refer to compressed .text.
// Discard _Shdr with (0==sh_addr), except _Shdr[0] // Discard _Shdr with (0==sh_addr), except _Shdr[0]
unsigned const want_types_mask = unsigned const want_types_mask =
1u<<SHT_SYMTAB 1u<<SHT_SYMTAB
@@ -6337,7 +6361,6 @@ unsigned PackLinuxElf64::forward_Shdrs(OutputFile *fo, Elf64_Ehdr *const eho)
for (unsigned j = 1; j < e_shnum; ++j, ++sh_in) { for (unsigned j = 1; j < e_shnum; ++j, ++sh_in) {
char const *sh_name = &shstrtab[get_te32(&sh_in->sh_name)]; char const *sh_name = &shstrtab[get_te32(&sh_in->sh_name)];
(void)sh_name; // debugging
unsigned sh_type = get_te32(&sh_in->sh_type); unsigned sh_type = get_te32(&sh_in->sh_type);
u64_t sh_flags = get_te64(&sh_in->sh_flags); u64_t sh_flags = get_te64(&sh_in->sh_flags);
u64_t sh_addr = get_te64(&sh_in->sh_addr); u64_t sh_addr = get_te64(&sh_in->sh_addr);
@@ -6382,6 +6405,9 @@ unsigned PackLinuxElf64::forward_Shdrs(OutputFile *fo, Elf64_Ehdr *const eho)
set_te16(&eho->e_shstrndx, sh_out - set_te16(&eho->e_shstrndx, sh_out -
(Elf64_Shdr *)mb_shdro.getVoidPtr()); (Elf64_Shdr *)mb_shdro.getVoidPtr());
} }
if (0==strcmp(".ARM.extab", sh_name)) {
/* OMIT */ continue; // OMIT: compressed contents
}
if (j == e_shstrndx if (j == e_shstrndx
|| sec_arm_attr == sh_in || sec_arm_attr == sh_in
|| (SHT_NOTE == sh_type && xct_off < sh_offset) || (SHT_NOTE == sh_type && xct_off < sh_offset)
@@ -8663,6 +8689,7 @@ Elf32_Sym const *PackLinuxElf32::elf_lookup(char const *name) const
break; // end sentinel break; // end sentinel
} }
if (n_bucket) { if (n_bucket) {
void const *EOM = file_size + (char const *)file_image.getVoidPtr();
unsigned const m = elf_hash(name) % n_bucket; unsigned const m = elf_hash(name) % n_bucket;
unsigned n_visit = 0; unsigned n_visit = 0;
unsigned si; unsigned si;
@@ -8676,6 +8703,9 @@ Elf32_Sym const *PackLinuxElf32::elf_lookup(char const *name) const
return &dynsym[si]; return &dynsym[si];
if (l_sym <= &dynsym[n_visit++]) if (l_sym <= &dynsym[n_visit++])
throwCantPack("circular DT_HASH chain %d\n", si); throwCantPack("circular DT_HASH chain %d\n", si);
// Detect next si out-of-bounds
if ((unsigned)((unsigned int const *)EOM - chains) <= si)
throwCantPack("bad DT_HASH chain %d\n", si);
} }
} }
} }
@@ -8764,6 +8794,7 @@ Elf64_Sym const *PackLinuxElf64::elf_lookup(char const *name) const
break; //end break; //end
} }
if (n_bucket) { // -rust-musl can have "empty" hashtab if (n_bucket) { // -rust-musl can have "empty" hashtab
void const *const EOM = file_size + (char const *)file_image.getVoidPtr();
unsigned const m = elf_hash(name) % n_bucket; unsigned const m = elf_hash(name) % n_bucket;
unsigned n_visit = 0; unsigned n_visit = 0;
unsigned si; unsigned si;
@@ -8777,6 +8808,9 @@ Elf64_Sym const *PackLinuxElf64::elf_lookup(char const *name) const
return &dynsym[si]; return &dynsym[si];
if (l_sym <= &dynsym[n_visit++]) if (l_sym <= &dynsym[n_visit++])
throwCantPack("circular DT_HASH chain %d\n", si); throwCantPack("circular DT_HASH chain %d\n", si);
// Detect next si out-of-bounds
if ((unsigned)((unsigned int const *)EOM - chains) <= si)
throwCantPack("bad DT_HASH chain %d\n", si);
} }
} }
} }
+2
View File
@@ -1418,6 +1418,7 @@ void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e
unsigned const sz_threado = threado_size(); unsigned const sz_threado = threado_size();
MemBuffer space(sz_threado); memset(space, 0, sz_threado); MemBuffer space(sz_threado); memset(space, 0, sz_threado);
fo->write(space, sz_threado); fo->write(space, sz_threado);
UNUSED(cmdsize);
} }
else if (my_filetype == Mach_header::MH_DYLIB) { else if (my_filetype == Mach_header::MH_DYLIB) {
Mach_command const *ptr = (Mach_command const *)rawmseg; Mach_command const *ptr = (Mach_command const *)rawmseg;
@@ -1449,6 +1450,7 @@ void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e
} }
memset(&linkitem, 0, sizeof(linkitem)); memset(&linkitem, 0, sizeof(linkitem));
fo->write(&linkitem, sizeof(linkitem)); fo->write(&linkitem, sizeof(linkitem));
UNUSED(cmdsize);
} }
sz_mach_headers = fo->getBytesWritten(); sz_mach_headers = fo->getBytesWritten();
gap = secTEXT.offset - sz_mach_headers; gap = secTEXT.offset - sz_mach_headers;
+5 -1
View File
@@ -658,7 +658,11 @@ void PackUnix::unpack(OutputFile *fo)
fi->readx(&bhdr, szb_info); fi->readx(&bhdr, szb_info);
ph.u_len = sz_unc = get_te32(&bhdr.sz_unc); ph.u_len = sz_unc = get_te32(&bhdr.sz_unc);
ph.c_len = sz_cpr = get_te32(&bhdr.sz_cpr); ph.c_len = sz_cpr = get_te32(&bhdr.sz_cpr);
ph.set_method(bhdr.b_method); if (szb_info < sizeof(b_info)) { // some upx version 11
bhdr.b_method = ph.method;
bhdr.b_ftid = ph.filter;
bhdr.b_cto8 = ph.filter_cto;
}
if (sz_unc == 0) // uncompressed size 0 -> EOF if (sz_unc == 0) // uncompressed size 0 -> EOF
{ {
+3
View File
@@ -189,11 +189,14 @@ void PackW32PeI386::defineSymbols(unsigned ncsection, unsigned upxsection, unsig
linker->defineSymbol("vp_base", addr & ~0xfff); // page mask linker->defineSymbol("vp_base", addr & ~0xfff); // page mask
linker->defineSymbol("VirtualProtect", linker->defineSymbol("VirtualProtect",
0u - rvamin + ilinkerGetAddress("kernel32.dll", "VirtualProtect")); 0u - rvamin + ilinkerGetAddress("kernel32.dll", "VirtualProtect"));
} }
linker->defineSymbol("reloc_delt", 0u - (unsigned) ih.imagebase - rvamin); linker->defineSymbol("reloc_delt", 0u - (unsigned) ih.imagebase - rvamin);
linker->defineSymbol("start_of_relocs", crelocs); linker->defineSymbol("start_of_relocs", crelocs);
if (ilinker) { if (ilinker) {
linker->defineSymbol("VirtualProtect",
0u - rvamin + ilinkerGetAddress("kernel32.dll", "VirtualProtect"));
if (!isdll) if (!isdll)
linker->defineSymbol("ExitProcess", linker->defineSymbol("ExitProcess",
0u - rvamin + ilinkerGetAddress("kernel32.dll", "ExitProcess")); 0u - rvamin + ilinkerGetAddress("kernel32.dll", "ExitProcess"));
+3
View File
@@ -40,6 +40,7 @@
static const CLANG_FORMAT_DUMMY_STATEMENT static const CLANG_FORMAT_DUMMY_STATEMENT
#include "stub/amd64-win64.pe.h" #include "stub/amd64-win64.pe.h"
#include "stub/amd64-win64-msg.pe.h"
/************************************************************************* /*************************************************************************
// //
@@ -193,10 +194,12 @@ void PackW64PeAmd64::defineSymbols(unsigned ncsection, unsigned upxsection, unsi
"vp_size", ((addr & 0xfff) + 0x28 >= 0x1000) ? 0x2000 : 0x1000); // 2 pages or 1 page "vp_size", ((addr & 0xfff) + 0x28 >= 0x1000) ? 0x2000 : 0x1000); // 2 pages or 1 page
linker->defineSymbol("vp_base", addr & ~0xfff); // page mask linker->defineSymbol("vp_base", addr & ~0xfff); // page mask
linker->defineSymbol("VirtualProtect", ilinkerGetAddress("kernel32.dll", "VirtualProtect")); linker->defineSymbol("VirtualProtect", ilinkerGetAddress("kernel32.dll", "VirtualProtect"));
} }
linker->defineSymbol("start_of_relocs", crelocs); linker->defineSymbol("start_of_relocs", crelocs);
if (ilinker) { if (ilinker) {
linker->defineSymbol("VirtualProtect", ilinkerGetAddress("kernel32.dll", "VirtualProtect"));
if (!isdll) if (!isdll)
linker->defineSymbol("ExitProcess", ilinkerGetAddress("kernel32.dll", "ExitProcess")); linker->defineSymbol("ExitProcess", ilinkerGetAddress("kernel32.dll", "ExitProcess"));
linker->defineSymbol("GetProcAddress", ilinkerGetAddress("kernel32.dll", "GetProcAddress")); linker->defineSymbol("GetProcAddress", ilinkerGetAddress("kernel32.dll", "GetProcAddress"));
+32 -21
View File
@@ -93,6 +93,19 @@ void Packer::assertPacker() const {
void Packer::doPack(OutputFile *fo) { void Packer::doPack(OutputFile *fo) {
uip->uiPackStart(fo); uip->uiPackStart(fo);
pack(fo); pack(fo);
if (opt->add_padding) {
int kb = (upx_rand() % 13) + 3; // 3 to 15 kb
int padding_size = kb * 1024;
info("Adding %d KB of random overlay padding", kb);
char *padding = new char[padding_size];
for (int i = 0; i < padding_size; ++i) {
padding[i] = upx_rand() & 0xff;
}
fo->write(padding, padding_size);
delete[] padding;
}
uip->uiPackEnd(fo); uip->uiPackEnd(fo);
} }
@@ -706,21 +719,19 @@ int Packer::patch_le32(void *b, int blen, const void *old, unsigned new_) {
**************************************************************************/ **************************************************************************/
static const char *getIdentstr(unsigned *size, int small) { static const char *getIdentstr(unsigned *size, int small) {
// IMPORTANT: we do NOT change "http://upx.sf.net" // Modified to remove UPX detection strings
static char identbig[] = static char identbig[] = "\n\0"
"\n\0" "$Info: "
"$Info: " "This file is compressed with a binary packer $"
"This file is packed with the UPX executable packer http://upx.sf.net $" "\n\0"
"\n\0" "$Id: PACKER " UPX_VERSION_STRING4
"$Id: UPX " UPX_VERSION_STRING4 " Copyright (C) 1996-" UPX_VERSION_YEAR " Copyright (C) 1996-" UPX_VERSION_YEAR " Team. All Rights Reserved. $"
" the UPX Team. All Rights Reserved. $" "\n";
"\n"; static char identsmall[] = "\n"
static char identsmall[] = "$Id: PACK "
"\n" "(C) 1996-" UPX_VERSION_YEAR " Team. All Rights Reserved. $"
"$Id: UPX " "\n";
"(C) 1996-" UPX_VERSION_YEAR " the UPX Team. All Rights Reserved. http://upx.sf.net $" static char identtiny[] = "PACK";
"\n";
static char identtiny[] = UPX_VERSION_STRING4;
static upx_std_once_flag init_done; static upx_std_once_flag init_done;
upx_std_call_once(init_done, []() noexcept { upx_std_call_once(init_done, []() noexcept {
@@ -857,9 +868,9 @@ void Packer::relocateLoader() {
} }
/************************************************************************* /*************************************************************************
// void Packer::compressWithFilters(): // void Packer::compressWithFilters():
// Try compression with several methods and filters, choose the best // Try compression with several methods and filters, choose the best
/ or first working one. Needs buildLoader(). // or first working one. Needs buildLoader().
// //
// Required inputs: // Required inputs:
// this->ph // this->ph
@@ -1015,9 +1026,9 @@ void Packer::compressWithFilters(byte *i_ptr,
byte *const hdr_ptr, const unsigned hdr_len, byte *const hdr_ptr, const unsigned hdr_len,
Filter *const parm_ft, // updated Filter *const parm_ft, // updated
const unsigned overlap_range, const unsigned overlap_range,
upx_compress_config_t const *const cconf, const upx_compress_config_t *const cconf,
int filter_strategy, // in+out for prepareFilters int filter_strategy, // in+out for prepareFilters
bool const inhibit_compression_check) { const bool inhibit_compression_check) {
parm_ft->buf_len = f_len; parm_ft->buf_len = f_len;
// struct copies // struct copies
const PackHeader orig_ph = this->ph; const PackHeader orig_ph = this->ph;
@@ -1219,7 +1230,7 @@ void Packer::compressWithFilters(Filter *ft, const unsigned overlap_range,
} }
void Packer::compressWithFilters(Filter *ft, const unsigned overlap_range, void Packer::compressWithFilters(Filter *ft, const unsigned overlap_range,
upx_compress_config_t const *cconf, int filter_strategy, const upx_compress_config_t *cconf, int filter_strategy,
unsigned filter_off, unsigned ibuf_off, unsigned obuf_off, unsigned filter_off, unsigned ibuf_off, unsigned obuf_off,
byte *const hdr_ptr, unsigned hdr_len, byte *const hdr_ptr, unsigned hdr_len,
bool inhibit_compression_check) { bool inhibit_compression_check) {
+11 -11
View File
@@ -48,7 +48,7 @@ protected:
public: public:
virtual ~PackerBase() noexcept {} virtual ~PackerBase() noexcept {}
// getVersion() enables detecting forward incompatibility of unpack() // getVersion() enables detecting forward incompatibility of unpack()
// by old upx when newer upx changes the format of compressed output. // by old UPX when newer UPX changes the format of compressed output.
virtual int getVersion() const = 0; virtual int getVersion() const = 0;
// A unique integer ID for this executable format; see UPX_F_xxx in conf.h. // A unique integer ID for this executable format; see UPX_F_xxx in conf.h.
virtual int getFormat() const = 0; virtual int getFormat() const = 0;
@@ -58,11 +58,11 @@ public:
virtual const int *getFilters() const = 0; virtual const int *getFilters() const = 0;
// canPack() should throw a cantPackException explaining why it cannot pack // canPack() should throw a cantPackException explaining why it cannot pack
// a recognized format. // a recognized format.
// canPack() can also return -1 to fail early; see class PackMaster // canPack() can also return -1 to fail early; see class PackMaster
virtual tribool canPack() = 0; virtual tribool canPack() = 0;
// canUnpack() should throw a cantUnpackException explaining why it cannot unpack // canUnpack() should throw a cantUnpackException explaining why it cannot unpack
// a recognized format. // a recognized format.
// canUnpack() can also return -1 to fail early; see class PackMaster // canUnpack() can also return -1 to fail early; see class PackMaster
virtual tribool canUnpack() = 0; virtual tribool canUnpack() = 0;
@@ -162,7 +162,7 @@ protected:
unsigned f_len, // subset of [*i_ptr, +i_len) unsigned f_len, // subset of [*i_ptr, +i_len)
byte *const hdr_ptr, unsigned hdr_len, byte *const hdr_ptr, unsigned hdr_len,
Filter *parm_ft, // updated Filter *parm_ft, // updated
unsigned overlap_range, upx_compress_config_t const *cconf, unsigned overlap_range, const upx_compress_config_t *cconf,
int filter_strategy, bool inhibit_compression_check = false); int filter_strategy, bool inhibit_compression_check = false);
// util for verifying overlapping decompression // util for verifying overlapping decompression
@@ -248,7 +248,7 @@ protected:
int patch_le32(void *b, int blen, const void *old, unsigned new_); int patch_le32(void *b, int blen, const void *old, unsigned new_);
void checkPatch(void *b, int blen, int boff, int size); void checkPatch(void *b, int blen, int boff, int size);
// relocation util // relocation util [see packer_r.cpp]
static unsigned optimizeReloc(unsigned relocnum, SPAN_P(byte) relocs, SPAN_S(byte) out, static unsigned optimizeReloc(unsigned relocnum, SPAN_P(byte) relocs, SPAN_S(byte) out,
SPAN_P(byte) image, unsigned image_size, int bits, bool bswap, SPAN_P(byte) image, unsigned image_size, int bits, bool bswap,
int *big); int *big);
@@ -260,7 +260,7 @@ protected:
// permissive version using "void *" // permissive version using "void *"
inline unsigned get_te16(const void *p) const noexcept { return bele->get16(p); } inline unsigned get_te16(const void *p) const noexcept { return bele->get16(p); }
inline unsigned get_te32(const void *p) const noexcept { return bele->get32(p); } inline unsigned get_te32(const void *p) const noexcept { return bele->get32(p); }
inline unsigned get_te64_32(const void *p) const { return (unsigned) bele->get64(p); } inline unsigned get_te64_32(const void *p) const may_throw { return (unsigned) bele->get64(p); }
inline upx_uint64_t get_te64(const void *p) const noexcept { return bele->get64(p); } inline upx_uint64_t get_te64(const void *p) const noexcept { return bele->get64(p); }
inline void set_te16(void *p, unsigned v) noexcept { bele->set16(p, v); } inline void set_te16(void *p, unsigned v) noexcept { bele->set16(p, v); }
inline void set_te32(void *p, unsigned v) noexcept { bele->set32(p, v); } inline void set_te32(void *p, unsigned v) noexcept { bele->set32(p, v); }
@@ -293,11 +293,11 @@ protected:
return bele->get32(p); return bele->get32(p);
} }
template <class T, class = enable_if_te64<T> > template <class T, class = enable_if_te64<T> >
inline unsigned get_te64_32(const T *p) const { inline unsigned get_te64_32(const T *p) const may_throw {
upx_uint64_t val = get_te64(p); upx_uint64_t v = bele->get64(p);
if (val >> 32) if ((v >> 32) != 0)
throwCantPack("64-bit value too big %#llx", val); throwCantPack("64-bit value too big %#llx", v);
return (unsigned) val; return (unsigned) v;
} }
template <class T, class = enable_if_te64<T> > template <class T, class = enable_if_te64<T> >
inline upx_uint64_t get_te64(const T *p) const noexcept { inline upx_uint64_t get_te64(const T *p) const noexcept {
+3 -3
View File
@@ -39,12 +39,13 @@ struct PackHeader final {
~PackHeader() noexcept = default; ~PackHeader() noexcept = default;
void reset() noexcept; void reset() noexcept;
int set_method(int m, unsigned offset = 0); // check, then assign
int getPackHeaderSize() const;
void putPackHeader(SPAN_S(byte) p) const; void putPackHeader(SPAN_S(byte) p) const;
bool decodePackHeaderFromBuf(SPAN_S(const byte) b, int blen); bool decodePackHeaderFromBuf(SPAN_S(const byte) b, int blen);
int getPackHeaderSize() const;
// fields stored in compressed file => see stub/src/include/header.S // fields stored in compressed file => see stub/src/include/header.S
// enum { magic = UPX_MAGIC_LE32 }; // enum { magic = UPX_MAGIC_LE32 };
int version; int version;
@@ -63,7 +64,6 @@ struct PackHeader final {
int n_mru; // specific name for filter ctojr int n_mru; // specific name for filter ctojr
}; };
int header_checksum; int header_checksum;
int set_method(int m, unsigned offset = 0); // check, then assign
// support fields for verifying decompression // support fields for verifying decompression
unsigned saved_u_adler; unsigned saved_u_adler;
+2
View File
@@ -25,6 +25,8 @@
<markus@oberhumer.com> <ezerotven+github@gmail.com> <markus@oberhumer.com> <ezerotven+github@gmail.com>
*/ */
// dispatch to a concrete subclass of class PackerBase; see work.cpp
#include "conf.h" #include "conf.h"
#include "file.h" #include "file.h"
#include "packmast.h" #include "packmast.h"
+107 -39
View File
@@ -96,6 +96,7 @@ PeFile::PeFile(InputFile *f) : super(f) {
use_tls_callbacks = false; use_tls_callbacks = false;
oloadconf = nullptr; oloadconf = nullptr;
soloadconf = 0; soloadconf = 0;
dbgCET = nullptr;
isdll = false; isdll = false;
isrtm = false; isrtm = false;
@@ -944,11 +945,22 @@ public:
void PeFile::addKernelImport(const char *name) { ilinker->add_import(kernelDll(), name); } void PeFile::addKernelImport(const char *name) { ilinker->add_import(kernelDll(), name); }
void PeFile::addStubImports() { void PeFile::addStubImports() {
// Break UPX detection by ensuring import count doesn't match 2-6 pattern
addKernelImport("LoadLibraryA"); addKernelImport("LoadLibraryA");
addKernelImport("GetProcAddress");
if (!isdll)
addKernelImport("ExitProcess");
addKernelImport("VirtualProtect"); addKernelImport("VirtualProtect");
addKernelImport("GetProcAddress");
if (!isdll) {
// For EXEs: add extra imports to push count beyond 6 (breaks detection pattern)
addKernelImport("GetCurrentProcess");
addKernelImport("GetTickCount");
addKernelImport("QueryPerformanceCounter");
addKernelImport("GetSystemTimeAsFileTime");
addKernelImport("ExitProcess"); // Add last to avoid specific 2-4-6 patterns
} else {
// For DLLs: add minimal extra imports to break patterns
addKernelImport("GetCurrentProcess");
addKernelImport("GetTickCount");
}
} }
void PeFile::processImports2(unsigned myimport, unsigned) { // pass 2 void PeFile::processImports2(unsigned myimport, unsigned) { // pass 2
@@ -1479,30 +1491,39 @@ void PeFile::processTls2(Reloc *const rel, const Interval *const iv, unsigned ne
if (sotls == 0) if (sotls == 0)
return; return;
// add new relocation entries
// add new relocation entries
if (tls_handler_offset > 0 && tls_handler_offset_reloc > 0) if (tls_handler_offset > 0 && tls_handler_offset_reloc > 0)
rel->add_reloc(tls_handler_offset + tls_handler_offset_reloc, reloc_type); rel->add_reloc(tls_handler_offset + tls_handler_offset_reloc, reloc_type);
unsigned ic;
// NEW: if TLS callbacks are used, relocate the VA of the callback chain, too - Stefan Widmann // NEW: if TLS callbacks are used, relocate the VA of the callback chain, too - Stefan Widmann
for (ic = 0; ic < (use_tls_callbacks ? sizeof(LE32) * cb_size : (sizeof(LE32) - 1) * cb_size); for (unsigned ic = 0; ic < (unsigned) (use_tls_callbacks ? 4 : 3); ic++)
ic += cb_size) rel->add_reloc(newaddr + ic * cb_size, reloc_type);
rel->add_reloc(newaddr + ic, reloc_type);
SPAN_S_VAR(tls, const tlsp, mb_otls); SPAN_S_VAR(tls, const tlsp, mb_otls);
// now the relocation entries in the tls data area // now the relocation entries in the tls data area
for (ic = 0; ic < iv->ivnum; ic += sizeof(LE32)) { for (unsigned ic = 0; ic < iv->ivnum; ic++) {
SPAN_S_VAR(byte, const pp, SPAN_S_VAR(byte, const pp,
otls + (iv->ivarr[ic].start - (tlsp->datastart - imagebase) + sizeof(tls))); otls + (iv->ivarr[ic].start - (tlsp->datastart - imagebase) + sizeof(tls)));
LEXX *const p = (LEXX *) raw_bytes(pp, sizeof(LEXX)); LEXX *const p = (LEXX *) raw_bytes(pp, sizeof(LEXX));
cb_value_t kc = *p; cb_value_t kc = *p;
if (kc < tlsp->dataend && kc >= tlsp->datastart) { if (kc >= tlsp->datastart && kc < tlsp->dataend) {
// add a relocation entry referring to an address inside of the original tls data area
// - as the new tls area is moved, the referred address have to be also adjusted
kc += newaddr + sizeof(tls) - tlsp->datastart; kc += newaddr + sizeof(tls) - tlsp->datastart;
*p = kc + imagebase; *p = kc + imagebase;
rel->add_reloc(kc, iv->ivarr[ic].len); rel->add_reloc(kc, iv->ivarr[ic].len);
} else } else {
rel->add_reloc(kc - imagebase, iv->ivarr[ic].len); // add a relocation entry referring to an address outside of the original tls data area
// by adding the difference of the new tlsdatastart and the old tlsdatastart to
// the address of the original relocation record
const unsigned a =
iv->ivarr[ic].start + (newaddr + sizeof(tls)) - (tlsp->datastart - imagebase);
// Must not overwrite compressed data
if (a < newaddr && !opt->win32_pe.strip_relocs)
throwCantPack("relocation too low (%#x < %#x); try --strip-relocs", a, newaddr);
rel->add_reloc(a, iv->ivarr[ic].len);
}
} }
const unsigned tls_data_size = tlsp->dataend - tlsp->datastart; const unsigned tls_data_size = tlsp->dataend - tlsp->datastart;
@@ -1727,14 +1748,16 @@ PeFile::Resource::upx_rnode *PeFile::Resource::convert(const void *rnode, upx_rn
branch->parent = parent; branch->parent = parent;
branch->nc = ic; branch->nc = ic;
branch->children = New(upx_rnode *, ic); branch->children = New(upx_rnode *, ic);
// NOLINTNEXTLINE(bugprone-multi-level-implicit-pointer-conversion)
memset(branch->children, 0, sizeof(upx_rnode *) * ic);
branch->data = *node; branch->data = *node;
if (!root) // first one if (!root) // first one
root = branch; // prevent leak if xcheck throws (hacked unpack or test) root = branch; // prevent leak if xcheck throws (hacked unpack or test)
for (const res_dir_entry *rde = node->entries + ic - 1; --ic >= 0; rde--) { for (const res_dir_entry *rde = node->entries + ic - 1; --ic >= 0; rde--) {
upx_rnode *child = convert(start + (rde->child & 0x7fffffff), branch, level + 1); upx_rnode *child = convert(start + (rde->child & 0x7fffffff), branch, level + 1);
xcheck(child);
branch->children[ic] = child; branch->children[ic] = child;
xcheck(child);
child->id = rde->tnl; child->id = rde->tnl;
if (child->id & 0x80000000) { if (child->id & 0x80000000) {
const byte *p = start + (child->id & 0x7fffffff); const byte *p = start + (child->id & 0x7fffffff);
@@ -2083,25 +2106,32 @@ unsigned PeFile::stripDebug(unsigned overlaystart) {
if (IDADDR(PEDIR_DEBUG) == 0) if (IDADDR(PEDIR_DEBUG) == 0)
return overlaystart; return overlaystart;
struct alignas(1) DebugDir final {
byte _[16]; // flags, time/date, version, type
LE32 size;
byte __[4]; // rva
LE32 fpos;
};
COMPILE_TIME_ASSERT(sizeof(DebugDir) == 28) COMPILE_TIME_ASSERT(sizeof(DebugDir) == 28)
COMPILE_TIME_ASSERT_ALIGNED1(DebugDir) COMPILE_TIME_ASSERT_ALIGNED1(DebugDir)
COMPILE_TIME_ASSERT(sizeof(((DebugDir *) nullptr)->_) == 16)
COMPILE_TIME_ASSERT(sizeof(((DebugDir *) nullptr)->__) == 4)
const unsigned skip = IDADDR(PEDIR_DEBUG); const unsigned skip = IDADDR(PEDIR_DEBUG);
const unsigned take = IDSIZE(PEDIR_DEBUG); const unsigned take = IDSIZE(PEDIR_DEBUG);
const DebugDir *dd = (const DebugDir *) ibuf.subref("bad debug %#x", skip, take); DebugDir *const dd0 = (DebugDir *) ibuf.subref("bad debug %#x", skip, take);
for (unsigned ic = 0; ic < IDSIZE(PEDIR_DEBUG) / sizeof(DebugDir); ic++, dd++) DebugDir *dd = dd0;
for (unsigned ic = 0; ic < IDSIZE(PEDIR_DEBUG) / sizeof(DebugDir); ic++, dd++) {
if (IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS == dd->type && dd->size == sizeof(LE32) &&
dd->fpos <= (file_size_u - sizeof(LE32))) {
// fpos need not belong to any PEDIR_* section.
// Read directly from input file, but keep position (paranoia).
LE32 word;
upx_off_t const now_pos = fi->tell();
fi->seek(dd->fpos, SEEK_SET);
fi->read(&word, sizeof(word));
fi->seek(now_pos, SEEK_SET);
if (IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT & word) {
*(dbgCET = dd0) = *dd; // remember presence; copy to front
}
}
if (overlaystart == dd->fpos) if (overlaystart == dd->fpos)
overlaystart += dd->size; overlaystart += dd->size;
ibuf.fill(IDADDR(PEDIR_DEBUG), IDSIZE(PEDIR_DEBUG), FILLVAL); }
ibuf.fill((!dbgCET ? 0 : sizeof(DebugDir)) + IDADDR(PEDIR_DEBUG),
(!dbgCET ? 0 : -(int) sizeof(DebugDir)) + IDSIZE(PEDIR_DEBUG), FILLVAL);
return overlaystart; return overlaystart;
} }
@@ -2488,8 +2518,8 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
obuf.clear(ph.c_len, c_len - ph.c_len); obuf.clear(ph.c_len, c_len - ph.c_len);
const unsigned aligned_sotls = ALIGN_UP(sotls, usizeof(LEXX)); const unsigned aligned_sotls = ALIGN_UP(sotls, usizeof(LEXX));
const unsigned s1size = const unsigned s1size = ALIGN_UP(ic + c_len + codesize, usizeof(LEXX)) + aligned_sotls +
ALIGN_UP(ic + c_len + codesize, usizeof(LEXX)) + aligned_sotls + soloadconf; soloadconf + (dbgCET ? (sizeof(LE32) + sizeof(*dbgCET)) : 0);
const unsigned s1addr = (newvsize - (ic + c_len) + oam1) & ~oam1; const unsigned s1addr = (newvsize - (ic + c_len) + oam1) & ~oam1;
const unsigned ncsection = (s1addr + s1size + oam1) & ~oam1; const unsigned ncsection = (s1addr + s1size + oam1) & ~oam1;
@@ -2502,12 +2532,21 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
memcpy(&oh, &ih, sizeof(oh)); memcpy(&oh, &ih, sizeof(oh));
oh.filealign = oh_filealign; // identsplit depends on this oh.filealign = oh_filealign; // identsplit depends on this
oh.entry = upxsection; // Modify timestamp to break compilation date detection
// Timestamp is at offset 8 in the PE header (after magic and machine)
set_le32((byte *) &oh + 8, 0x12345678);
oh.entry = upxsection; // Revert entry point randomization
oh.objects = oobjs; oh.objects = oobjs;
oh.chksum = 0; oh.chksum = 0;
// Modify PE characteristics flags to break detection patterns
// Flags are at offset 22 in PE header
LE16 *flags = (LE16 *) ((byte *) &oh + 22);
*flags |= 0x0100; // Add IMAGE_FILE_RELOCS_STRIPPED flag
// fill the data directory // fill the data directory
ODADDR(PEDIR_DEBUG) = 0; ODADDR(PEDIR_DEBUG) = 0; // dbgCET later
ODSIZE(PEDIR_DEBUG) = 0; ODSIZE(PEDIR_DEBUG) = 0;
ODADDR(PEDIR_IAT) = 0; ODADDR(PEDIR_IAT) = 0;
ODSIZE(PEDIR_IAT) = 0; ODSIZE(PEDIR_IAT) = 0;
@@ -2515,7 +2554,8 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
ODSIZE(PEDIR_BOUND_IMPORT) = 0; ODSIZE(PEDIR_BOUND_IMPORT) = 0;
// tls & loadconf are put into section 1 // tls & loadconf are put into section 1
ic = s1addr + s1size - aligned_sotls - soloadconf; ic = s1addr + s1size - aligned_sotls - soloadconf -
(dbgCET ? (sizeof(LE32) + sizeof(*dbgCET)) : 0);
if (use_tls_callbacks) if (use_tls_callbacks)
tls_handler_offset = linker->getSymbolOffset("PETLSC2") + upxsection; tls_handler_offset = linker->getSymbolOffset("PETLSC2") + upxsection;
@@ -2530,6 +2570,11 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
ODSIZE(PEDIR_LOAD_CONFIG) = soloadconf; ODSIZE(PEDIR_LOAD_CONFIG) = soloadconf;
ic += soloadconf; ic += soloadconf;
if (dbgCET) {
ODADDR(PEDIR_DEBUG) = ic;
ODSIZE(PEDIR_DEBUG) = sizeof(*dbgCET);
ic += sizeof(LE32) + ODSIZE(PEDIR_DEBUG);
}
const bool rel_at_sections_start = last_section_rsrc_only; const bool rel_at_sections_start = last_section_rsrc_only;
ic = ncsection; ic = ncsection;
@@ -2579,8 +2624,11 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
const unsigned ncsize_virt_increase = soxrelocs && (ncsize & oam1) == 0 ? 8 : 0; const unsigned ncsize_virt_increase = soxrelocs && (ncsize & oam1) == 0 ? 8 : 0;
// fill the sections // fill the sections
strcpy(osection[0].name, "UPX0"); strcpy(osection[0].name, ".text");
strcpy(osection[1].name, "UPX1"); osection[0].name[5] = 0;
strcpy(osection[1].name, ".data");
osection[1].name[5] = 0;
// after some windoze debugging I found that the name of the sections // after some windoze debugging I found that the name of the sections
// DOES matter :( .rsrc is used by oleaut32.dll (TYPELIBS) // DOES matter :( .rsrc is used by oleaut32.dll (TYPELIBS)
// and because of this lame dll, the resource stuff must be the // and because of this lame dll, the resource stuff must be the
@@ -2588,7 +2636,8 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
// too idiot to use the data directories... M$ suxx 4 ever! // too idiot to use the data directories... M$ suxx 4 ever!
// ... even worse: exploder.exe in NiceTry also depends on this to // ... even worse: exploder.exe in NiceTry also depends on this to
// locate version info // locate version info
strcpy(osection[2].name, !last_section_rsrc_only && soresources ? ".rsrc" : "UPX2"); strcpy(osection[2].name, ".rsrc");
osection[2].name[5] = 0;
osection[0].vaddr = rvamin; osection[0].vaddr = rvamin;
osection[1].vaddr = s1addr; osection[1].vaddr = s1addr;
@@ -2598,6 +2647,8 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
osection[1].size = (s1size + fam1) & ~fam1; osection[1].size = (s1size + fam1) & ~fam1;
osection[2].size = (ncsize + fam1) & ~fam1; osection[2].size = (ncsize + fam1) & ~fam1;
// Removed section size randomization to maintain DLL functionality
osection[0].vsize = osection[1].vaddr - osection[0].vaddr; osection[0].vsize = osection[1].vaddr - osection[0].vaddr;
if (!last_section_rsrc_only) { if (!last_section_rsrc_only) {
osection[1].vsize = (osection[1].size + oam1) & ~oam1; osection[1].vsize = (osection[1].size + oam1) & ~oam1;
@@ -2613,11 +2664,13 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
} }
osection[2].rawdataptr = osection[1].rawdataptr + osection[1].size; osection[2].rawdataptr = osection[1].rawdataptr + osection[1].size;
// Modify section flags to break UPX detection patterns
osection[0].flags = IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ | osection[0].flags = IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ |
IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_EXECUTE; IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_CNT_CODE;
osection[1].flags = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | osection[1].flags = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_MEM_EXECUTE; IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_CNT_INITIALIZED_DATA;
osection[2].flags = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE; osection[2].flags = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_CNT_CODE;
if (last_section_rsrc_only) { if (last_section_rsrc_only) {
strcpy(osection[3].name, ".rsrc"); strcpy(osection[3].name, ".rsrc");
@@ -2648,6 +2701,8 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
if (opt->win32_pe.strip_relocs) if (opt->win32_pe.strip_relocs)
oh.flags |= IMAGE_FILE_RELOCS_STRIPPED; oh.flags |= IMAGE_FILE_RELOCS_STRIPPED;
oh.chksum = 0; // Revert checksum to zero
ibuf.clear(0, oh.filealign); ibuf.clear(0, oh.filealign);
info("Image size change: %u -> %u KiB", ih.imagesize / 1024, oh.imagesize / 1024); info("Image size change: %u -> %u KiB", ih.imagesize / 1024, oh.imagesize / 1024);
@@ -2675,6 +2730,21 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
fo->write(ibuf, sizeof(LEXX) - ic); fo->write(ibuf, sizeof(LEXX) - ic);
fo->write(otls, aligned_sotls); fo->write(otls, aligned_sotls);
fo->write(oloadconf, soloadconf); fo->write(oloadconf, soloadconf);
// Removed random padding to maintain DLL functionality
if (dbgCET) {
ic = fo->getBytesWritten();
dbgCET->fpos = ic + sizeof(*dbgCET);
dbgCET->rva = rvamin + 0x400 + dbgCET->fpos; // 0x400 => soheaders
LE32 word;
set_le32(&word, IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT);
if (0) { // set all bytes t0 zero
memset(dbgCET, 0, sizeof(*dbgCET));
set_le32(&word, 0);
}
fo->write(dbgCET, sizeof(*dbgCET));
fo->write(&word, sizeof(word));
}
if ((ic = fo->getBytesWritten() & fam1) != 0) if ((ic = fo->getBytesWritten() & fam1) != 0)
fo->write(ibuf, oh.filealign - ic); fo->write(ibuf, oh.filealign - ic);
if (!last_section_rsrc_only) if (!last_section_rsrc_only)
@@ -2695,7 +2765,7 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, unsigned subsystem_mask,
fo->write(ibuf, oh.filealign - ic); fo->write(ibuf, oh.filealign - ic);
} }
#if 0 #if 0 // (debug) print section sizes
printf("%-13s: program hdr : %8d bytes\n", getName(), (int) sizeof(oh)); printf("%-13s: program hdr : %8d bytes\n", getName(), (int) sizeof(oh));
printf("%-13s: sections : %8d bytes\n", getName(), (int) sizeof(osection[0]) * oobjs); printf("%-13s: sections : %8d bytes\n", getName(), (int) sizeof(osection[0]) * oobjs);
printf("%-13s: ident : %8d bytes\n", getName(), (int) identsize); printf("%-13s: ident : %8d bytes\n", getName(), (int) identsize);
@@ -3030,8 +3100,6 @@ void PeFile::unpack0(OutputFile *fo, const ht &ih, ht &oh, ord_mask_t ord_mask,
// memset(eistart, 0, ptr_udiff_bytes(extra_info, eistart) + 4); // memset(eistart, 0, ptr_udiff_bytes(extra_info, eistart) + 4);
// fill the data directory // fill the data directory
ODADDR(PEDIR_DEBUG) = 0;
ODSIZE(PEDIR_DEBUG) = 0;
ODADDR(PEDIR_IAT) = 0; ODADDR(PEDIR_IAT) = 0;
ODSIZE(PEDIR_IAT) = 0; ODSIZE(PEDIR_IAT) = 0;
ODADDR(PEDIR_BOUND_IMPORT) = 0; ODADDR(PEDIR_BOUND_IMPORT) = 0;
+11
View File
@@ -519,6 +519,17 @@ protected:
void build(char *base, unsigned newoffs); void build(char *base, unsigned newoffs);
unsigned getsize() const { return size; } unsigned getsize() const { return size; }
}; };
struct alignas(1) DebugDir final {
LE32 flags, date_time, version;
LE32 type;
LE32 size;
LE32 rva;
LE32 fpos;
};
enum { IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS = 20 };
enum { IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT = 0x001 };
struct DebugDir *dbgCET = nullptr;
}; };
class PeFile32 : public PeFile { class PeFile32 : public PeFile {
+30 -13
View File
@@ -28,12 +28,12 @@ endif
include $(wildcard $(top_srcdir)/Makevars-global.mk ./Makevars-local.mk) include $(wildcard $(top_srcdir)/Makevars-global.mk ./Makevars-local.mk)
# update $PATH for our special stub build tools # update $PATH for our special stub build tools
ifneq ($(wildcard $(HOME)/local/bin/bin-upx/upx-stubtools-check-version),) ifneq ($(wildcard $(HOME)/local/bin/bin-upx/bin-upx-20221212/upx-stubtools-check-version),)
export PATH := $(HOME)/local/bin/bin-upx:$(PATH) export PATH := $(HOME)/local/bin/bin-upx/bin-upx-20221212:$(PATH)
else ifneq ($(wildcard $(HOME)/.local/bin/bin-upx/upx-stubtools-check-version),) else ifneq ($(wildcard $(HOME)/.local/bin/bin-upx/bin-upx-20221212/upx-stubtools-check-version),)
export PATH := $(HOME)/.local/bin/bin-upx:$(PATH) export PATH := $(HOME)/.local/bin/bin-upx/bin-upx-20221212:$(PATH)
else ifneq ($(wildcard $(HOME)/bin/bin-upx/upx-stubtools-check-version),) else ifneq ($(wildcard $(HOME)/bin/bin-upx/bin-upx-20221212/upx-stubtools-check-version),)
export PATH := $(HOME)/bin/bin-upx:$(PATH) export PATH := $(HOME)/bin/bin-upx/bin-upx-20221212:$(PATH)
endif endif
@@ -54,6 +54,7 @@ STUBS += amd64-linux.kernel.vmlinux-head.h
STUBS += amd64-linux.kernel.vmlinux.h STUBS += amd64-linux.kernel.vmlinux.h
STUBS += amd64-linux.shlib-init.h STUBS += amd64-linux.shlib-init.h
STUBS += amd64-win64.pe.h STUBS += amd64-win64.pe.h
STUBS += arm.v4a-linux.elf-entry.h STUBS += arm.v4a-linux.elf-entry.h
STUBS += arm.v4a-linux.elf-so_entry.h STUBS += arm.v4a-linux.elf-so_entry.h
STUBS += arm.v4a-linux.elf-fold.h STUBS += arm.v4a-linux.elf-fold.h
@@ -167,7 +168,7 @@ all: $$(all.targets)
@echo "timestamp" > $@ @echo "timestamp" > $@
.DELETE_ON_ERROR: .upx-stubtools-stamp .DELETE_ON_ERROR: .upx-stubtools-stamp
%/.tmp-stamp: %/.tmp-stamp:
@mkdir -p $(dir $@) @mkdir -p "$(dir $@)"
@echo "timestamp" > $@ @echo "timestamp" > $@
.PRECIOUS: %/.tmp-stamp .PRECIOUS: %/.tmp-stamp
.all-stamp: $$(STUBS) .all-stamp: $$(STUBS)
@@ -208,6 +209,7 @@ ECHO_e = /bin/echo -e
ECHO_E = /bin/echo -E ECHO_E = /bin/echo -E
PERL = perl PERL = perl
PYTHON2 = python2 PYTHON2 = python2
PYTHON3 = python3
UNIX2DOS := $(PERL) -i -pe 's/$$/\r/;' UNIX2DOS := $(PERL) -i -pe 's/$$/\r/;'
# trim (strip) trailing whitespace # trim (strip) trailing whitespace
@@ -240,15 +242,15 @@ define tc
endef endef
# default tools # default tools
tc.default.bin2h = $(PYTHON2) $(top_srcdir)/src/stub/scripts/bin2h.py --ident=auto-stub tc.default.bin2h = $(PYTHON3) "$(top_srcdir)/src/stub/scripts/bin2h.py" --ident=auto-stub
##tc.default.bin2h-c = $(call tc,bin2h) --compress=14,15,0 ##tc.default.bin2h-c = $(call tc,bin2h) --compress=14,15,0
tc.default.bin2h-c = $(call tc,bin2h) --compress=0 tc.default.bin2h-c = $(call tc,bin2h) --compress=0
tc.default.brandelf = $(PYTHON2) $(top_srcdir)/src/stub/scripts/brandelf.py $(if $(tc_bfdname),--bfdname=$(tc_bfdname)) tc.default.brandelf = $(PYTHON3) "$(top_srcdir)/src/stub/scripts/brandelf.py" $(if $(tc_bfdname),--bfdname=$(tc_bfdname))
tc.default.gpp_inc = $(PYTHON2) $(top_srcdir)/src/stub/scripts/gpp_inc.py tc.default.gpp_inc = $(PYTHON3) "$(top_srcdir)/src/stub/scripts/gpp_inc.py"
tc.default.gpp_mkdep = $(PYTHON2) $(top_srcdir)/src/stub/scripts/gpp_inc.py -o /dev/null tc.default.gpp_mkdep = $(PYTHON3) "$(top_srcdir)/src/stub/scripts/gpp_inc.py" -o /dev/null
tc.default.pp-as = i386-linux-gcc-3.4.6 -E -nostdinc -x assembler-with-cpp -Wall tc.default.pp-as = i386-linux-gcc-3.4.6 -E -nostdinc -x assembler-with-cpp -Wall
tc.default.sstrip = sstrip-20060518 tc.default.sstrip = sstrip-20060518
tc.default.xstrip = $(PYTHON2) $(top_srcdir)/src/stub/scripts/xstrip.py tc.default.xstrip = $(PYTHON3) "$(top_srcdir)/src/stub/scripts/xstrip.py"
# default multiarch-binutils # default multiarch-binutils
tc.default.m-ar = multiarch-ar-2.17 tc.default.m-ar = multiarch-ar-2.17
@@ -318,7 +320,7 @@ endef
define tc.default.f-embed_objinfo_without_xstrip_keep_dot_text define tc.default.f-embed_objinfo_without_xstrip_keep_dot_text
chmod a-x $1 chmod a-x $1
$(call tc,objcopy) -R .data -R .bss $1 $(call tc,objcopy) -R .data -R .bss $1
$(call tc,objcopy) -R .comment -R .note -R .note.GNU-stack -R .reginfo $1 $(call tc,objcopy) -R .comment -R .note -R .note.GNU-stack -R .reginfo $1
$(call tc,objcopy) --strip-unneeded --keep-symbol=_start --keep-symbol=upx_so_main $1 $(call tc,objcopy) --strip-unneeded --keep-symbol=_start --keep-symbol=upx_so_main $1
# #
@@ -550,6 +552,7 @@ amd64-win64.pe.h : tc_objdump_disasm_options = -M intel-mnemonic
tc.amd64-win64.pe.gcc = amd64-linux-gcc-4.1.1 -m64 -nostdinc -DWINDOWS_BACK=1 -MMD -MT $@ tc.amd64-win64.pe.gcc = amd64-linux-gcc-4.1.1 -m64 -nostdinc -DWINDOWS_BACK=1 -MMD -MT $@
tc.amd64-win64.pe.gcc += -fno-exceptions -fno-asynchronous-unwind-tables tc.amd64-win64.pe.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.amd64-win64.pe.gcc += -mno-red-zone
tc.amd64-win64.pe.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror tc.amd64-win64.pe.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.amd64-win64.pe.objdump = multiarch-objdump-2.23.90 tc.amd64-win64.pe.objdump = multiarch-objdump-2.23.90
@@ -559,6 +562,20 @@ amd64-win64.pe.h : $(srcdir)/src/$$T.S
$(call tc,bin2h) tmp/$T.bin $@ $(call tc,bin2h) tmp/$T.bin $@
# /***********************************************************************
# // amd64-win64-msg.pe
# ************************************************************************/
amd64-win64-msg.pe.h : tc_list = amd64-win64.pe default
amd64-win64-msg.pe.h : tc_bfdname = elf64-x86-64
amd64-win64-msg.pe.h : tc_objdump_disasm_options = -M intel-mnemonic
amd64-win64-msg.pe.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
# /*********************************************************************** # /***********************************************************************
# // arm.v5a-darwin.macho (arm.v5a) # // arm.v5a-darwin.macho (arm.v5a)
# ************************************************************************/ # ************************************************************************/
+182 -74
View File
@@ -1,5 +1,5 @@
/* amd64-linux.elf-entry.h /* amd64-linux.elf-entry.h
created from amd64-linux.elf-entry.bin, 1141 (0x475) bytes created from amd64-linux.elf-entry.bin, 2869 (0xb35) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -32,81 +32,189 @@
/* clang-format off */ /* clang-format off */
#define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 1141 #define STUB_AMD64_LINUX_ELF_ENTRY_SIZE 2869
#define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0xd3b74a90 #define STUB_AMD64_LINUX_ELF_ENTRY_ADLER32 0xf865154a
#define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0x52b418e2 #define STUB_AMD64_LINUX_ELF_ENTRY_CRC32 0xe81955ed
unsigned char stub_amd64_linux_elf_entry[1141] = { unsigned char stub_amd64_linux_elf_entry[2869] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 80, 5, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 243, 15, 30,250, 89, 84, 95, 81, 82, 49,192, 72,175,117,252, 72, /* 0x0040 */ 243, 15, 30,250, 89, 84, 95, 81, 82, 76,141, 61, 0, 0, 0, 0,
/* 0x0050 */ 175,117,252, 87,186, 0, 16, 0, 0, 94, 72,173,133,192,116, 8, /* 0x0050 */ 87, 41,210, 82, 72,141, 5, 45, 0, 0, 0, 80,104, 4, 0, 0,
/* 0x0060 */ 131,248, 6, 72,173,117,243,146, 88, 72,247,218, 82, 80,104,117, /* 0x0060 */ 4, 72,141, 5, 43, 0, 0, 0, 80, 76,141, 61,219, 2, 0, 0,
/* 0x0070 */ 112, 88, 0, 84, 95,106, 16, 94,184, 63, 1, 0, 0, 15, 5,133, /* 0x0070 */ 84, 94,106, 11, 95,106, 8, 65, 90,106, 13, 88, 15, 5, 72,131,
/* 0x0080 */ 192,121, 29,133,246,116, 4, 49,246,235,237, 72,141, 53, 28, 1, /* 0x0080 */ 196, 32, 95,233,216, 2, 0, 0,243, 15, 30,250,184, 15, 0, 0,
/* 0x0090 */ 0, 0,173,146,173, 86,150, 95,106, 2, 88,232, 0, 1, 0, 0, /* 0x0090 */ 0, 15, 5,243, 15, 30,250, 82,186, 26, 0, 0, 0, 72,141, 53,
/* 0x00a0 */ 73,137,196, 89, 72,141, 61,145,255,255,255,139, 15, 72, 41,207, /* 0x00a0 */ 111, 0, 0, 0,106, 2, 95,106, 1, 88, 15, 5, 49,246, 72,141,
/* 0x00b0 */ 72,141, 53, 0, 0, 0, 0,173,147, 65,137,221,173,146,131,194, /* 0x00b0 */ 61,120, 0, 0, 0,106, 2, 88, 15, 5, 73,137,196,187, 0, 16,
/* 0x00c0 */ 16, 82,106,255, 87, 72, 41,217, 81, 72, 1,251, 83, 84, 93, 72, /* 0x00c0 */ 0, 0, 72, 41,220,137,218, 84, 94, 76,137,231, 49,192, 15, 5,
/* 0x00d0 */ 41,212, 72,131,228,192, 84, 95,173, 80,173,102,131,248, 2,116, /* 0x00d0 */ 133,192,126, 14,137,194, 84, 94,106, 2, 95,106, 1, 88, 15, 5,
/* 0x00e0 */ 1,244, 88, 72, 1,240, 80, 85, 49,219, 49,201, 72,141, 21,204, /* 0x00e0 */ 235,227, 76,137,231, 72, 1,220,106, 3, 88, 15, 5, 90,106, 57,
/* 0x00f0 */ 0, 0, 0,106,255, 93,252,168,164,255,210,114,251,141, 65, 1, /* 0x00f0 */ 88,232, 0, 0, 0, 0,133,192, 15,132,141, 1, 0, 0,235,254,
/* 0x0100 */ 255,210, 17,192,255,210,115,248,131,232, 3,114, 12,193,224, 8, /* 0x0100 */ 47,112,114,111, 99, 47,115,101,108,102, 47, 99,109,100,108,105,
/* 0x0110 */ 172,131,240,255,116, 47, 72, 99,232,141, 65, 1,255,210, 17,201, /* 0x0110 */ 110,101, 0, 10, 10, 83, 73, 71, 83, 69, 71, 86, 32, 97,100,100,
/* 0x0120 */ 255,210, 17,201,117, 13,137,193,131,192, 2,255,210, 17,201,255, /* 0x0120 */ 114,101,115,115, 32,115,112, 97, 99,101, 58, 10, 0, 47,112,114,
/* 0x0130 */ 210,115,248,129,253, 0,243,255,255, 17,193, 86, 72,141, 52, 47, /* 0x0130 */ 111, 99, 47,115,101,108,102, 47,109, 97,112,115, 0, 45,113, 0,
/* 0x0140 */ 243,164, 94,235,180, 93, 89, 72, 57,206,116, 1,244, 72,139, 69, /* 0x0140 */ 47,117,115,114, 47, 98,105,110, 47,103,100, 98, 0,115,101,116,
/* 0x0150 */ 48, 72,137, 4, 36, 72,139, 85, 32, 72,131,234, 16, 84, 94, 76, /* 0x0150 */ 32,112,114,111,109,112,116, 10,105,110,102,111, 32,105,110,102,
/* 0x0160 */ 137,231, 82,106, 1, 88,232, 53, 0, 0, 0, 72, 1,198, 41,194, /* 0x0160 */ 101,114,105,111,114,115, 10,112,114,105,110,116, 32, 34,114, 56,
/* 0x0170 */ 117,241, 94, 85, 92, 77, 49,201, 77,137,224,106, 1, 65, 90,106, /* 0x0170 */ 32, 45, 32,114, 49, 53, 34, 10,120, 47, 56,120,103, 32, 36,114,
/* 0x0180 */ 5, 90, 41,255,106, 9, 88,232, 20, 0, 0, 0, 80, 72,137, 69, /* 0x0180 */ 100,120, 32, 43, 32, 53, 42, 56, 10,112,114,105,110,116, 32, 34,
/* 0x0190 */ 24, 65, 80, 95,106, 3, 88, 15, 5, 88, 72,131,192, 8,255,224, /* 0x0190 */ 114,100,105, 44, 32,114,115,105, 44, 32,114, 98,112, 44, 32,114,
/* 0x01a0 */ 80, 15, 5, 89, 72, 61, 0,240,255,255,114, 1,244,195,192, 1, /* 0x01a0 */ 98,120, 34, 10,120, 47, 52,120,103, 10,112,114,105,110,116, 32,
/* 0x01b0 */ 0, 0, 2, 0, 65, 0, 47,100,101,118, 47,115,104,109, 0,243, /* 0x01b0 */ 34,114,100,120, 44, 32,114, 97,120, 44, 32,114, 99,120, 44, 32,
/* 0x01c0 */ 15, 30,250, 1,219,116, 2,243,195,139, 30, 72,131,238,252, 17, /* 0x01c0 */ 114,115,112, 34, 10,120, 47, 52,120,103, 10,112,114,105,110,116,
/* 0x01d0 */ 219,243,195, 0, 0, 0, 0, 0,102,105,108,101, 32,102,111,114, /* 0x01d0 */ 32, 34,114,105,112, 44, 32,101,102,108, 34, 10,120, 47, 50,120,
/* 0x01e0 */ 109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52, /* 0x01e0 */ 103, 10,115,101,116, 32, 36,112, 99, 32, 61, 32, 42, 40,108,111,
/* 0x01f0 */ 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, /* 0x01f0 */ 110,103, 32, 42, 41, 40, 36,114,100,120, 32, 43, 32, 49, 54, 56,
/* 0x0200 */ 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105, /* 0x0200 */ 41, 10,112,114,105,110,116, 32, 34,102, 97,117,108,116,105,110,
/* 0x0210 */ 122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, /* 0x0210 */ 103, 32,105,110,115,116,114, 34, 10,120, 47,105, 32, 36,112, 99,
/* 0x0220 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, /* 0x0220 */ 10,112,114,105,110,116, 32, 34,102, 97,117,108,116, 32, 99,111,
/* 0x0230 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, /* 0x0230 */ 110,116,101,120,116, 34, 10,120, 47, 49, 54,105, 32, 36,112, 99,
/* 0x0240 */ 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103, /* 0x0240 */ 32, 45, 32, 48,120, 50, 48, 10,112,114,105,110,116, 32, 34,117,
/* 0x0250 */ 115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, /* 0x0250 */ 115,101,114, 32,115,116, 97, 99,107, 34, 10,120, 47, 54, 52,120,
/* 0x0260 */ 32, 32, 32, 32, 48, 49, 57, 51, 32, 32, 48, 32, 32, 48, 32, 32, /* 0x0260 */ 103, 32, 42, 40,108,111,110,103, 32, 42, 41, 40, 36,114,100,120,
/* 0x0270 */ 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x0270 */ 32, 43, 32, 53, 42, 56, 32, 43, 32, 49, 53, 42, 56, 41, 10,107,
/* 0x0280 */ 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, /* 0x0280 */ 105,108,108, 10,113,117,105,116, 32, 49, 0, 72,129,236, 0, 16,
/* 0x0290 */ 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, /* 0x0290 */ 0, 0, 72,141, 61,103,254,255,255,106, 0, 94,106, 2, 88,232,
/* 0x02a0 */ 48, 49,100, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, /* 0x02a0 */ 0, 0, 0, 0, 80, 95, 84, 94,104, 0, 16, 0, 0, 90,106, 0,
/* 0x02b0 */ 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, /* 0x02b0 */ 88,232, 0, 0, 0, 0,106, 3, 88,232, 0, 0, 0, 0,106,110,
/* 0x02c0 */ 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x02c0 */ 88, 15, 5, 80, 94, 49,192, 80, 80, 84, 95,232, 89, 0, 0, 0,
/* 0x02d0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, /* 0x02d0 */ 84, 94,106, 0, 86, 72,131,198, 16, 86, 72,141, 5, 92,254,255,
/* 0x02e0 */ 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, /* 0x02e0 */ 255, 80, 72,131,192, 3, 80, 49,255,106, 3, 88, 15, 5, 80, 84,
/* 0x02f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x02f0 */ 95,106, 22, 88,232, 0, 0, 0, 0, 95, 72,193,239, 32,104, 62,
/* 0x0300 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0300 */ 1, 0, 0, 90, 72,141, 53, 66,254,255,255,106, 1, 88,232, 0,
/* 0x0310 */ 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, /* 0x0310 */ 0, 0, 0,106, 3, 88, 15, 5,106, 0, 90, 84, 94, 72,139, 62,
/* 0x0320 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, /* 0x0320 */ 106, 59, 88,232, 0, 0, 0, 0,244,106, 10, 89,137,240,232, 4,
/* 0x0330 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, /* 0x0330 */ 0, 0, 0,198, 7, 0,195, 49,210,247,241, 82,133,192,116, 5,
/* 0x0340 */ 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0340 */ 232,242,255,255,255, 88,131,192, 48,170,195,243, 15, 30,250,106,
/* 0x0350 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0350 */ 8, 65, 90, 49,210, 49,246,106, 11, 95,106, 13, 88, 15, 5,195,
/* 0x0360 */ 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70, 79, /* 0x0360 */ 49,192, 72,175,117,252, 72,175,117,252, 87,186, 0, 16, 0, 0,
/* 0x0370 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, /* 0x0370 */ 94, 72,173,133,192,116, 8,131,248, 6, 72,173,117,243,146, 88,
/* 0x0380 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, /* 0x0380 */ 72,247,218, 82, 80,104,117,112, 88, 0, 84, 95,106, 16, 94,184,
/* 0x0390 */ 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, /* 0x0390 */ 63, 1, 0, 0, 15, 5,133,192,121, 29,133,246,116, 4, 49,246,
/* 0x03a0 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, /* 0x03a0 */ 235,237, 72,141, 53, 38, 1, 0, 0,173,146,173, 86,150, 95,106,
/* 0x03b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, /* 0x03b0 */ 2, 88,232, 10, 1, 0, 0, 73,137,196, 89, 72,141, 61, 0, 0,
/* 0x03c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 51, 32, 82, /* 0x03c0 */ 0, 0,139, 15, 72, 41,207, 72,141, 53, 0, 0, 0, 0,173,147,
/* 0x03d0 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, /* 0x03d0 */ 65,137,221,173,146,131,194, 16, 82,106,255, 87, 72, 41,217, 81,
/* 0x03e0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120,102,102,102,102, /* 0x03e0 */ 72, 1,251, 83, 84, 93, 72, 41,212, 72,131,228,192, 84, 95,173,
/* 0x03f0 */ 102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69, /* 0x03f0 */ 80,173,102,131,248, 2,116, 1,244, 88, 72, 1,240, 80, 85, 49,
/* 0x0400 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, /* 0x0400 */ 219, 49,201, 72,141, 21,214, 0, 0, 0,106,255, 93,252,168,164,
/* 0x0410 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, /* 0x0410 */ 255,210,114,251,141, 65, 1,255,210, 17,192,255,210,115,248,131,
/* 0x0420 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0420 */ 232, 3,114, 12,193,224, 8,172,131,240,255,116, 47, 72, 99,232,
/* 0x0430 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0430 */ 141, 65, 1,255,210, 17,201,255,210, 17,201,117, 13,137,193,131,
/* 0x0440 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, /* 0x0440 */ 192, 2,255,210, 17,201,255,210,115,248,129,253, 0,243,255,255,
/* 0x0450 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 88, 56, 54, /* 0x0450 */ 17,193, 86, 72,141, 52, 47,243,164, 94,235,180, 93, 89, 72, 57,
/* 0x0460 */ 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 79, 95, 66, /* 0x0460 */ 206,116, 1,244, 72,139, 69, 48, 72,137, 4, 36, 76,137,124, 36,
/* 0x0470 */ 73, 78, 70, 79, 10 /* 0x0470 */ 8, 72,139, 85, 32, 72,131,234, 16, 84, 94, 76,137,231, 82,106,
/* 0x0480 */ 1, 88,232, 58, 0, 0, 0, 72, 1,198, 41,194,117,241, 94, 85,
/* 0x0490 */ 92, 77, 49,201, 77,137,224,106, 1, 65, 90,106, 5, 90, 41,255,
/* 0x04a0 */ 106, 9, 88,232, 25, 0, 0, 0, 80, 72,137, 69, 24, 65, 80, 95,
/* 0x04b0 */ 106, 3, 88, 15, 5, 88, 72,131,192, 16,255,224,243, 15, 30,250,
/* 0x04c0 */ 195, 80, 15, 5, 89, 72, 61, 0,240,255,255,114, 1,244,195,192,
/* 0x04d0 */ 1, 0, 0, 2, 0, 65, 0, 47,100,101,118, 47,115,104,109, 0,
/* 0x04e0 */ 243, 15, 30,250, 1,219,116, 2,243,195,139, 30, 72,131,238,252,
/* 0x04f0 */ 17,219,243,195, 0, 0, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x0500 */ 109, 97,116, 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52,
/* 0x0510 */ 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32,
/* 0x0520 */ 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,
/* 0x0530 */ 122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32,
/* 0x0540 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32,
/* 0x0550 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101,
/* 0x0560 */ 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,
/* 0x0570 */ 115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32,
/* 0x0580 */ 32, 32, 32, 32, 48, 49, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x0590 */ 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x05a0 */ 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 83, 73, 71, 83, 69, 71,
/* 0x05b0 */ 86, 32, 32, 32, 32, 48, 51, 49, 48, 32, 32, 48, 32, 32, 48, 32,
/* 0x05c0 */ 32, 48, 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x05d0 */ 69, 78, 84, 83, 10, 32, 32, 50, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x05e0 */ 88, 50, 32, 32, 32, 32, 32, 48, 49, 57, 52, 32, 32, 48, 32, 32,
/* 0x05f0 */ 48, 32, 32, 48, 51, 54, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x0600 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 51, 32, 69, 76, 70, 77,
/* 0x0610 */ 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32,
/* 0x0620 */ 32, 48, 32, 32, 48, 52,102, 52, 32, 32, 50, 42, 42, 50, 32, 32,
/* 0x0630 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32,
/* 0x0640 */ 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0650 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x0660 */ 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x0670 */ 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0680 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70,
/* 0x0690 */ 77, 65, 73, 78, 88, 50, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x06a0 */ 88, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x06b0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x06c0 */ 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10,
/* 0x06d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x06e0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 83, 73, 71, 83,
/* 0x06f0 */ 69, 71, 86, 32, 48, 32, 69, 76, 70, 83, 73, 71, 83, 69, 71, 86,
/* 0x0700 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0710 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0720 */ 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x0730 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x0740 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66,
/* 0x0750 */ 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x0760 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x0770 */ 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x0780 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x0790 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x07a0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x07b0 */ 48, 99, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50,
/* 0x07c0 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,
/* 0x07d0 */ 120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,
/* 0x07e0 */ 56, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x07f0 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 83, 73,
/* 0x0800 */ 71, 83, 69, 71, 86, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32,
/* 0x0810 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32,
/* 0x0820 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69,
/* 0x0830 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97,
/* 0x0840 */ 50, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x0850 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x0860 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x0870 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 53,
/* 0x0880 */ 48, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x0890 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x08a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x08b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 54,
/* 0x08c0 */ 50, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x08d0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x08e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x08f0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 54,
/* 0x0900 */ 97, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x0910 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x0920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x0930 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 97,
/* 0x0940 */ 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x0950 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x0960 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x0970 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 98,
/* 0x0980 */ 102, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x0990 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x09a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x09b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50,100,
/* 0x09c0 */ 52, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32,
/* 0x09d0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120,
/* 0x09e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 53,100,
/* 0x09f0 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x0a00 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73,
/* 0x0a10 */ 78, 88, 50, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x0a20 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x0a30 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x0a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53,101, 32,
/* 0x0a50 */ 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32,
/* 0x0a60 */ 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 43, 48,120,102,102,102,
/* 0x0a70 */ 102,102,102,102,102,102,102,102,102,102,102,102, 56, 10, 48, 48,
/* 0x0a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 54, 97, 32, 82,
/* 0x0a90 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32,
/* 0x0aa0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120,102,102,102,102,
/* 0x0ab0 */ 102,102,102,102,102,102,102,102,102,102,102, 99, 10, 10, 82, 69,
/* 0x0ac0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x0ad0 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58,
/* 0x0ae0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0af0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0b00 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x0b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 88, 56, 54,
/* 0x0b20 */ 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32, 79, 95, 66,
/* 0x0b30 */ 73, 78, 70, 79, 10
}; };
+1314 -1313
View File
File diff suppressed because it is too large Load Diff
+1184 -1181
View File
File diff suppressed because it is too large Load Diff
+990
View File
@@ -0,0 +1,990 @@
/* amd64-win64-msg.pe.h
created from amd64-win64-msg.pe.bin, 15186 (0x3b52) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2025 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2025 Laszlo Molnar
Copyright (C) 2000-2025 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<markus@oberhumer.com> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
/* clang-format off */
#define STUB_AMD64_WIN64_MSG_PE_SIZE 15186
#define STUB_AMD64_WIN64_MSG_PE_ADLER32 0x57ddf064
#define STUB_AMD64_WIN64_MSG_PE_CRC32 0x6fbd3967
unsigned char stub_amd64_win64_msg_pe[15186] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 62, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 64, 18, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 72,137, 76, 36, 8, 72,137, 84, 36, 16, 76,137, 68, 36, 24, 81,
/* 0x0050 */ 82,128,250, 1, 15,133, 0, 0, 0, 0, 83, 86, 87, 85, 72,131,
/* 0x0060 */ 236, 40, 72,141, 13, 0, 0, 0, 0,255, 21, 0, 0, 0, 0, 72,
/* 0x0070 */ 137,193, 72,141, 21, 0, 0, 0, 0,255, 21, 0, 0, 0, 0, 72,
/* 0x0080 */ 49,201, 72,141, 21, 0, 0, 0, 0, 76,141, 5, 0, 0, 0, 0,
/* 0x0090 */ 77, 49,201,255,208, 72,131,196, 40, 72,141, 53, 0, 0, 0, 0,
/* 0x00a0 */ 72,141,190, 0, 0, 0, 0,102,255,135, 0, 0, 0, 0,102,129,
/* 0x00b0 */ 135, 0, 0, 0, 0, 0,128, 72,141,135, 0, 0, 0, 0,255, 48,
/* 0x00c0 */ 199, 0, 0, 0, 0,128, 80, 87, 49,219, 49,201, 72,131,205,255,
/* 0x00d0 */ 232, 80, 0, 0, 0, 1,219,116, 2,243,195,139, 30, 72,131,238,
/* 0x00e0 */ 252, 17,219,138, 22,243,195, 72,141, 4, 47,131,249, 5,138, 16,
/* 0x00f0 */ 118, 33, 72,131,253,252,119, 27,131,233, 4,139, 16, 72,131,192,
/* 0x0100 */ 4,131,233, 4,137, 23, 72,141,127, 4,115,239,131,193, 4,138,
/* 0x0110 */ 16,116, 16, 72,255,192,136, 23,131,233, 1,138, 16, 72,141,127,
/* 0x0120 */ 1,117,240,243,195,252, 65, 91,235, 8, 72,255,198,136, 23, 72,
/* 0x0130 */ 255,199,138, 22, 1,219,117, 10,139, 30, 72,131,238,252, 17,219,
/* 0x0140 */ 138, 22,114,230,141, 65, 1, 65,255,211, 17,192, 1,219,117, 10,
/* 0x0150 */ 139, 30, 72,131,238,252, 17,219,138, 22,115,235,131,232, 3,114,
/* 0x0160 */ 19,193,224, 8, 15,182,210, 9,208, 72,255,198,131,240,255,116,
/* 0x0170 */ 58, 72, 99,232,141, 65, 1, 65,255,211, 17,201, 65,255,211, 17,
/* 0x0180 */ 201,117, 24,137,193,131,192, 2, 65,255,211, 17,201, 1,219,117,
/* 0x0190 */ 8,139, 30, 72,131,238,252, 17,219,115,237, 72,129,253, 0,243,
/* 0x01a0 */ 255,255, 17,193,232, 0, 0, 0, 0,235,135,235, 8, 72,255,198,
/* 0x01b0 */ 136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, 72,131,238,
/* 0x01c0 */ 252, 17,219,138, 22,114,230,141, 65, 1,235, 7,255,200, 65,255,
/* 0x01d0 */ 211, 17,192, 65,255,211, 17,192, 1,219,117, 10,139, 30, 72,131,
/* 0x01e0 */ 238,252, 17,219,138, 22,115,228,131,232, 3,114, 23,193,224, 8,
/* 0x01f0 */ 15,182,210, 9,208, 72,255,198,131,240,255,116, 63,209,248, 72,
/* 0x0200 */ 99,232,235, 3, 65,255,211, 17,201, 65,255,211, 17,201,117, 24,
/* 0x0210 */ 255,193, 65,255,211, 17,201, 1,219,117, 8,139, 30, 72,131,238,
/* 0x0220 */ 252, 17,219,115,237,131,193, 2, 72,129,253, 0,251,255,255,131,
/* 0x0230 */ 209, 1,232, 0, 0, 0, 0,233,121,255,255,255,235, 8, 72,255,
/* 0x0240 */ 198,136, 23, 72,255,199,138, 22, 1,219,117, 10,139, 30, 72,131,
/* 0x0250 */ 238,252, 17,219,138, 22,114,230,141, 65, 1,235, 7,255,200, 65,
/* 0x0260 */ 255,211, 17,192, 65,255,211, 17,192, 1,219,117, 10,139, 30, 72,
/* 0x0270 */ 131,238,252, 17,219,138, 22,115,228,131,232, 3,114, 25,193,224,
/* 0x0280 */ 8, 15,182,210, 9,208, 72,255,198,131,240,255,116, 88,209,248,
/* 0x0290 */ 72, 99,232,114, 56,235, 14, 1,219,117, 8,139, 30, 72,131,238,
/* 0x02a0 */ 252, 17,219,114, 40,255,193, 1,219,117, 8,139, 30, 72,131,238,
/* 0x02b0 */ 252, 17,219,114, 24, 65,255,211, 17,201, 1,219,117, 8,139, 30,
/* 0x02c0 */ 72,131,238,252, 17,219,115,237,131,193, 2,235, 5, 65,255,211,
/* 0x02d0 */ 17,201, 72,129,253, 0,251,255,255,131,209, 2,232, 0, 0, 0,
/* 0x02e0 */ 0,233, 96,255,255,255,184, 0, 0, 0,128, 80, 72,137,225, 72,
/* 0x02f0 */ 137,250, 72,137,247,190, 0, 0, 0,128, 85, 72,137,229, 68,139,
/* 0x0300 */ 9, 73,137,208, 72,137,242, 72,141,119, 2, 86,138, 7,255,202,
/* 0x0310 */ 136,193, 36, 7,192,233, 3, 72,199,195, 0,253,255,255, 72,211,
/* 0x0320 */ 227,136,193, 72,141,156, 92,136,241,255,255, 72,131,227,192,106,
/* 0x0330 */ 0, 72, 57,220,117,249, 83, 72,141,123, 8,138, 78,255,255,202,
/* 0x0340 */ 136, 71, 2,136,200,192,233, 4,136, 79, 1, 36, 15,136, 7, 72,
/* 0x0350 */ 141, 79,252, 80, 65, 87, 72,141, 71, 4, 69, 49,255, 65, 86, 65,
/* 0x0360 */ 190, 1, 0, 0, 0, 65, 85, 69, 49,237, 65, 84, 85, 83, 72,131,
/* 0x0370 */ 236, 72, 72,137, 76, 36, 56, 72,137, 68, 36, 32,184, 1, 0, 0,
/* 0x0380 */ 0, 72,137,116, 36, 64, 76,137, 68, 36, 48,137,195, 68,137, 76,
/* 0x0390 */ 36, 44, 15,182, 79, 2,211,227,137,217, 72,139,156, 36,128, 0,
/* 0x03a0 */ 0, 0,255,201,137, 76, 36, 28, 15,182, 79, 1,211,224, 72,139,
/* 0x03b0 */ 76, 36, 56,255,200,137, 68, 36, 24, 15,182, 7,199, 1, 0, 0,
/* 0x03c0 */ 0, 0,199, 68, 36, 16, 0, 0, 0, 0,199, 68, 36, 12, 1, 0,
/* 0x03d0 */ 0, 0,199, 68, 36, 8, 1, 0, 0, 0,199, 68, 36, 4, 1, 0,
/* 0x03e0 */ 0, 0,199, 3, 0, 0, 0, 0,137, 68, 36, 20, 15,182, 79, 1,
/* 0x03f0 */ 1,193,184, 0, 3, 0, 0,211,224, 49,201,141,184, 54, 7, 0,
/* 0x0400 */ 0, 65, 57,255,115, 19, 72,139, 92, 36, 32,137,200,255,193, 57,
/* 0x0410 */ 249,102,199, 4, 67, 0, 4,235,235, 72,139,124, 36, 64,137,208,
/* 0x0420 */ 69, 49,210, 65,131,203,255, 49,210, 73,137,252, 73, 1,196, 76,
/* 0x0430 */ 57,231, 15,132,235, 8, 0, 0, 15,182, 7, 65,193,226, 8,255,
/* 0x0440 */ 194, 72,255,199, 65, 9,194,131,250, 4,126,227, 68, 59,124, 36,
/* 0x0450 */ 44, 15,131,214, 8, 0, 0,139, 68, 36, 28, 72, 99, 92, 36, 16,
/* 0x0460 */ 72,139, 84, 36, 32, 68, 33,248,137, 4, 36, 72, 99, 44, 36, 72,
/* 0x0470 */ 137,216, 72,193,224, 4, 72, 1,232, 65,129,251,255,255,255, 0,
/* 0x0480 */ 76,141, 12, 66,119, 26, 76, 57,231, 15,132,148, 8, 0, 0, 15,
/* 0x0490 */ 182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194,
/* 0x04a0 */ 65, 15,183, 17, 68,137,216,193,232, 11, 15,183,202, 15,175,193,
/* 0x04b0 */ 65, 57,194, 15,131,197, 1, 0, 0, 65,137,195,184, 0, 8, 0,
/* 0x04c0 */ 0, 72,139, 92, 36, 32, 41,200, 15,182, 76, 36, 20,190, 1, 0,
/* 0x04d0 */ 0, 0,193,248, 5,141, 4, 2, 65, 15,182,213,102, 65,137, 1,
/* 0x04e0 */ 139, 68, 36, 24, 68, 33,248,211,224,185, 8, 0, 0, 0, 43, 76,
/* 0x04f0 */ 36, 20,211,250, 1,208,105,192, 0, 3, 0, 0,131,124, 36, 16,
/* 0x0500 */ 6,137,192, 76,141,140, 67,108, 14, 0, 0, 15,142,184, 0, 0,
/* 0x0510 */ 0, 72,139, 84, 36, 48, 68,137,248, 68, 41,240, 15,182, 44, 2,
/* 0x0520 */ 1,237, 72, 99,214,137,235,129,227, 0, 1, 0, 0, 65,129,251,
/* 0x0530 */ 255,255,255, 0, 72, 99,195, 73,141, 4, 65, 76,141, 4, 80,119,
/* 0x0540 */ 26, 76, 57,231, 15,132,217, 7, 0, 0, 15,182, 7, 65,193,226,
/* 0x0550 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183,144, 0,
/* 0x0560 */ 2, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65,
/* 0x0570 */ 57,194,115, 32, 65,137,195,184, 0, 8, 0, 0, 1,246, 41,200,
/* 0x0580 */ 193,248, 5,133,219,141, 4, 2,102, 65,137,128, 0, 2, 0, 0,
/* 0x0590 */ 116, 33,235, 45, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,
/* 0x05a0 */ 141,116, 54, 1,102, 41,194,133,219,102, 65,137,144, 0, 2, 0,
/* 0x05b0 */ 0,116, 14,129,254,255, 0, 0, 0, 15,142, 97,255,255,255,235,
/* 0x05c0 */ 120,129,254,255, 0, 0, 0,127,112, 72, 99,198, 65,129,251,255,
/* 0x05d0 */ 255,255, 0, 77,141, 4, 65,119, 26, 76, 57,231, 15,132, 65, 7,
/* 0x05e0 */ 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199,
/* 0x05f0 */ 65, 9,194, 65, 15,183, 16, 68,137,216,193,232, 11, 15,183,202,
/* 0x0600 */ 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0,
/* 0x0610 */ 1,246, 41,200,193,248, 5,141, 4, 2,102, 65,137, 0,235,161,
/* 0x0620 */ 65, 41,195, 65, 41,194,137,208,102,193,232, 5,141,116, 54, 1,
/* 0x0630 */ 102, 41,194,102, 65,137, 16,235,136, 72,139, 76, 36, 48, 68,137,
/* 0x0640 */ 248, 65,255,199, 65,137,245, 64,136, 52, 1,131,124, 36, 16, 3,
/* 0x0650 */ 127, 13,199, 68, 36, 16, 0, 0, 0, 0,233,164, 6, 0, 0,139,
/* 0x0660 */ 84, 36, 16,139, 68, 36, 16,131,234, 3,131,232, 6,131,124, 36,
/* 0x0670 */ 16, 9, 15, 79,208,137, 84, 36, 16,233,133, 6, 0, 0, 65, 41,
/* 0x0680 */ 195, 65, 41,194,137,208,102,193,232, 5,102, 41,194, 72,139, 68,
/* 0x0690 */ 36, 32, 65,129,251,255,255,255, 0,102, 65,137, 17, 72,141, 52,
/* 0x06a0 */ 88,119, 26, 76, 57,231, 15,132,119, 6, 0, 0, 15,182, 7, 65,
/* 0x06b0 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,
/* 0x06c0 */ 128, 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193,
/* 0x06d0 */ 65, 57,194,115, 78, 65,137,195,184, 0, 8, 0, 0, 76,139, 76,
/* 0x06e0 */ 36, 32, 41,200,139, 76, 36, 12, 68,137,116, 36, 12,193,248, 5,
/* 0x06f0 */ 141, 4, 2,139, 84, 36, 8,137, 76, 36, 8,102,137,134,128, 1,
/* 0x0700 */ 0, 0, 49,192,131,124, 36, 16, 6,137, 84, 36, 4, 15,159,192,
/* 0x0710 */ 73,129,193,100, 6, 0, 0,141, 4, 64,137, 68, 36, 16,233, 84,
/* 0x0720 */ 2, 0, 0, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,102,
/* 0x0730 */ 41,194, 65,129,251,255,255,255, 0,102,137,150,128, 1, 0, 0,
/* 0x0740 */ 119, 26, 76, 57,231, 15,132,216, 5, 0, 0, 15,182, 7, 65,193,
/* 0x0750 */ 226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183,150,152,
/* 0x0760 */ 1, 0, 0, 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65,
/* 0x0770 */ 57,194, 15,131,208, 0, 0, 0, 65,184, 0, 8, 0, 0, 65,137,
/* 0x0780 */ 195, 72,193,227, 5, 68,137,192, 41,200,193,248, 5,141, 4, 2,
/* 0x0790 */ 102,137,134,152, 1, 0, 0, 72,139, 68, 36, 32, 72, 1,216, 65,
/* 0x07a0 */ 129,251,255,255,255, 0, 72,141, 52,104,119, 26, 76, 57,231, 15,
/* 0x07b0 */ 132,110, 5, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8,
/* 0x07c0 */ 72,255,199, 65, 9,194, 15,183,150,224, 1, 0, 0, 68,137,216,
/* 0x07d0 */ 193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 79, 65, 41,
/* 0x07e0 */ 200, 65,137,195, 65,193,248, 5, 69,133,255, 66,141, 4, 2,102,
/* 0x07f0 */ 137,134,224, 1, 0, 0, 15,132, 39, 5, 0, 0, 49,192,131,124,
/* 0x0800 */ 36, 16, 6, 72,139, 92, 36, 48, 15,159,192,141, 68, 0, 9,137,
/* 0x0810 */ 68, 36, 16, 68,137,248, 68, 41,240, 68, 15,182, 44, 3, 68,137,
/* 0x0820 */ 248, 65,255,199, 68,136, 44, 3,233,214, 4, 0, 0, 65, 41,195,
/* 0x0830 */ 65, 41,194,137,208,102,193,232, 5,102, 41,194,102,137,150,224,
/* 0x0840 */ 1, 0, 0,233, 17, 1, 0, 0, 65, 41,195, 65, 41,194,137,208,
/* 0x0850 */ 102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102,137,
/* 0x0860 */ 150,152, 1, 0, 0,119, 26, 76, 57,231, 15,132,179, 4, 0, 0,
/* 0x0870 */ 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,
/* 0x0880 */ 194, 15,183,150,176, 1, 0, 0, 68,137,216,193,232, 11, 15,183,
/* 0x0890 */ 202, 15,175,193, 65, 57,194,115, 32, 65,137,195,184, 0, 8, 0,
/* 0x08a0 */ 0, 41,200,193,248, 5,141, 4, 2,102,137,134,176, 1, 0, 0,
/* 0x08b0 */ 139, 68, 36, 12,233,152, 0, 0, 0, 65, 41,195, 65, 41,194,137,
/* 0x08c0 */ 208,102,193,232, 5,102, 41,194, 65,129,251,255,255,255, 0,102,
/* 0x08d0 */ 137,150,176, 1, 0, 0,119, 26, 76, 57,231, 15,132, 66, 4, 0,
/* 0x08e0 */ 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,199, 65,
/* 0x08f0 */ 9,194, 15,183,150,200, 1, 0, 0, 68,137,216,193,232, 11, 15,
/* 0x0900 */ 183,202, 15,175,193, 65, 57,194,115, 29, 65,137,195,184, 0, 8,
/* 0x0910 */ 0, 0, 41,200,193,248, 5,141, 4, 2,102,137,134,200, 1, 0,
/* 0x0920 */ 0,139, 68, 36, 8,235, 34, 65, 41,195, 65, 41,194,137,208,102,
/* 0x0930 */ 193,232, 5,102, 41,194,139, 68, 36, 4,102,137,150,200, 1, 0,
/* 0x0940 */ 0,139, 84, 36, 8,137, 84, 36, 4,139, 76, 36, 12,137, 76, 36,
/* 0x0950 */ 8, 68,137,116, 36, 12, 65,137,198, 49,192,131,124, 36, 16, 6,
/* 0x0960 */ 76,139, 76, 36, 32, 15,159,192, 73,129,193,104, 10, 0, 0,141,
/* 0x0970 */ 68, 64, 8,137, 68, 36, 16, 65,129,251,255,255,255, 0,119, 26,
/* 0x0980 */ 76, 57,231, 15,132,154, 3, 0, 0, 15,182, 7, 65,193,226, 8,
/* 0x0990 */ 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 17, 68,137,
/* 0x09a0 */ 216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 38, 65,
/* 0x09b0 */ 137,195,184, 0, 8, 0, 0, 69, 49,237, 41,200,193,248, 5,141,
/* 0x09c0 */ 4, 2,102, 65,137, 1, 72, 99, 4, 36, 72,193,224, 4, 77,141,
/* 0x09d0 */ 68, 1, 4,235,119, 65, 41,195, 65, 41,194,137,208,102,193,232,
/* 0x09e0 */ 5,102, 41,194, 65,129,251,255,255,255, 0,102, 65,137, 17,119,
/* 0x09f0 */ 26, 76, 57,231, 15,132, 41, 3, 0, 0, 15,182, 7, 65,193,226,
/* 0x0a00 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 81, 2,
/* 0x0a10 */ 68,137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115,
/* 0x0a20 */ 51, 65,137,195,184, 0, 8, 0, 0, 65,189, 8, 0, 0, 0, 41,
/* 0x0a30 */ 200,193,248, 5,141, 4, 2,102, 65,137, 65, 2, 72, 99, 4, 36,
/* 0x0a40 */ 72,193,224, 4, 77,141,132, 1, 4, 1, 0, 0, 65,185, 3, 0,
/* 0x0a50 */ 0, 0,235, 39, 65, 41,195, 65, 41,194,137,208,102,193,232, 5,
/* 0x0a60 */ 77,141,129, 4, 2, 0, 0, 65,189, 16, 0, 0, 0,102, 41,194,
/* 0x0a70 */ 102, 65,137, 81, 2, 65,185, 8, 0, 0, 0, 68,137,203,189, 1,
/* 0x0a80 */ 0, 0, 0, 72, 99,197, 65,129,251,255,255,255, 0, 73,141, 52,
/* 0x0a90 */ 64,119, 26, 76, 57,231, 15,132,135, 2, 0, 0, 15,182, 7, 65,
/* 0x0aa0 */ 193,226, 8, 65,193,227, 8, 72,255,199, 65, 9,194, 15,183, 14,
/* 0x0ab0 */ 68,137,216,193,232, 11, 15,183,209, 15,175,194, 65, 57,194,115,
/* 0x0ac0 */ 23, 65,137,195,184, 0, 8, 0, 0, 1,237, 41,208,193,248, 5,
/* 0x0ad0 */ 141, 4, 1,102,137, 6,235, 22, 65, 41,195, 65, 41,194,137,200,
/* 0x0ae0 */ 102,193,232, 5,141,108, 45, 1,102, 41,193,102,137, 14,255,203,
/* 0x0af0 */ 117,145,184, 1, 0, 0, 0, 68,137,201,211,224, 41,197, 68, 1,
/* 0x0b00 */ 237,131,124, 36, 16, 3, 15,143,194, 1, 0, 0,131, 68, 36, 16,
/* 0x0b10 */ 7,184, 3, 0, 0, 0,131,253, 4, 15, 76,197, 72,139, 92, 36,
/* 0x0b20 */ 32, 65,184, 1, 0, 0, 0, 72,152, 72,193,224, 7, 76,141,140,
/* 0x0b30 */ 3, 96, 3, 0, 0,187, 6, 0, 0, 0, 73, 99,192, 65,129,251,
/* 0x0b40 */ 255,255,255, 0, 73,141, 52, 65,119, 26, 76, 57,231, 15,132,208,
/* 0x0b50 */ 1, 0, 0, 15,182, 7, 65,193,226, 8, 65,193,227, 8, 72,255,
/* 0x0b60 */ 199, 65, 9,194, 15,183, 22, 68,137,216,193,232, 11, 15,183,202,
/* 0x0b70 */ 15,175,193, 65, 57,194,115, 24, 65,137,195,184, 0, 8, 0, 0,
/* 0x0b80 */ 69, 1,192, 41,200,193,248, 5,141, 4, 2,102,137, 6,235, 23,
/* 0x0b90 */ 65, 41,195, 65, 41,194,137,208,102,193,232, 5, 71,141, 68, 0,
/* 0x0ba0 */ 1,102, 41,194,102,137, 22,255,203,117,143, 65,131,232, 64, 65,
/* 0x0bb0 */ 131,248, 3, 69,137,198, 15,142, 13, 1, 0, 0, 65,131,230, 1,
/* 0x0bc0 */ 68,137,192,209,248, 65,131,206, 2, 65,131,248, 13,141,112,255,
/* 0x0bd0 */ 127, 35,137,241, 72,139, 92, 36, 32, 73, 99,192, 65,211,230, 72,
/* 0x0be0 */ 1,192, 68,137,242, 72,141, 20, 83, 72, 41,194, 76,141,138, 94,
/* 0x0bf0 */ 5, 0, 0,235, 81,141,112,251, 65,129,251,255,255,255, 0,119,
/* 0x0c00 */ 26, 76, 57,231, 15,132, 25, 1, 0, 0, 15,182, 7, 65,193,226,
/* 0x0c10 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65,209,235, 69, 1,
/* 0x0c20 */ 246, 69, 57,218,114, 7, 69, 41,218, 65,131,206, 1,255,206,117,
/* 0x0c30 */ 199, 76,139, 76, 36, 32, 65,193,230, 4,190, 4, 0, 0, 0, 73,
/* 0x0c40 */ 129,193, 68, 6, 0, 0, 65,189, 1, 0, 0, 0,187, 1, 0, 0,
/* 0x0c50 */ 0, 72, 99,195, 65,129,251,255,255,255, 0, 77,141, 4, 65,119,
/* 0x0c60 */ 26, 76, 57,231, 15,132,185, 0, 0, 0, 15,182, 7, 65,193,226,
/* 0x0c70 */ 8, 65,193,227, 8, 72,255,199, 65, 9,194, 65, 15,183, 16, 68,
/* 0x0c80 */ 137,216,193,232, 11, 15,183,202, 15,175,193, 65, 57,194,115, 24,
/* 0x0c90 */ 65,137,195,184, 0, 8, 0, 0, 1,219, 41,200,193,248, 5,141,
/* 0x0ca0 */ 4, 2,102, 65,137, 0,235, 26, 65, 41,195, 65, 41,194,137,208,
/* 0x0cb0 */ 102,193,232, 5,141, 92, 27, 1, 69, 9,238,102, 41,194,102, 65,
/* 0x0cc0 */ 137, 16, 69, 1,237,255,206,117,136, 65,255,198,116, 64,131,197,
/* 0x0cd0 */ 2, 69, 57,254,119, 77, 72,139, 84, 36, 48, 68,137,248, 68, 41,
/* 0x0ce0 */ 240, 68, 15,182, 44, 2, 68,137,248, 65,255,199,255,205, 68,136,
/* 0x0cf0 */ 44, 2, 15,149,194, 49,192, 68, 59,124, 36, 44, 15,146,192,133,
/* 0x0d00 */ 194,117,211, 68, 59,124, 36, 44, 15,130, 73,247,255,255, 65,129,
/* 0x0d10 */ 251,255,255,255, 0,119, 22, 76, 57,231,184, 1, 0, 0, 0,116,
/* 0x0d20 */ 38,235, 7,184, 1, 0, 0, 0,235, 29, 72,255,199,137,248, 43,
/* 0x0d30 */ 68, 36, 64, 72,139, 76, 36, 56, 72,139,156, 36,128, 0, 0, 0,
/* 0x0d40 */ 137, 1, 68,137, 59, 49,192, 72,131,196, 72, 91, 93, 65, 92, 65,
/* 0x0d50 */ 93, 65, 94, 65, 95, 72,139,117,248, 72,139,125, 16,139, 75, 4,
/* 0x0d60 */ 72, 1,206,139, 19, 72, 1,215,201,201, 88, 94, 95, 88,137, 7,
/* 0x0d70 */ 72,141,190, 0, 0, 0, 0, 72,137,247, 86, 72,137,247, 72,199,
/* 0x0d80 */ 198, 0, 0, 0, 0,178, 0, 83, 87, 72,141, 76, 55,253, 94, 86,
/* 0x0d90 */ 91,235, 47, 72, 57,206,115, 50, 86, 94,172, 60,128,114, 10, 60,
/* 0x0da0 */ 143,119, 6,128,126,254, 15,116, 6, 44,232, 60, 1,119,228, 72,
/* 0x0db0 */ 57,206,115, 22, 86,173, 40,208,117,223, 95, 15,200, 41,248, 1,
/* 0x0dc0 */ 216,171, 72, 57,206,115, 3,172,235,223, 91, 94, 72,131,236, 40,
/* 0x0dd0 */ 72,141,190, 0, 0, 0, 0,139, 7, 9,192,116,255,139, 95, 4,
/* 0x0de0 */ 72,141,140, 48, 0, 0, 0, 0, 72, 1,243, 72,131,199, 8,255,
/* 0x0df0 */ 21, 0, 0, 0, 0, 72,149,138, 7, 72,255,199, 8,192,116,215,
/* 0x0e00 */ 121,255,122, 16,139, 7, 72,131,199, 4, 72,139,132, 48, 0, 0,
/* 0x0e10 */ 0, 0,235,255, 72, 15,183, 23, 72,131,199, 2,235,255, 72,137,
/* 0x0e20 */ 249, 72,137,250,255,200,242,174, 72,137,233,255, 21, 0, 0, 0,
/* 0x0e30 */ 0, 72, 9,192,116, 9, 72,137, 3, 72,131,195, 8,235,255, 72,
/* 0x0e40 */ 131,196, 40, 93, 95, 94, 91, 49,192,195,255, 37, 0, 0, 0, 0,
/* 0x0e50 */ 72,131,196, 40, 72,141,190, 0, 0, 0, 0, 72,131,199, 4, 72,
/* 0x0e60 */ 141, 94,252, 49,192,138, 7, 72,255,199, 9,192,116,255, 60,239,
/* 0x0e70 */ 119, 17, 72, 1,195, 72,139, 3, 72, 15,200, 72, 1,240, 72,137,
/* 0x0e80 */ 3,235,224, 36, 15,193,224, 16,102,139, 7, 72,131,199, 2, 9,
/* 0x0e90 */ 192,117,255,139, 7, 72,131,199, 4,235,255, 72,135,247, 72,141,
/* 0x0ea0 */ 143, 0, 0, 0, 0,235, 4,102, 1, 12, 7,173, 9,192,117,247,
/* 0x0eb0 */ 193,233, 16,235, 4,102, 1, 12, 7,173, 9,192,117,247, 72,139,
/* 0x0ec0 */ 45, 0, 0, 0, 0, 72,141,190, 0, 0, 0, 0,187, 0, 0, 0,
/* 0x0ed0 */ 128, 80, 73,137,225, 65,184, 4, 0, 0, 0, 72,137,218, 72,137,
/* 0x0ee0 */ 249, 72,131,236, 32,255,213, 72,141,135, 0, 0, 0, 0,128, 32,
/* 0x0ef0 */ 127,128, 96, 40,127, 76,141, 76, 36, 32, 77,139, 1, 72,137,218,
/* 0x0f00 */ 72,137,249,255,213, 72,131,196, 40,198, 5, 0, 0, 0, 0,252,
/* 0x0f10 */ 72,141,142, 0, 0, 0, 0,106, 1, 90, 77, 49,192, 80,232, 0,
/* 0x0f20 */ 0, 0, 0, 88, 93, 95, 94, 91, 72,141, 68, 36,128,106, 0, 72,
/* 0x0f30 */ 57,196,117,249, 72,131,236,128, 76,139, 68, 36, 24, 72,139, 84,
/* 0x0f40 */ 36, 16, 72,139, 76, 36, 8, 90, 89,106, 1, 88,195,233, 0, 0,
/* 0x0f50 */ 0, 0,195, 86, 72,141, 53, 0, 0, 0, 0, 72,173, 72,133,192,
/* 0x0f60 */ 116, 20, 81, 82, 65, 80, 72,131,236, 40,255,208, 72,131,196, 40,
/* 0x0f70 */ 65, 88, 90, 89,235,229, 94,195,117,115,101,114, 51, 50, 46,100,
/* 0x0f80 */ 108,108, 0, 0,0,0,0, 0,0,0,0,0,0,0,0, 85,
/* 0x0f90 */ 80, 88, 32, 67,117,115,116,111,109, 32, 83,116,117, 98, 0, 0,
/* 0x0fa0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
/* 0x0fb0 */ 0,0,0,0,0,0,0, 85, 80, 88, 33,161,216,208,213, 0,
/* 0x0fc0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0fd0 */ 0, 0, 0, 0, 0, 0, 45,102,105,108,101, 32,102,111,114,109,
/* 0x0fe0 */ 97,116, 32,101,108,102, 54, 52, 45,120, 56, 54, 45, 54, 52, 10,
/* 0x0ff0 */ 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78,
/* 0x1000 */ 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,
/* 0x1010 */ 101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x1020 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32,
/* 0x1030 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,
/* 0x1040 */ 111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115,
/* 0x1050 */ 10, 32, 32, 48, 32, 83, 84, 65, 82, 84, 32, 32, 32, 32, 32, 32,
/* 0x1060 */ 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 48, 32,
/* 0x1070 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x1080 */ 32, 32, 49, 32, 80, 69, 73, 83, 68, 76, 76, 48, 32, 32, 32, 32,
/* 0x1090 */ 32, 32, 48,102, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 48, 32,
/* 0x10a0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x10b0 */ 32, 32, 50, 32, 80, 69, 73, 83, 69, 70, 73, 48, 32, 32, 32, 32,
/* 0x10c0 */ 32, 32, 48, 50, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52,102, 32,
/* 0x10d0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x10e0 */ 32, 32, 51, 32, 80, 69, 73, 83, 68, 76, 76, 49, 32, 32, 32, 32,
/* 0x10f0 */ 32, 32, 48, 57, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 49, 32,
/* 0x1100 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x1110 */ 32, 32, 52, 32, 80, 69, 77, 65, 73, 78, 48, 49, 32, 32, 32, 32,
/* 0x1120 */ 32, 32, 48, 52,100, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 97,
/* 0x1130 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1140 */ 10, 32, 32, 53, 32, 80, 69, 73, 67, 79, 78, 83, 49, 32, 32, 32,
/* 0x1150 */ 32, 32, 32, 48, 55, 32, 32, 48, 32, 32, 48, 32, 32, 48, 97, 55,
/* 0x1160 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1170 */ 10, 32, 32, 54, 32, 80, 69, 73, 67, 79, 78, 83, 50, 32, 32, 32,
/* 0x1180 */ 32, 32, 32, 48, 57, 32, 32, 48, 32, 32, 48, 32, 32, 48, 97,101,
/* 0x1190 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x11a0 */ 10, 32, 32, 55, 32, 80, 69, 84, 76, 83, 72, 65, 75, 32, 32, 32,
/* 0x11b0 */ 32, 32, 32, 48, 49, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 98,
/* 0x11c0 */ 55, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x11d0 */ 83, 10, 32, 32, 56, 32, 80, 69, 77, 65, 73, 78, 48, 50, 32, 32,
/* 0x11e0 */ 32, 32, 32, 32, 48, 49, 32, 32, 48, 32, 32, 48, 32, 32, 48, 99,
/* 0x11f0 */ 55, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1200 */ 83, 10, 32, 32, 57, 32, 80, 69, 77, 65, 73, 78, 48, 51, 32, 32,
/* 0x1210 */ 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 99, 56,
/* 0x1220 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1230 */ 10, 32, 49, 48, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32,
/* 0x1240 */ 32, 32, 32, 48, 54, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 99,
/* 0x1250 */ 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1260 */ 83, 10, 32, 49, 49, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32,
/* 0x1270 */ 32, 32, 32, 32, 48, 56, 51, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1280 */ 49, 50, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1290 */ 78, 84, 83, 10, 32, 49, 50, 32, 78, 82, 86, 50, 68, 32, 32, 32,
/* 0x12a0 */ 32, 32, 32, 32, 32, 32, 48, 57, 49, 32, 32, 48, 32, 32, 48, 32,
/* 0x12b0 */ 32, 48, 49, 97, 98, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x12c0 */ 84, 69, 78, 84, 83, 10, 32, 49, 51, 32, 78, 82, 86, 50, 69, 32,
/* 0x12d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 48, 97, 97, 32, 32, 48, 32, 32,
/* 0x12e0 */ 48, 32, 32, 48, 50, 51, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x12f0 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 52, 32, 76, 90, 77, 65,
/* 0x1300 */ 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 48, 49, 52, 32, 32, 48,
/* 0x1310 */ 32, 32, 48, 32, 32, 48, 50,101, 54, 32, 32, 50, 42, 42, 48, 32,
/* 0x1320 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 53, 32, 76, 90,
/* 0x1330 */ 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 53, 97, 32,
/* 0x1340 */ 32, 48, 32, 32, 48, 32, 32, 48, 50,102, 97, 32, 32, 50, 42, 42,
/* 0x1350 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 54, 32,
/* 0x1360 */ 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32, 48, 97,
/* 0x1370 */ 48, 49, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 53, 52, 32, 32,
/* 0x1380 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x1390 */ 49, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32,
/* 0x13a0 */ 32, 48, 49, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48,100, 53, 53,
/* 0x13b0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x13c0 */ 10, 32, 49, 56, 32, 76, 90, 77, 65, 95, 84, 65, 73, 76, 32, 32,
/* 0x13d0 */ 32, 32, 32, 48, 50, 32, 32, 48, 32, 32, 48, 32, 32, 48,100, 54,
/* 0x13e0 */ 57, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x13f0 */ 83, 10, 32, 49, 57, 32, 80, 69, 77, 65, 73, 78, 49, 48, 32, 32,
/* 0x1400 */ 32, 32, 32, 32, 48, 49, 32, 32, 48, 32, 32, 48, 32, 32, 48,100,
/* 0x1410 */ 54, 98, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1420 */ 84, 83, 10, 32, 50, 48, 32, 80, 69, 84, 76, 83, 72, 65, 75, 50,
/* 0x1430 */ 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1440 */ 100, 54, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1450 */ 78, 84, 83, 10, 32, 50, 49, 32, 80, 69, 67, 84, 84, 80, 79, 83,
/* 0x1460 */ 32, 32, 32, 32, 32, 32, 48, 55, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x1470 */ 48,100, 55, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1480 */ 69, 78, 84, 83, 10, 32, 50, 50, 32, 80, 69, 67, 84, 84, 78, 85,
/* 0x1490 */ 76, 32, 32, 32, 32, 32, 32, 48, 51, 32, 32, 48, 32, 32, 48, 32,
/* 0x14a0 */ 32, 48,100, 55, 55, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x14b0 */ 84, 69, 78, 84, 83, 10, 32, 50, 51, 32, 80, 69, 70, 73, 76, 84,
/* 0x14c0 */ 69, 82, 52, 57, 32, 32, 32, 32, 48, 53, 50, 32, 32, 48, 32, 32,
/* 0x14d0 */ 48, 32, 32, 48,100, 55, 97, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x14e0 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 50, 52, 32, 80, 69, 73, 77,
/* 0x14f0 */ 80, 79, 82, 84, 32, 32, 32, 32, 32, 32, 48, 51, 52, 32, 32, 48,
/* 0x1500 */ 32, 32, 48, 32, 32, 48,100, 99, 99, 32, 32, 50, 42, 42, 48, 32,
/* 0x1510 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 50, 53, 32, 80, 69,
/* 0x1520 */ 73, 66, 89, 79, 82, 68, 32, 32, 32, 32, 32, 32, 48, 50, 32, 32,
/* 0x1530 */ 48, 32, 32, 48, 32, 32, 48,101, 48, 48, 32, 32, 50, 42, 42, 48,
/* 0x1540 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 50, 54, 32, 80,
/* 0x1550 */ 69, 75, 51, 50, 79, 82, 68, 32, 32, 32, 32, 32, 32, 48, 49, 50,
/* 0x1560 */ 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 48, 50, 32, 32, 50, 42,
/* 0x1570 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 50, 55,
/* 0x1580 */ 32, 80, 69, 73, 77, 79, 82, 68, 49, 32, 32, 32, 32, 32, 32, 48,
/* 0x1590 */ 97, 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 49, 52, 32, 32, 50,
/* 0x15a0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 50,
/* 0x15b0 */ 56, 32, 80, 69, 73, 77, 80, 79, 82, 50, 32, 32, 32, 32, 32, 32,
/* 0x15c0 */ 48, 50, 49, 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 49,101, 32,
/* 0x15d0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x15e0 */ 32, 50, 57, 32, 80, 69, 73, 69, 82, 68, 76, 76, 32, 32, 32, 32,
/* 0x15f0 */ 32, 32, 48, 98, 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 51,102,
/* 0x1600 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1610 */ 10, 32, 51, 48, 32, 80, 69, 73, 69, 82, 69, 88, 69, 32, 32, 32,
/* 0x1620 */ 32, 32, 32, 48, 54, 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 52,
/* 0x1630 */ 97, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1640 */ 83, 10, 32, 51, 49, 32, 80, 69, 73, 77, 68, 79, 78, 69, 32, 32,
/* 0x1650 */ 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48,101,
/* 0x1660 */ 53, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1670 */ 84, 83, 10, 32, 51, 50, 32, 80, 69, 82, 69, 76, 79, 67, 49, 32,
/* 0x1680 */ 32, 32, 32, 32, 32, 48, 55, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1690 */ 101, 53, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x16a0 */ 78, 84, 83, 10, 32, 51, 51, 32, 80, 69, 82, 69, 76, 79, 67, 50,
/* 0x16b0 */ 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x16c0 */ 48,101, 53, 98, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x16d0 */ 69, 78, 84, 83, 10, 32, 51, 52, 32, 80, 69, 82, 69, 76, 79, 67,
/* 0x16e0 */ 51, 32, 32, 32, 32, 32, 32, 48, 51, 48, 32, 32, 48, 32, 32, 48,
/* 0x16f0 */ 32, 32, 48,101, 53,102, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x1700 */ 78, 84, 69, 78, 84, 83, 10, 32, 51, 53, 32, 82, 69, 76, 54, 52,
/* 0x1710 */ 66, 73, 71, 32, 32, 32, 32, 32, 32, 48, 97, 32, 32, 48, 32, 32,
/* 0x1720 */ 48, 32, 32, 48,101, 56,102, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x1730 */ 79, 78, 84, 69, 78, 84, 83, 10, 32, 51, 54, 32, 82, 69, 76, 79,
/* 0x1740 */ 67, 54, 52, 74, 32, 32, 32, 32, 32, 32, 48, 50, 32, 32, 48, 32,
/* 0x1750 */ 32, 48, 32, 32, 48,101, 57, 57, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1760 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 51, 55, 32, 80, 69, 82,
/* 0x1770 */ 76, 79, 72, 73, 48, 32, 32, 32, 32, 32, 32, 48, 97, 32, 32, 48,
/* 0x1780 */ 32, 32, 48, 32, 32, 48,101, 57, 98, 32, 32, 50, 42, 42, 48, 32,
/* 0x1790 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 51, 56, 32, 80, 69,
/* 0x17a0 */ 82, 69, 76, 76, 79, 48, 32, 32, 32, 32, 32, 32, 48, 98, 32, 32,
/* 0x17b0 */ 48, 32, 32, 48, 32, 32, 48,101, 97, 53, 32, 32, 50, 42, 42, 48,
/* 0x17c0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 51, 57, 32, 80,
/* 0x17d0 */ 69, 82, 69, 76, 72, 73, 48, 32, 32, 32, 32, 32, 32, 48,101, 32,
/* 0x17e0 */ 32, 48, 32, 32, 48, 32, 32, 48,101, 98, 48, 32, 32, 50, 42, 42,
/* 0x17f0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 52, 48, 32,
/* 0x1800 */ 80, 69, 68, 69, 80, 72, 65, 75, 32, 32, 32, 32, 32, 32, 48, 52,
/* 0x1810 */ 98, 32, 32, 48, 32, 32, 48, 32, 32, 48,101, 98,101, 32, 32, 50,
/* 0x1820 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 52,
/* 0x1830 */ 49, 32, 80, 69, 84, 76, 83, 67, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1840 */ 48, 49, 98, 32, 32, 48, 32, 32, 48, 32, 32, 48,102, 48, 57, 32,
/* 0x1850 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x1860 */ 32, 52, 50, 32, 80, 69, 77, 65, 73, 78, 50, 48, 32, 32, 32, 32,
/* 0x1870 */ 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48,102, 50, 52,
/* 0x1880 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1890 */ 10, 32, 52, 51, 32, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 32,
/* 0x18a0 */ 32, 32, 32, 48, 49, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48,102,
/* 0x18b0 */ 50, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x18c0 */ 84, 83, 10, 32, 52, 52, 32, 80, 69, 77, 65, 73, 78, 50, 49, 32,
/* 0x18d0 */ 32, 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48,102,
/* 0x18e0 */ 51, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x18f0 */ 84, 83, 10, 32, 52, 53, 32, 80, 69, 73, 83, 68, 76, 76, 57, 32,
/* 0x1900 */ 32, 32, 32, 32, 32, 48,102, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1910 */ 102, 51, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1920 */ 78, 84, 83, 10, 32, 52, 54, 32, 80, 69, 73, 83, 69, 70, 73, 57,
/* 0x1930 */ 32, 32, 32, 32, 32, 32, 48, 50, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x1940 */ 48,102, 52, 55, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1950 */ 69, 78, 84, 83, 10, 32, 52, 55, 32, 80, 69, 82, 69, 84, 85, 82,
/* 0x1960 */ 78, 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32,
/* 0x1970 */ 32, 48,102, 52, 57, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1980 */ 84, 69, 78, 84, 83, 10, 32, 52, 56, 32, 80, 69, 68, 79, 74, 85,
/* 0x1990 */ 77, 80, 32, 32, 32, 32, 32, 32, 48, 53, 32, 32, 48, 32, 32, 48,
/* 0x19a0 */ 32, 32, 48,102, 52,100, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x19b0 */ 78, 84, 69, 78, 84, 83, 10, 32, 52, 57, 32, 80, 69, 84, 76, 83,
/* 0x19c0 */ 67, 50, 32, 32, 32, 32, 32, 32, 32, 48, 54, 53, 32, 32, 48, 32,
/* 0x19d0 */ 32, 48, 32, 32, 48,102, 53, 50, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x19e0 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 53, 48, 32, 85, 80, 88,
/* 0x19f0 */ 49, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 50, 48, 32, 32,
/* 0x1a00 */ 48, 32, 32, 48, 32, 32, 48,102, 98, 55, 32, 32, 50, 42, 42, 48,
/* 0x1a10 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79,
/* 0x1a20 */ 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x1a40 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 48, 32, 78, 82, 86,
/* 0x1a50 */ 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a60 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, 32, 32, 32, 80,
/* 0x1a70 */ 69, 73, 77, 68, 79, 78, 69, 32, 48, 32,105,109,112,111,114,116,
/* 0x1a80 */ 115, 95,100,111,110,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a90 */ 48, 48, 48, 48, 48, 50, 98, 32,108, 32, 32, 32, 32, 32, 32, 32,
/* 0x1aa0 */ 80, 69, 73, 77, 80, 79, 82, 84, 32, 48, 32,110,101,120,116, 95,
/* 0x1ab0 */ 102,117,110, 99, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 48, 48, 48, 97, 32,108, 32, 32, 32, 32, 32, 32, 32, 80, 69,
/* 0x1ad0 */ 73, 77, 79, 82, 68, 49, 32, 48, 32, 98,121,110, 97,109,101, 10,
/* 0x1ae0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 56,
/* 0x1af0 */ 32,108, 32, 32, 32, 32, 32, 32, 32, 80, 69, 73, 77, 80, 79, 82,
/* 0x1b00 */ 50, 32, 48, 32,110,101,120,116, 95,105,109,112, 10, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97, 32,108, 32,
/* 0x1b20 */ 32, 32, 32, 32, 32, 32, 80, 69, 73, 77, 80, 79, 82, 50, 32, 48,
/* 0x1b30 */ 32,102,105,114,115,116, 95,105,109,112, 10, 48, 48, 48, 48, 48,
/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 32,108, 32, 32, 32,
/* 0x1b50 */ 32, 32, 32, 32, 82, 69, 76, 79, 67, 54, 52, 74, 32, 48, 32,114,
/* 0x1b60 */ 101,108,111, 99, 95,101,110,100,120, 10, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 51, 32,108, 32, 32, 32, 32,
/* 0x1b80 */ 32, 32, 32, 80, 69, 82, 69, 76, 79, 67, 51, 32, 48, 32,114,101,
/* 0x1b90 */ 108,111, 99, 95, 97,100,100, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ba0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1bb0 */ 32, 80, 69, 84, 76, 83, 67, 50, 32, 48, 32, 80, 69, 84, 76, 83,
/* 0x1bc0 */ 67, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bd0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65,
/* 0x1be0 */ 73, 78, 50, 49, 32, 48, 32, 80, 69, 77, 65, 73, 78, 50, 49, 10,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 83, 84, 65, 82, 84, 32, 48,
/* 0x1c10 */ 32, 83, 84, 65, 82, 84, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1c30 */ 80, 69, 73, 83, 68, 76, 76, 48, 32, 48, 32, 80, 69, 73, 83, 68,
/* 0x1c40 */ 76, 76, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c50 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 73,
/* 0x1c60 */ 83, 69, 70, 73, 48, 32, 48, 32, 80, 69, 73, 83, 69, 70, 73, 48,
/* 0x1c70 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 73, 83, 68, 76,
/* 0x1c90 */ 76, 49, 32, 48, 32, 80, 69, 73, 83, 68, 76, 76, 49, 10, 48, 48,
/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1cb0 */ 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65, 73, 78, 48, 49, 32,
/* 0x1cc0 */ 48, 32, 80, 69, 77, 65, 73, 78, 48, 49, 10, 48, 48, 48, 48, 48,
/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1ce0 */ 32,100, 32, 32, 80, 69, 73, 67, 79, 78, 83, 49, 32, 48, 32, 80,
/* 0x1cf0 */ 69, 73, 67, 79, 78, 83, 49, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1d10 */ 32, 80, 69, 73, 67, 79, 78, 83, 50, 32, 48, 32, 80, 69, 73, 67,
/* 0x1d20 */ 79, 78, 83, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d30 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69,
/* 0x1d40 */ 84, 76, 83, 72, 65, 75, 32, 48, 32, 80, 69, 84, 76, 83, 72, 65,
/* 0x1d50 */ 75, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65, 73,
/* 0x1d70 */ 78, 48, 50, 32, 48, 32, 80, 69, 77, 65, 73, 78, 48, 50, 10, 48,
/* 0x1d80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d90 */ 108, 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65, 73, 78, 48, 51,
/* 0x1da0 */ 32, 48, 32, 80, 69, 77, 65, 73, 78, 48, 51, 10, 48, 48, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x1dc0 */ 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 32, 48, 32, 78, 82, 86,
/* 0x1dd0 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1de0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50,
/* 0x1df0 */ 68, 32, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x1e10 */ 100, 32, 32, 78, 82, 86, 50, 69, 32, 48, 32, 78, 82, 86, 50, 69,
/* 0x1e20 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e30 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 72,
/* 0x1e40 */ 69, 65, 68, 32, 48, 32, 76, 90, 77, 65, 95, 72, 69, 65, 68, 10,
/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e60 */ 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76,
/* 0x1e70 */ 70, 48, 48, 32, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48,
/* 0x1e80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e90 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1ea0 */ 69, 67, 50, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50,
/* 0x1eb0 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ec0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x1ed0 */ 68, 69, 67, 51, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1ee0 */ 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ef0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1f00 */ 95, 84, 65, 73, 76, 32, 48, 32, 76, 90, 77, 65, 95, 84, 65, 73,
/* 0x1f10 */ 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f20 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65, 73,
/* 0x1f30 */ 78, 49, 48, 32, 48, 32, 80, 69, 77, 65, 73, 78, 49, 48, 10, 48,
/* 0x1f40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1f50 */ 108, 32, 32, 32, 32,100, 32, 32, 80, 69, 84, 76, 83, 72, 65, 75,
/* 0x1f60 */ 50, 32, 48, 32, 80, 69, 84, 76, 83, 72, 65, 75, 50, 10, 48, 48,
/* 0x1f70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x1f80 */ 32, 32, 32, 32,100, 32, 32, 80, 69, 67, 84, 84, 80, 79, 83, 32,
/* 0x1f90 */ 48, 32, 80, 69, 67, 84, 84, 80, 79, 83, 10, 48, 48, 48, 48, 48,
/* 0x1fa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1fb0 */ 32,100, 32, 32, 80, 69, 67, 84, 84, 78, 85, 76, 32, 48, 32, 80,
/* 0x1fc0 */ 69, 67, 84, 84, 78, 85, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1fd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x1fe0 */ 32, 80, 69, 70, 73, 76, 84, 69, 82, 52, 57, 32, 48, 32, 80, 69,
/* 0x1ff0 */ 70, 73, 76, 84, 69, 82, 52, 57, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x2000 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x2010 */ 32, 32, 80, 69, 73, 77, 80, 79, 82, 84, 32, 48, 32, 80, 69, 73,
/* 0x2020 */ 77, 80, 79, 82, 84, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2030 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80,
/* 0x2040 */ 69, 73, 66, 89, 79, 82, 68, 32, 48, 32, 80, 69, 73, 66, 89, 79,
/* 0x2050 */ 82, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2060 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 75, 51,
/* 0x2070 */ 50, 79, 82, 68, 32, 48, 32, 80, 69, 75, 51, 50, 79, 82, 68, 10,
/* 0x2080 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2090 */ 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 73, 77, 79, 82, 68,
/* 0x20a0 */ 49, 32, 48, 32, 80, 69, 73, 77, 79, 82, 68, 49, 10, 48, 48, 48,
/* 0x20b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x20c0 */ 32, 32, 32,100, 32, 32, 80, 69, 73, 77, 80, 79, 82, 50, 32, 48,
/* 0x20d0 */ 32, 80, 69, 73, 77, 80, 79, 82, 50, 10, 48, 48, 48, 48, 48, 48,
/* 0x20e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x20f0 */ 100, 32, 32, 80, 69, 73, 69, 82, 68, 76, 76, 32, 48, 32, 80, 69,
/* 0x2100 */ 73, 69, 82, 68, 76, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2110 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x2120 */ 80, 69, 73, 69, 82, 69, 88, 69, 32, 48, 32, 80, 69, 73, 69, 82,
/* 0x2130 */ 69, 88, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2140 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 73,
/* 0x2150 */ 77, 68, 79, 78, 69, 32, 48, 32, 80, 69, 73, 77, 68, 79, 78, 69,
/* 0x2160 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2170 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 82, 69, 76, 79,
/* 0x2180 */ 67, 49, 32, 48, 32, 80, 69, 82, 69, 76, 79, 67, 49, 10, 48, 48,
/* 0x2190 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x21a0 */ 32, 32, 32, 32,100, 32, 32, 80, 69, 82, 69, 76, 79, 67, 50, 32,
/* 0x21b0 */ 48, 32, 80, 69, 82, 69, 76, 79, 67, 50, 10, 48, 48, 48, 48, 48,
/* 0x21c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x21d0 */ 32,100, 32, 32, 80, 69, 82, 69, 76, 79, 67, 51, 32, 48, 32, 80,
/* 0x21e0 */ 69, 82, 69, 76, 79, 67, 51, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x21f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x2200 */ 32, 82, 69, 76, 54, 52, 66, 73, 71, 32, 48, 32, 82, 69, 76, 54,
/* 0x2210 */ 52, 66, 73, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2220 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 82, 69,
/* 0x2230 */ 76, 79, 67, 54, 52, 74, 32, 48, 32, 82, 69, 76, 79, 67, 54, 52,
/* 0x2240 */ 74, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2250 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 82, 76, 79,
/* 0x2260 */ 72, 73, 48, 32, 48, 32, 80, 69, 82, 76, 79, 72, 73, 48, 10, 48,
/* 0x2270 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x2280 */ 108, 32, 32, 32, 32,100, 32, 32, 80, 69, 82, 69, 76, 76, 79, 48,
/* 0x2290 */ 32, 48, 32, 80, 69, 82, 69, 76, 76, 79, 48, 10, 48, 48, 48, 48,
/* 0x22a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x22b0 */ 32, 32,100, 32, 32, 80, 69, 82, 69, 76, 72, 73, 48, 32, 48, 32,
/* 0x22c0 */ 80, 69, 82, 69, 76, 72, 73, 48, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x22d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x22e0 */ 32, 32, 80, 69, 68, 69, 80, 72, 65, 75, 32, 48, 32, 80, 69, 68,
/* 0x22f0 */ 69, 80, 72, 65, 75, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2300 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80,
/* 0x2310 */ 69, 84, 76, 83, 67, 32, 48, 32, 80, 69, 84, 76, 83, 67, 10, 48,
/* 0x2320 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x2330 */ 108, 32, 32, 32, 32,100, 32, 32, 80, 69, 77, 65, 73, 78, 50, 48,
/* 0x2340 */ 32, 48, 32, 80, 69, 77, 65, 73, 78, 50, 48, 10, 48, 48, 48, 48,
/* 0x2350 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x2360 */ 32, 32,100, 32, 32, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 32,
/* 0x2370 */ 48, 32, 67, 76, 69, 65, 82, 83, 84, 65, 67, 75, 10, 48, 48, 48,
/* 0x2380 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x2390 */ 32, 32, 32,100, 32, 32, 80, 69, 73, 83, 68, 76, 76, 57, 32, 48,
/* 0x23a0 */ 32, 80, 69, 73, 83, 68, 76, 76, 57, 10, 48, 48, 48, 48, 48, 48,
/* 0x23b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x23c0 */ 100, 32, 32, 80, 69, 73, 83, 69, 70, 73, 57, 32, 48, 32, 80, 69,
/* 0x23d0 */ 73, 83, 69, 70, 73, 57, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x23e0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x23f0 */ 80, 69, 82, 69, 84, 85, 82, 78, 32, 48, 32, 80, 69, 82, 69, 84,
/* 0x2400 */ 85, 82, 78, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2410 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 80, 69, 68,
/* 0x2420 */ 79, 74, 85, 77, 80, 32, 48, 32, 80, 69, 68, 79, 74, 85, 77, 80,
/* 0x2430 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2440 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 85, 80, 88, 49, 72, 69,
/* 0x2450 */ 65, 68, 32, 48, 32, 85, 80, 88, 49, 72, 69, 65, 68, 10, 48, 48,
/* 0x2460 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x2470 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 76,
/* 0x2480 */ 111, 97,100, 76,105, 98,114, 97,114,121, 65, 10, 48, 48, 48, 48,
/* 0x2490 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x24a0 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 71,101,116,
/* 0x24b0 */ 80,114,111, 99, 65,100,100,114,101,115,115, 10, 48, 48, 48, 48,
/* 0x24c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x24d0 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,115,116, 97,
/* 0x24e0 */ 114,116, 95,111,102, 95, 99,111,109,112,114,101,115,115,101,100,
/* 0x24f0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2500 */ 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32,
/* 0x2510 */ 48, 32,115,116, 97,114,116, 95,111,102, 95,117,110, 99,111,109,
/* 0x2520 */ 112,114,101,115,115,101,100, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2530 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2540 */ 32, 42, 85, 78, 68, 42, 32, 48, 32,105, 99,111,110, 95,111,102,
/* 0x2550 */ 102,115,101,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2560 */ 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85,
/* 0x2570 */ 78, 68, 42, 32, 48, 32,105, 99,111,110, 95,100,101,108,116, 97,
/* 0x2580 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2590 */ 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32,
/* 0x25a0 */ 48, 32,116,108,115, 95, 97,100,100,114,101,115,115, 10, 48, 48,
/* 0x25b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x25c0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,116,
/* 0x25d0 */ 108,115, 95,118, 97,108,117,101, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x25e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32,
/* 0x25f0 */ 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,108,122,109, 97, 95,117,
/* 0x2600 */ 95,108,101,110, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2610 */ 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85,
/* 0x2620 */ 78, 68, 42, 32, 48, 32,108,122,109, 97, 95, 99, 95,108,101,110,
/* 0x2630 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2640 */ 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32,
/* 0x2650 */ 48, 32,102,105,108,116,101,114, 95, 98,117,102,102,101,114, 95,
/* 0x2660 */ 115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2670 */ 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42,
/* 0x2680 */ 85, 78, 68, 42, 32, 48, 32,102,105,108,116,101,114, 95,108,101,
/* 0x2690 */ 110,103,116,104, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x26a0 */ 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85,
/* 0x26b0 */ 78, 68, 42, 32, 48, 32,102,105,108,116,101,114, 95, 99,116,111,
/* 0x26c0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x26d0 */ 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32,
/* 0x26e0 */ 48, 32, 99,111,109,112,114,101,115,115,101,100, 95,105,109,112,
/* 0x26f0 */ 111,114,116,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2700 */ 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85,
/* 0x2710 */ 78, 68, 42, 32, 48, 32,115,116, 97,114,116, 95,111,102, 95,105,
/* 0x2720 */ 109,112,111,114,116,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2730 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2740 */ 42, 85, 78, 68, 42, 32, 48, 32,107,101,114,110,101,108, 51, 50,
/* 0x2750 */ 95,111,114,100,105,110, 97,108,115, 10, 48, 48, 48, 48, 48, 48,
/* 0x2760 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32,
/* 0x2770 */ 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 69,120,105,116, 80,
/* 0x2780 */ 114,111, 99,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2790 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x27a0 */ 42, 85, 78, 68, 42, 32, 48, 32,115,116, 97,114,116, 95,111,102,
/* 0x27b0 */ 95,114,101,108,111, 99,115, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x27c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x27d0 */ 32, 42, 85, 78, 68, 42, 32, 48, 32,114,101,108,111, 99, 95,100,
/* 0x27e0 */ 101,108,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x27f0 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x2800 */ 68, 42, 32, 48, 32, 86,105,114,116,117, 97,108, 80,114,111,116,
/* 0x2810 */ 101, 99,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2820 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x2830 */ 68, 42, 32, 48, 32,118,112, 95, 98, 97,115,101, 10, 48, 48, 48,
/* 0x2840 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32,
/* 0x2850 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,118,112,
/* 0x2860 */ 95,115,105,122,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2870 */ 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42,
/* 0x2880 */ 85, 78, 68, 42, 32, 48, 32,115,119,114,105, 10, 48, 48, 48, 48,
/* 0x2890 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32,
/* 0x28a0 */ 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,116,108,115,
/* 0x28b0 */ 95,109,111,100,117,108,101, 95, 98, 97,115,101, 10, 48, 48, 48,
/* 0x28c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32,
/* 0x28d0 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,111,114,
/* 0x28e0 */ 105,103,105,110, 97,108, 95,101,110,116,114,121, 10, 48, 48, 48,
/* 0x28f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32,
/* 0x2900 */ 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,116,108,
/* 0x2910 */ 115, 95, 99, 97,108,108, 98, 97, 99,107,115, 95,112,116,114, 10,
/* 0x2920 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x2930 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 73, 83, 68, 76, 76,
/* 0x2940 */ 49, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32,
/* 0x2950 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x2960 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x2970 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 32, 82, 95,
/* 0x2980 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x2990 */ 80, 69, 77, 65, 73, 78, 50, 49, 45, 48,120, 48, 48, 48, 48, 48,
/* 0x29a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 10, 82, 69, 76,
/* 0x29b0 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x29c0 */ 70, 79, 82, 32, 91, 80, 69, 77, 65, 73, 78, 48, 49, 93, 58, 10,
/* 0x29d0 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x29e0 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x29f0 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x2a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 98, 32, 82, 95, 88, 56, 54, 95,
/* 0x2a10 */ 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 80, 69, 84, 76,
/* 0x2a20 */ 83, 67, 50, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2a30 */ 48, 48, 48, 48, 50, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2a40 */ 48, 48, 48, 48, 48, 49, 49, 32, 82, 95, 88, 56, 54, 95, 54, 52,
/* 0x2a50 */ 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 76,111, 97,100, 76,105,
/* 0x2a60 */ 98,114, 97,114,121, 65, 45, 48,120, 48, 48, 48, 48, 48, 48, 48,
/* 0x2a70 */ 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 48, 48, 48, 48, 48, 48,
/* 0x2a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 98, 32, 82, 95, 88, 56, 54,
/* 0x2a90 */ 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 80, 69, 84,
/* 0x2aa0 */ 76, 83, 67, 50, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2ab0 */ 48, 48, 48, 48, 48, 50,100, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2ac0 */ 48, 48, 48, 48, 48, 48, 50, 49, 32, 82, 95, 88, 56, 54, 95, 54,
/* 0x2ad0 */ 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 71,101,116, 80,114,
/* 0x2ae0 */ 111, 99, 65,100,100,114,101,115,115, 45, 48,120, 48, 48, 48, 48,
/* 0x2af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 48, 48, 48,
/* 0x2b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 98, 32, 82, 95,
/* 0x2b10 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x2b20 */ 80, 69, 84, 76, 83, 67, 50, 43, 48,120, 48, 48, 48, 48, 48, 48,
/* 0x2b30 */ 48, 48, 48, 48, 48, 48, 48, 48, 52, 57, 10, 48, 48, 48, 48, 48,
/* 0x2b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 50, 32, 82, 95, 88, 56,
/* 0x2b50 */ 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 80, 69,
/* 0x2b60 */ 84, 76, 83, 67, 50, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2b70 */ 48, 48, 48, 48, 48, 48, 51, 57, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x2b80 */ 48, 48, 48, 48, 48, 48, 48, 52, 50, 32, 82, 95, 88, 56, 54, 95,
/* 0x2b90 */ 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,115,116, 97,114,
/* 0x2ba0 */ 116, 95,111,102, 95, 99,111,109,112,114,101,115,115,101,100, 45,
/* 0x2bb0 */ 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2bc0 */ 48, 52, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2bd0 */ 48, 52, 57, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83,
/* 0x2be0 */ 32, 32, 32, 32, 32, 32,115,116, 97,114,116, 95,111,102, 95,117,
/* 0x2bf0 */ 110, 99,111,109,112,114,101,115,115,101,100, 10, 10, 82, 69, 76,
/* 0x2c00 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x2c10 */ 70, 79, 82, 32, 91, 80, 69, 73, 67, 79, 78, 83, 49, 93, 58, 10,
/* 0x2c20 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2c30 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2c40 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x2c50 */ 48, 48, 48, 48, 48, 48, 48, 48, 51, 32, 82, 95, 88, 56, 54, 95,
/* 0x2c60 */ 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32,105, 99,111,110,
/* 0x2c70 */ 95,111,102,102,115,101,116, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x2c80 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x2c90 */ 91, 80, 69, 73, 67, 79, 78, 83, 50, 93, 58, 10, 79, 70, 70, 83,
/* 0x2ca0 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x2cb0 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x2cc0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2cd0 */ 48, 48, 48, 48, 51, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51,
/* 0x2ce0 */ 50, 83, 32, 32, 32, 32, 32, 32,105, 99,111,110, 95,111,102,102,
/* 0x2cf0 */ 115,101,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2d00 */ 48, 48, 48, 55, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 49, 54,
/* 0x2d10 */ 32, 32, 32, 32, 32, 32, 32,105, 99,111,110, 95,100,101,108,116,
/* 0x2d20 */ 97, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2d30 */ 56, 48, 48, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x2d40 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69,
/* 0x2d50 */ 84, 76, 83, 72, 65, 75, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x2d60 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x2d70 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x2d80 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2d90 */ 48, 51, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32,
/* 0x2da0 */ 32, 32, 32, 32, 32,116,108,115, 95, 97,100,100,114,101,115,115,
/* 0x2db0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2dc0 */ 98, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32,
/* 0x2dd0 */ 32, 32, 32, 32,116,108,115, 95,118, 97,108,117,101, 43, 48,120,
/* 0x2de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 56, 48, 48, 48, 48, 48, 48, 48,
/* 0x2df0 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x2e00 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93,
/* 0x2e10 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2e20 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2e30 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x2e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 55,100, 32, 82, 95, 88, 56,
/* 0x2e50 */ 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 78, 82,
/* 0x2e60 */ 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, 48, 48, 48,
/* 0x2e70 */ 48, 48, 48, 48, 48, 48, 48, 49, 98, 10, 10, 82, 69, 76, 79, 67,
/* 0x2e80 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79,
/* 0x2e90 */ 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x2ea0 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x2eb0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x2ec0 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2ed0 */ 48, 48, 56, 56, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67,
/* 0x2ee0 */ 51, 50, 32, 32, 32, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 43,
/* 0x2ef0 */ 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2f00 */ 49, 98, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82,
/* 0x2f10 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50,
/* 0x2f20 */ 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32,
/* 0x2f30 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x2f40 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x2f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97, 49, 32, 82, 95,
/* 0x2f60 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x2f70 */ 78, 82, 86, 95, 72, 69, 65, 68, 43, 48,120, 48, 48, 48, 48, 48,
/* 0x2f80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 98, 10, 10, 82, 69, 76,
/* 0x2f90 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x2fa0 */ 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 72, 69, 65, 68, 93, 58,
/* 0x2fb0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2fc0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2fd0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x2fe0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 32, 82, 95, 88, 56, 54,
/* 0x2ff0 */ 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32,108,122,109,
/* 0x3000 */ 97, 95,117, 95,108,101,110, 43, 48,120, 48, 48, 48, 48, 48, 48,
/* 0x3010 */ 48, 48, 56, 48, 48, 48, 48, 48, 48, 48, 10, 48, 48, 48, 48, 48,
/* 0x3020 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 32, 82, 95, 88, 56,
/* 0x3030 */ 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32,108,122,
/* 0x3040 */ 109, 97, 95, 99, 95,108,101,110, 43, 48,120, 48, 48, 48, 48, 48,
/* 0x3050 */ 48, 48, 48, 56, 48, 48, 48, 48, 48, 48, 48, 10, 10, 82, 69, 76,
/* 0x3060 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x3070 */ 70, 79, 82, 32, 91, 80, 69, 67, 84, 84, 80, 79, 83, 93, 58, 10,
/* 0x3080 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3090 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x30a0 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x30b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 51, 32, 82, 95, 88, 56, 54, 95,
/* 0x30c0 */ 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32,102,105,108,116,
/* 0x30d0 */ 101,114, 95, 98,117,102,102,101,114, 95,115,116, 97,114,116, 10,
/* 0x30e0 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x30f0 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 70, 73, 76, 84, 69,
/* 0x3100 */ 82, 52, 57, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x3110 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x3120 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x3130 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 32,
/* 0x3140 */ 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32, 32, 32, 32,
/* 0x3150 */ 32, 32,102,105,108,116,101,114, 95,108,101,110,103,116,104, 10,
/* 0x3160 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99,
/* 0x3170 */ 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 56, 32, 32, 32, 32, 32,
/* 0x3180 */ 32, 32, 32,102,105,108,116,101,114, 95, 99,116,111, 10, 10, 82,
/* 0x3190 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68,
/* 0x31a0 */ 83, 32, 70, 79, 82, 32, 91, 80, 69, 73, 77, 80, 79, 82, 84, 93,
/* 0x31b0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x31c0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x31d0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x31e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 55, 32, 82, 95, 88, 56,
/* 0x31f0 */ 54, 95, 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32, 99,111,
/* 0x3200 */ 109,112,114,101,115,115,101,100, 95,105,109,112,111,114,116,115,
/* 0x3210 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49,
/* 0x3220 */ 48, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 56, 32, 32,
/* 0x3230 */ 32, 32, 32, 32,105,109,112,111,114,116,115, 95,100,111,110,101,
/* 0x3240 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49,
/* 0x3250 */ 56, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32, 32,
/* 0x3260 */ 32, 32, 32, 32,115,116, 97,114,116, 95,111,102, 95,105,109,112,
/* 0x3270 */ 111,114,116,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3280 */ 48, 48, 48, 50, 53, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80,
/* 0x3290 */ 67, 51, 50, 32, 32, 32, 32, 32, 76,111, 97,100, 76,105, 98,114,
/* 0x32a0 */ 97,114,121, 65, 45, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x32b0 */ 48, 48, 48, 48, 48, 48, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x32c0 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x32d0 */ 91, 80, 69, 73, 66, 89, 79, 82, 68, 93, 58, 10, 79, 70, 70, 83,
/* 0x32e0 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x32f0 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x3300 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3310 */ 48, 48, 48, 48, 49, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80,
/* 0x3320 */ 67, 56, 32, 32, 32, 32, 32, 32, 98,121,110, 97,109,101, 10, 10,
/* 0x3330 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x3340 */ 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 75, 51, 50, 79, 82, 68,
/* 0x3350 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x3360 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3370 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x3380 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 32, 82, 95, 88,
/* 0x3390 */ 56, 54, 95, 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32,107,
/* 0x33a0 */ 101,114,110,101,108, 51, 50, 95,111,114,100,105,110, 97,108,115,
/* 0x33b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49,
/* 0x33c0 */ 49, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 56, 32, 32,
/* 0x33d0 */ 32, 32, 32, 32,110,101,120,116, 95,105,109,112, 10, 10, 82, 69,
/* 0x33e0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x33f0 */ 32, 70, 79, 82, 32, 91, 80, 69, 73, 77, 79, 82, 68, 49, 93, 58,
/* 0x3400 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3410 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3420 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x3430 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 32, 82, 95, 88, 56, 54,
/* 0x3440 */ 95, 54, 52, 95, 80, 67, 56, 32, 32, 32, 32, 32, 32,102,105,114,
/* 0x3450 */ 115,116, 95,105,109,112, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x3460 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x3470 */ 80, 69, 73, 77, 80, 79, 82, 50, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x3480 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x3490 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x34a0 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x34b0 */ 48, 48, 48,102, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67,
/* 0x34c0 */ 51, 50, 32, 32, 32, 32, 32, 71,101,116, 80,114,111, 99, 65,100,
/* 0x34d0 */ 100,114,101,115,115, 45, 48,120, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x34e0 */ 48, 48, 48, 48, 48, 48, 48, 52, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x34f0 */ 48, 48, 48, 48, 48, 48, 48, 50, 48, 32, 82, 95, 88, 56, 54, 95,
/* 0x3500 */ 54, 52, 95, 80, 67, 56, 32, 32, 32, 32, 32, 32,110,101,120,116,
/* 0x3510 */ 95,102,117,110, 99, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x3520 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80,
/* 0x3530 */ 69, 73, 69, 82, 69, 88, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x3540 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x3550 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x3560 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3570 */ 48, 48, 50, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51,
/* 0x3580 */ 50, 32, 32, 32, 32, 32, 69,120,105,116, 80,114,111, 99,101,115,
/* 0x3590 */ 115, 45, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x35a0 */ 48, 48, 48, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x35b0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69,
/* 0x35c0 */ 82, 69, 76, 79, 67, 49, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x35d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x35e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x35f0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3600 */ 48, 51, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32,
/* 0x3610 */ 32, 32, 32, 32, 32,115,116, 97,114,116, 95,111,102, 95,114,101,
/* 0x3620 */ 108,111, 99,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x3630 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69,
/* 0x3640 */ 82, 69, 76, 79, 67, 51, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x3650 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x3660 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x3670 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3680 */ 48,101, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 56, 32,
/* 0x3690 */ 32, 32, 32, 32, 32,114,101,108,111, 99, 95,101,110,100,120, 10,
/* 0x36a0 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x36b0 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 82, 69, 76, 54, 52, 66, 73,
/* 0x36c0 */ 71, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32,
/* 0x36d0 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x36e0 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x36f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 32, 82, 95,
/* 0x3700 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 56, 32, 32, 32, 32, 32, 32,
/* 0x3710 */ 114,101,108,111, 99, 95, 97,100,100, 10, 10, 82, 69, 76, 79, 67,
/* 0x3720 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79,
/* 0x3730 */ 82, 32, 91, 82, 69, 76, 79, 67, 54, 52, 74, 93, 58, 10, 79, 70,
/* 0x3740 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
/* 0x3750 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3760 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3770 */ 48, 48, 48, 48, 48, 48, 49, 32, 82, 95, 88, 56, 54, 95, 54, 52,
/* 0x3780 */ 95, 80, 67, 56, 32, 32, 32, 32, 32, 32,114,101,108,111, 99, 95,
/* 0x3790 */ 97,100,100, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32,
/* 0x37a0 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 82,
/* 0x37b0 */ 76, 79, 72, 73, 48, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32,
/* 0x37c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32,
/* 0x37d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69,
/* 0x37e0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x37f0 */ 54, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32, 32,
/* 0x3800 */ 32, 32, 32, 32,114,101,108,111, 99, 95,100,101,108,116, 10, 10,
/* 0x3810 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x3820 */ 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 68, 69, 80, 72, 65, 75,
/* 0x3830 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x3840 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3850 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x3860 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 32, 82, 95, 88,
/* 0x3870 */ 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32, 86,
/* 0x3880 */ 105,114,116,117, 97,108, 80,114,111,116,101, 99,116, 45, 48,120,
/* 0x3890 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52,
/* 0x38a0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x38b0 */ 97, 32, 82, 95, 88, 56, 54, 95, 54, 52, 95, 51, 50, 83, 32, 32,
/* 0x38c0 */ 32, 32, 32, 32,118,112, 95, 98, 97,115,101, 10, 48, 48, 48, 48,
/* 0x38d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 32, 82, 95, 88,
/* 0x38e0 */ 56, 54, 95, 54, 52, 95, 51, 50, 32, 32, 32, 32, 32, 32, 32,118,
/* 0x38f0 */ 112, 95,115,105,122,101, 43, 48,120, 48, 48, 48, 48, 48, 48, 48,
/* 0x3900 */ 48, 56, 48, 48, 48, 48, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48,
/* 0x3910 */ 48, 48, 48, 48, 48, 48, 48, 48, 50, 99, 32, 82, 95, 88, 56, 54,
/* 0x3920 */ 95, 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32,115,119,114,
/* 0x3930 */ 105, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69,
/* 0x3940 */ 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 80, 69, 84, 76, 83,
/* 0x3950 */ 67, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32,
/* 0x3960 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32,
/* 0x3970 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48,
/* 0x3980 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 32, 82, 95,
/* 0x3990 */ 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,
/* 0x39a0 */ 80, 69, 84, 76, 83, 67, 50, 45, 48,120, 48, 48, 48, 48, 48, 48,
/* 0x39b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 10, 48, 48, 48, 48, 48,
/* 0x39c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 97, 32, 82, 95, 88, 56,
/* 0x39d0 */ 54, 95, 54, 52, 95, 51, 50, 83, 32, 32, 32, 32, 32, 32,116,108,
/* 0x39e0 */ 115, 95,109,111,100,117,108,101, 95, 98, 97,115,101, 10, 48, 48,
/* 0x39f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 54, 32, 82,
/* 0x3a00 */ 95, 88, 56, 54, 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32,
/* 0x3a10 */ 32, 80, 69, 84, 76, 83, 67, 50, 45, 48,120, 48, 48, 48, 48, 48,
/* 0x3a20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 10, 82, 69, 76,
/* 0x3a30 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x3a40 */ 70, 79, 82, 32, 91, 80, 69, 68, 79, 74, 85, 77, 80, 93, 58, 10,
/* 0x3a50 */ 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3a60 */ 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3a70 */ 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x3a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 32, 82, 95, 88, 56, 54, 95,
/* 0x3a90 */ 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,111,114,105,103,
/* 0x3aa0 */ 105,110, 97,108, 95,101,110,116,114,121, 45, 48,120, 48, 48, 48,
/* 0x3ab0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 10, 82,
/* 0x3ac0 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68,
/* 0x3ad0 */ 83, 32, 70, 79, 82, 32, 91, 80, 69, 84, 76, 83, 67, 50, 93, 58,
/* 0x3ae0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3af0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x3b00 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x3b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 32, 82, 95, 88, 56, 54,
/* 0x3b20 */ 95, 54, 52, 95, 80, 67, 51, 50, 32, 32, 32, 32, 32,116,108,115,
/* 0x3b30 */ 95, 99, 97,108,108, 98, 97, 99,107,115, 95,112,116,114, 45, 48,
/* 0x3b40 */ 120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x3b50 */ 52, 10
};
+920 -919
View File
File diff suppressed because it is too large Load Diff
+962 -834
View File
File diff suppressed because it is too large Load Diff
+2267 -2270
View File
File diff suppressed because it is too large Load Diff
+969 -840
View File
File diff suppressed because it is too large Load Diff
+2275 -2278
View File
File diff suppressed because it is too large Load Diff
+188 -106
View File
@@ -1,5 +1,5 @@
/* arm64-linux.elf-entry.h /* arm64-linux.elf-entry.h
created from arm64-linux.elf-entry.bin, 1656 (0x678) bytes created from arm64-linux.elf-entry.bin, 2971 (0xb9b) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -32,113 +32,195 @@
/* clang-format off */ /* clang-format off */
#define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 1656 #define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 2971
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0xebefbc2c #define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0x0d9b4202
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x6e19662b #define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x7209b84d
unsigned char stub_arm64_linux_elf_entry[1656] = { unsigned char stub_arm64_linux_elf_entry[2971] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 0, 0,224, 7,191,169,211,255,255, 24,224, 99, 0,145, /* 0x0040 */ 0, 0, 0, 0,224, 7,191,169,211,255,255, 24, 18, 0, 0, 16,
/* 0x0050 */ 76, 0, 0,148, 75, 0, 0,148,246, 3, 0,170,255,131, 0,209, /* 0x0050 */ 32, 20, 0, 16,129, 0,128,210,224, 7,188,169,255, 15, 0,249,
/* 0x0060 */ 1, 8,193,168, 63, 24, 0,113, 96, 0, 0, 84,161,255,255, 53, /* 0x0060 */ 255, 19, 0,249, 3, 1,128,210,226, 3, 31,170,225, 3, 0,145,
/* 0x0070 */ 34, 0,160,210,250, 3, 2,203,250, 3, 0,249, 0, 0, 0,148, /* 0x0070 */ 96, 1,128, 82,200, 16,128, 82, 1, 0, 0,212,255, 3, 1,145,
/* 0x0080 */ 244, 3, 30,170, 1, 2,128, 82, 0, 0, 0, 16,232, 34,128, 82, /* 0x0080 */ 114, 25, 0, 16,209, 0, 0, 20, 47,112,114,111, 99, 47,115,101,
/* 0x0090 */ 1, 0, 0,212, 0, 2,248, 54, 97, 0, 0, 52,225, 3, 31, 42, /* 0x0090 */ 108,102, 47, 99,109,100,108,105,110,101, 0, 10, 10, 83, 73, 71,
/* 0x00a0 */ 250,255,255, 23, 6, 0, 0,148,192, 1, 0, 0, 2, 64, 64, 0, /* 0x00a0 */ 83, 69, 71, 86, 32, 97,100,100,114,101,115,115, 32,115,112, 97,
/* 0x00b0 */ 47,100,101,118, 47,115,104,109, 0, 0, 0, 0,195, 71, 64,184, /* 0x00b0 */ 99,101, 58, 10, 0, 47,112,114,111, 99, 47,115,101,108,102, 47,
/* 0x00c0 */ 194, 71, 64,184,225, 3, 30,170, 96, 12,128, 18, 8, 7,128, 82, /* 0x00c0 */ 109, 97,112,115, 0, 45,113, 0, 47,117,115,114, 47, 98,105,110,
/* 0x00d0 */ 1, 0, 0,212,251, 3, 0, 42,128, 6, 64,185,253, 3, 0,145, /* 0x00d0 */ 47,103,100, 98, 0,115,101,116, 32,112,114,111,109,112,116, 10,
/* 0x00e0 */ 160, 3, 0,203, 0,236,124,146, 31, 0, 0,145,226, 3, 0,170, /* 0x00e0 */ 105,110,102,111, 32,105,110,102,101,114,105,111,114,115, 10,112,
/* 0x00f0 */ 225, 15, 31,248,227, 3, 0,145,128, 66, 0,145,129, 10, 64,185, /* 0x00f0 */ 114,105,110,116, 32, 34,120, 48, 45,120, 55, 34, 10,120, 47, 56,
/* 0x0100 */ 132, 50, 64, 57, 34, 0, 0,148,232, 7, 65,248,250, 3, 0,249, /* 0x0100 */ 120,103, 32, 36,115,112, 32, 43, 32, 48,120, 49, 51, 56, 10,112,
/* 0x0110 */ 130, 6, 64,185,225, 3, 0,145,224, 3, 27, 42, 8, 8,128, 82, /* 0x0110 */ 114,105,110,116, 32, 34,120, 56, 45,120, 49, 53, 34, 10,120, 47,
/* 0x0120 */ 1, 0, 0,212,191, 3, 0,145, 5, 0,128,210,228, 3, 27, 42, /* 0x0120 */ 56,120,103, 10,112,114,105,110,116, 32, 34,120, 49, 54, 45,120,
/* 0x0130 */ 35, 0,128, 82,162, 0,128, 82,129, 6, 64,185,225, 15, 0,249, /* 0x0130 */ 50, 51, 34, 10,120, 47, 56,120,103, 10,112,114,105,110,116, 32,
/* 0x0140 */ 0, 0,128,210,200, 27,128, 82, 1, 0, 0,212,224, 11, 0,249, /* 0x0140 */ 34,120, 50, 52, 45,120, 51, 48, 34, 10,120, 47, 55,120,103, 10,
/* 0x0150 */ 252, 3, 0,170,224, 3, 27, 42, 40, 7,128, 82, 1, 0, 0,212, /* 0x0150 */ 115,101,116, 32, 36,112, 99, 32, 61, 32, 42, 40,108,111,110,103,
/* 0x0160 */ 253, 11, 64,185,129, 2, 64,185,158, 83, 0,145,189, 3, 1, 75, /* 0x0160 */ 32, 42, 41, 40, 36,115,112, 32, 43, 32, 48,120, 50, 51, 56, 41,
/* 0x0170 */ 253, 7, 0,249, 33,120, 30, 18, 60, 3, 1,139,192, 3, 31,214, /* 0x0170 */ 10,112,114,105,110,116, 32, 34,102, 97,117,108,116,105,110,103,
/* 0x0180 */ 1,132, 64,248,225,255,255,181,192, 3, 95,214, 1, 64, 33,139, /* 0x0180 */ 32,105,110,115,116,114, 34, 10,120, 47,105, 32, 36,112, 99, 10,
/* 0x0190 */ 225, 11,190,169,227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, /* 0x0190 */ 112,114,105,110,116, 32, 34,102, 97,117,108,116, 32, 99,111,110,
/* 0x01a0 */ 26, 0, 0, 20,228,123, 65,169,225, 15,194,168, 0, 0, 1,203, /* 0x01a0 */ 116,101,120,116, 34, 10,120, 47, 49, 53,105, 32, 36,112, 99, 32,
/* 0x01b0 */ 66, 0, 3,203,130, 0, 0,185,229, 3, 0,170,224, 3, 3,170, /* 0x01b0 */ 45, 32, 55, 42, 52, 10,115,101,116, 32, 36,115,112, 32, 61, 32,
/* 0x01c0 */ 97, 0, 2,139,224, 3, 5,170,192, 3, 95,214,132, 0, 4, 43, /* 0x01c0 */ 42, 40,108,111,110,103, 32, 42, 41, 40, 36,115,112, 32, 43, 32,
/* 0x01d0 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58, /* 0x01d0 */ 48,120, 50, 51, 48, 41, 10,112,114,105,110,116, 32, 34,117,115,
/* 0x01e0 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151, /* 0x01e0 */ 101,114, 32,115,116, 97, 99,107, 34, 10,120, 47, 54, 52,120,103,
/* 0x01f0 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214, /* 0x01f0 */ 32, 36,115,112, 10,107,105,108,108, 10,113,117,105,116, 32, 49,
/* 0x0200 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84, /* 0x0200 */ 0, 0, 0, 0, 0, 0,128, 82, 40, 7,128, 82, 1, 0, 0,212,
/* 0x0210 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84, /* 0x0210 */ 255,127,191,169, 1, 0,128, 82,224, 3, 0,145,104, 7,128, 82,
/* 0x0220 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,197,251,255, 52, /* 0x0220 */ 1, 0, 0,212,240, 19, 0,145, 19, 2, 64,185,255, 67, 0,145,
/* 0x0230 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58, /* 0x0230 */ 130, 37,128, 82, 1,245,255, 48,224, 3, 19, 42, 8, 8,128, 82,
/* 0x0240 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49, /* 0x0240 */ 1, 0, 0,212,224, 3, 19, 42, 40, 7,128, 82, 1, 0, 0,212,
/* 0x0250 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56, /* 0x0250 */ 255, 7, 64,209, 2, 0,128, 82,129,241,255, 16, 0, 0,128,146,
/* 0x0260 */ 162,255,255, 84,233,255,255, 23,117,112,120, 0,217, 19, 1,209, /* 0x0260 */ 8, 7,128, 82, 1, 0, 0,212,243, 3, 0, 42,225, 3, 0,145,
/* 0x0270 */ 32, 3, 64,185, 57, 67, 32,203,224, 7, 0,249,192, 3, 63,214, /* 0x0270 */ 2, 0,130, 82,232, 7,128, 82, 1, 0, 0,212,224, 3, 19, 42,
/* 0x0280 */ 0, 0, 0, 0,102,105,108,101, 32,102,111,114,109, 97,116, 32, /* 0x0280 */ 40, 7,128, 82, 1, 0, 0,212,168, 21,128, 82, 1, 0, 0,212,
/* 0x0290 */ 101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97,114, 99, /* 0x0290 */ 255,127,191,169,225, 3, 0, 42,224, 3, 0,145, 49, 0, 0,148,
/* 0x02a0 */ 104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73, /* 0x02a0 */ 227, 3, 0,145,226, 67, 0,145,225,240,255, 48,224,240,255, 16,
/* 0x02b0 */ 100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x02b0 */ 224, 7,189,169,226, 15, 1,169,255, 19, 0,249, 2, 0,128,210,
/* 0x02c0 */ 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, /* 0x02c0 */ 225, 3, 0,145,168, 27,128, 82, 1, 0, 0,212, 0, 0, 0, 20,
/* 0x02d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, /* 0x02d0 */ 31, 32, 3,213,225, 11, 63,169, 66, 3,128,210,225,237,255,112,
/* 0x02e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70, /* 0x02e0 */ 64, 0,128, 82, 8, 8,128, 82, 1, 0, 0,212, 2, 0,128, 82,
/* 0x02f0 */ 105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70, /* 0x02f0 */ 33,238,255, 48, 0, 0,128, 18, 8, 7,128, 82, 1, 0, 0,212,
/* 0x0300 */ 108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, /* 0x0300 */ 243, 3, 0, 42,255, 7, 64,209, 2, 0,130,210,225, 3, 0,145,
/* 0x0310 */ 88, 32, 32, 32, 32, 32, 32, 48, 50, 50, 56, 32, 32, 48, 32, 32, /* 0x0310 */ 224, 3, 19, 42,232, 7,128, 82, 1, 0, 0,212,224, 0, 0, 52,
/* 0x0320 */ 48, 32, 32, 48, 52, 48, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, /* 0x0320 */ 226, 3, 0,170,225, 3, 0,145, 64, 0,128, 82, 8, 8,128, 82,
/* 0x0330 */ 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, /* 0x0330 */ 1, 0, 0,212,245,255,255, 23,255, 7, 64,145,224, 3, 16,170,
/* 0x0340 */ 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, /* 0x0340 */ 40, 7,128, 82, 1, 0, 0,212, 0, 0,128,210, 1, 0,128,210,
/* 0x0350 */ 32, 32, 48, 50, 54, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x0350 */ 136, 27,128, 82, 1, 0, 0,212, 96,245,255,180, 0, 0, 0, 20,
/* 0x0360 */ 78, 84, 69, 78, 84, 83, 10, 32, 32, 50, 32, 69, 76, 70, 77, 65, /* 0x0360 */ 254,127,191,169, 4, 0, 0,148,254, 7,193,168, 1, 0, 0, 57,
/* 0x0370 */ 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 49, 99, 32, 32, 48, 32, /* 0x0370 */ 192, 3, 95,214,162,153,153, 82,130,153,185,114, 34,124,162,155,
/* 0x0380 */ 32, 48, 32, 32, 48, 50, 54, 56, 32, 32, 50, 42, 42, 50, 32, 32, /* 0x0380 */ 67,252, 99,211, 98, 8, 3, 11, 33, 4, 2, 75,254, 7,191,169,
/* 0x0390 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, /* 0x0390 */ 99, 0, 0,180,225, 3, 3, 42,247,255,255,151,254, 7,193,168,
/* 0x03a0 */ 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x03a0 */ 33,192, 0, 17, 1, 20, 0, 56,192, 3, 95,214, 3, 1,128,210,
/* 0x03b0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, /* 0x03b0 */ 226, 3, 31,170,225, 3, 31,170, 96, 1,128, 82,200, 16,128, 82,
/* 0x03c0 */ 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, /* 0x03c0 */ 1, 0, 0,212,192, 3, 95,214,224, 99, 0,145, 82, 0, 0,148,
/* 0x03d0 */ 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x03d0 */ 81, 0, 0,148,246, 3, 0,170,255,131, 0,209, 1, 8,193,168,
/* 0x03e0 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, /* 0x03e0 */ 63, 24, 0,113, 96, 0, 0, 84,161,255,255, 53, 34, 0,160,210,
/* 0x03f0 */ 77, 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x03f0 */ 250, 3, 2,203,250, 3, 0,249, 25, 0, 0, 16, 32, 3, 64,185,
/* 0x0400 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0400 */ 224, 7, 0,249, 57, 67, 32,203, 0, 0, 0,148,244, 3, 30,170,
/* 0x0410 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, /* 0x0410 */ 1, 2,128, 82, 0, 0, 0, 16,232, 34,128, 82, 1, 0, 0,212,
/* 0x0420 */ 78, 89, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48, /* 0x0420 */ 0, 2,248, 54, 97, 0, 0, 52,225, 3, 31, 42,250,255,255, 23,
/* 0x0430 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x0430 */ 6, 0, 0,148,192, 1, 0, 0, 2, 64, 64, 0, 47,100,101,118,
/* 0x0440 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32, 77, /* 0x0440 */ 47,115,104,109, 0, 0, 0, 0,195, 71, 64,184,194, 71, 64,184,
/* 0x0450 */ 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0450 */ 225, 3, 30,170, 96, 12,128, 18, 8, 7,128, 82, 1, 0, 0,212,
/* 0x0460 */ 48, 48, 48, 52, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, /* 0x0460 */ 251, 3, 0, 42,128, 6, 64,185,253, 3, 0,145,160, 3, 0,203,
/* 0x0470 */ 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48, /* 0x0470 */ 0,236,124,146, 31, 0, 0,145,226, 3, 0,170,225, 15, 31,248,
/* 0x0480 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 52, 99, 32, /* 0x0480 */ 227, 3, 0,145,128, 66, 0,145,129, 10, 64,185,132, 50, 64, 57,
/* 0x0490 */ 103, 32, 32, 32, 32, 32, 70, 32, 69, 76, 70, 77, 65, 73, 78, 88, /* 0x0490 */ 36, 0, 0,148,232, 7, 65,248,250, 3, 0,249,242, 7, 0,249,
/* 0x04a0 */ 32, 48,100, 99, 32,117, 99,108, 95,110,114,118, 50, 98, 95,100, /* 0x04a0 */ 130, 6, 64,185,225, 3, 0,145,224, 3, 27, 42, 8, 8,128, 82,
/* 0x04b0 */ 101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, /* 0x04b0 */ 1, 0, 0,212,191, 3, 0,145, 5, 0,128,210,228, 3, 27, 42,
/* 0x04c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, /* 0x04c0 */ 35, 0,128, 82,162, 0,128, 82,129, 6, 64,185,225, 15, 0,249,
/* 0x04d0 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, /* 0x04d0 */ 0, 0,128,210,200, 27,128, 82, 1, 0, 0,212,224, 11, 0,249,
/* 0x04e0 */ 32,101,110,100, 95,100,101, 99,111,109,112,114,101,115,115, 10, /* 0x04e0 */ 252, 3, 0,170,224, 3, 27, 42, 40, 7,128, 82, 1, 0, 0,212,
/* 0x04f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x04f0 */ 253, 11, 64,185,129, 2, 64,185,158,115, 0,145,189, 3, 1, 75,
/* 0x0500 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, /* 0x0500 */ 253, 7, 0,249, 33,120, 30, 18, 60, 3, 1,139,192, 3, 31,214,
/* 0x0510 */ 32, 79, 95, 66, 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65, /* 0x0510 */ 192, 3, 95,214, 1,132, 64,248,225,255,255,181,192, 3, 95,214,
/* 0x0520 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, /* 0x0520 */ 1, 64, 33,139,225, 11,190,169,227,123, 1,169, 5, 0,128, 18,
/* 0x0530 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, /* 0x0530 */ 4, 0,176, 82, 26, 0, 0, 20,228,123, 65,169,225, 15,194,168,
/* 0x0540 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, /* 0x0540 */ 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,229, 3, 0,170,
/* 0x0550 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0550 */ 224, 3, 3,170, 97, 0, 2,139,224, 3, 5,170,192, 3, 95,214,
/* 0x0560 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0560 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x0570 */ 48, 48, 48, 48, 48, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, /* 0x0570 */ 132, 0, 4, 58,192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,
/* 0x0580 */ 95, 65, 66, 83, 51, 50, 32, 32, 32, 77, 70, 76, 71, 10, 48, 48, /* 0x0580 */ 248,255,255,151, 33, 0, 1, 58,246,255,255,151,163,255,255, 84,
/* 0x0590 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 99, 32, 82, /* 0x0590 */ 0, 2, 31,214, 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,
/* 0x05a0 */ 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50, 54, 32, /* 0x05a0 */ 162,255,255, 84,245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,
/* 0x05b0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48, /* 0x05b0 */ 163, 0, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,
/* 0x05c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10, 48, 48, 48, /* 0x05c0 */ 197,251,255, 52,231,255,255,151, 33, 0, 1, 58,229,255,255,151,
/* 0x05d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 56, 32, 82, 95, /* 0x05d0 */ 33, 0, 1, 58, 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,
/* 0x05e0 */ 65, 65, 82, 67, 72, 54, 52, 95, 65, 68, 82, 95, 80, 82, 69, 76, /* 0x05e0 */ 191, 0, 52, 49, 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113,
/* 0x05f0 */ 95, 76, 79, 50, 49, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, /* 0x05f0 */ 67, 20, 0, 56,162,255,255, 84,233,255,255, 23,117,112,120, 0,
/* 0x0600 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, /* 0x0600 */ 192, 3, 63,214, 0, 0, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x0610 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, /* 0x0610 */ 109, 97,116, 32,101,108,102, 54, 52, 45,108,105,116,116,108,101,
/* 0x0620 */ 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, /* 0x0620 */ 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,
/* 0x0630 */ 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, /* 0x0630 */ 115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32,
/* 0x0640 */ 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, /* 0x0640 */ 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86,
/* 0x0650 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 56, 32, 82, 95, /* 0x0650 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0660 */ 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32, /* 0x0660 */ 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0670 */ 79, 95, 66, 73, 78, 70, 79, 10 /* 0x0670 */ 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,
/* 0x0680 */ 110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70,
/* 0x0690 */ 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 49, 48, 32, 32,
/* 0x06a0 */ 48, 32, 32, 48, 32, 32, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32,
/* 0x06b0 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76,
/* 0x06c0 */ 70, 83, 73, 71, 83, 69, 71, 86, 32, 32, 32, 32, 48, 51, 55, 56,
/* 0x06d0 */ 32, 32, 48, 32, 32, 48, 32, 32, 48, 53, 48, 32, 32, 50, 42, 42,
/* 0x06e0 */ 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 50, 32,
/* 0x06f0 */ 69, 76, 70, 77, 65, 73, 78, 88, 50, 32, 32, 32, 32, 32, 48, 50,
/* 0x0700 */ 51, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 99, 56, 32, 32,
/* 0x0710 */ 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x0720 */ 32, 51, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32,
/* 0x0730 */ 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53,102, 99, 32, 32,
/* 0x0740 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x0750 */ 32, 52, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32,
/* 0x0760 */ 32, 48, 99, 32, 32, 48, 32, 32, 48, 32, 32, 48, 53,102, 99, 32,
/* 0x0770 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x0780 */ 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48,
/* 0x0790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x07a0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32,
/* 0x07b0 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48,
/* 0x07c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x07d0 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 50, 32, 48, 32,
/* 0x07e0 */ 69, 76, 70, 77, 65, 73, 78, 88, 50, 10, 48, 48, 48, 48, 48, 48,
/* 0x07f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x0800 */ 100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76,
/* 0x0810 */ 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0820 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x0830 */ 69, 76, 70, 83, 73, 71, 83, 69, 71, 86, 32, 48, 32, 69, 76, 70,
/* 0x0840 */ 83, 73, 71, 83, 69, 71, 86, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0850 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x0860 */ 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, 32, 69, 76, 70, 77,
/* 0x0870 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0880 */ 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85,
/* 0x0890 */ 78, 68, 42, 32, 48, 32, 77, 70, 76, 71, 10, 48, 48, 48, 48, 48,
/* 0x08a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32,103, 32, 32, 32,
/* 0x08b0 */ 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 95,
/* 0x08c0 */ 115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x08d0 */ 48, 48, 48, 49, 53, 56, 32,103, 32, 32, 32, 32, 32, 70, 32, 69,
/* 0x08e0 */ 76, 70, 77, 65, 73, 78, 88, 50, 32, 48,100, 99, 32,117, 99,108,
/* 0x08f0 */ 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,
/* 0x0900 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0910 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76,
/* 0x0920 */ 70, 77, 65, 73, 78, 89, 32, 48, 32,101,110,100, 95,100,101, 99,
/* 0x0930 */ 111,109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0940 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0950 */ 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70, 79,
/* 0x0960 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x0970 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73,
/* 0x0980 */ 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x0990 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x09a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x09b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82,
/* 0x09c0 */ 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32,
/* 0x09d0 */ 32, 77, 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x09e0 */ 48, 48, 48, 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52,
/* 0x09f0 */ 95, 65, 68, 82, 95, 80, 82, 69, 76, 95, 76, 79, 50, 49, 32, 32,
/* 0x0a00 */ 69, 76, 70, 77, 65, 73, 78, 88, 50, 43, 48,120, 48, 48, 48, 48,
/* 0x0a10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 52, 56, 10, 10, 82, 69,
/* 0x0a20 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x0a30 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 50, 93,
/* 0x0a40 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0a50 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0a60 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x0a70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 51, 48, 32, 82, 95, 65, 65,
/* 0x0a80 */ 82, 67, 72, 54, 52, 95, 65, 68, 82, 95, 80, 82, 69, 76, 95, 76,
/* 0x0a90 */ 79, 50, 49, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 45, 48,120,
/* 0x0aa0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52,
/* 0x0ab0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52,
/* 0x0ac0 */ 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76,
/* 0x0ad0 */ 50, 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48,
/* 0x0ae0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 10,
/* 0x0af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 99,
/* 0x0b00 */ 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 68, 82, 95, 80,
/* 0x0b10 */ 82, 69, 76, 95, 76, 79, 50, 49, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x0b20 */ 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82,
/* 0x0b30 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77,
/* 0x0b40 */ 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32,
/* 0x0b50 */ 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32,
/* 0x0b60 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10,
/* 0x0b70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
/* 0x0b80 */ 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50,
/* 0x0b90 */ 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
}; };
+1106 -1105
View File
File diff suppressed because it is too large Load Diff
+963 -834
View File
File diff suppressed because it is too large Load Diff
+2267 -2271
View File
File diff suppressed because it is too large Load Diff
+1770 -1770
View File
File diff suppressed because it is too large Load Diff
+1060 -1059
View File
File diff suppressed because it is too large Load Diff
+1053 -1052
View File
File diff suppressed because it is too large Load Diff
+39 -36
View File
@@ -1,4 +1,4 @@
#! /usr/bin/env python2 #! /usr/bin/env python3
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*- ## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
# #
# bin2h.py -- # bin2h.py --
@@ -45,7 +45,7 @@ class opts:
# ************************************************************************/ # ************************************************************************/
def w_header_c(w, ifile, ofile, n): def w_header_c(w, ifile, ofile, n):
w("/* %s\n created from %s, %d (0x%x) bytes\n" % (os.path.basename(ofile), os.path.basename(ifile), n, n)) w(("/* %s\n created from %s, %d (0x%x) bytes\n" % (os.path.basename(ofile), os.path.basename(ifile), n, n)).encode())
w("""\n\ w("""\n\
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -74,7 +74,7 @@ def w_header_c(w, ifile, ofile, n):
John F. Reiser John F. Reiser
<jreiser@users.sourceforge.net> <jreiser@users.sourceforge.net>
*/\n\n""") */\n\n""".encode())
# /*********************************************************************** # /***********************************************************************
@@ -87,11 +87,11 @@ class DataWriter:
self.pos = None self.pos = None
def w_bol(self, pos): def w_bol(self, pos):
self.w("/* 0x%04x */ " % (pos)) self.w(("/* 0x%04x */ " % (pos)).encode())
self.pos = pos self.pos = pos
def w_eol(self, fill=""): def w_eol(self, fill=""):
if self.pos is not None: if self.pos is not None:
self.w(fill.rstrip() + "\n") self.w((fill.rstrip() + "\n").encode())
class DataWriter_c(DataWriter): class DataWriter_c(DataWriter):
@@ -101,8 +101,8 @@ class DataWriter_c(DataWriter):
if i & 15 == 0: if i & 15 == 0:
self.w_eol() self.w_eol()
self.w_bol(i) self.w_bol(i)
w("%3d" % ord(data[i])) w(("%3d" % data[i]).encode())
if i != n - 1: w(",") if i != n - 1: w(",".encode())
self.w_eol() self.w_eol()
@@ -113,10 +113,10 @@ class DataWriter_gas(DataWriter):
if i & 15 == 0: if i & 15 == 0:
self.w_eol() self.w_eol()
self.w_bol(i) self.w_bol(i)
w(".byte ") w(".byte ".encode())
else: else:
w(",") w(",".encode())
w("%3d" % ord(data[i])) w(("%3d" % data[i]).encode())
self.w_eol() self.w_eol()
@@ -128,12 +128,12 @@ class _DataWriter_gas_u32(DataWriter):
if i & 15 == 0: if i & 15 == 0:
self.w_eol() self.w_eol()
self.w_bol(i) self.w_bol(i)
w(".int ") w(".int ".encode())
else: else:
w(",") w(",".encode())
v = struct.unpack(self.DECODE, data[i:i+4]) v = struct.unpack(self.DECODE, data[i:i+4])
assert len(v) == 1, v assert len(v) == 1, v
w("0x%08x" % (v[0] & 0xffffffffL)) w(("0x%08x" % (v[0] & 0xffffffff)).encode())
self.w_eol() self.w_eol()
class DataWriter_gas_be32(_DataWriter_gas_u32): class DataWriter_gas_be32(_DataWriter_gas_u32):
@@ -148,7 +148,7 @@ class DataWriter_nasm(DataWriter):
def w_eol(self, fill=""): def w_eol(self, fill=""):
if self.pos is not None: if self.pos is not None:
self.w(fill) self.w(fill)
self.w(" ; 0x%04x\n" % (self.pos)) self.w((" ; 0x%04x\n" % (self.pos)).encode())
def w_data(self, data): def w_data(self, data):
w, n = self.w, len(data) w, n = self.w, len(data)
@@ -156,10 +156,10 @@ class DataWriter_nasm(DataWriter):
if i & 15 == 0: if i & 15 == 0:
self.w_eol() self.w_eol()
self.w_bol(i) self.w_bol(i)
w("db ") w("db ".encode())
else: else:
w(",") w(",".encode())
w("%3d" % ord(data[i])) w(("%3d" % ord(data[i])).encode())
nn = ((n + 15) & ~15) - n nn = ((n + 15) & ~15) - n
self.w_eol(" " * 4 * nn) self.w_eol(" " * 4 * nn)
@@ -169,21 +169,21 @@ class DataWriter_nasm(DataWriter):
# ************************************************************************/ # ************************************************************************/
def w_checksum_c(w, s, data): def w_checksum_c(w, s, data):
w("#define %s_SIZE %d\n" % (s, len(data))) w(("#define %s_SIZE %d\n" % (s, len(data))).encode())
w("#define %s_ADLER32 0x%08x\n" % (s, 0xffffffffL & zlib.adler32(data))) w(("#define %s_ADLER32 0x%08x\n" % (s, 0xffffffff & zlib.adler32(data))).encode())
w("#define %s_CRC32 0x%08x\n" % (s, 0xffffffffL & zlib.crc32(data))) w(("#define %s_CRC32 0x%08x\n" % (s, 0xffffffff & zlib.crc32(data))).encode())
w("\n") w("\n".encode())
def write_stub(w, odata, method_index, methods): def write_stub(w, odata, method_index, methods):
method = methods[method_index] method = methods[method_index]
if len(methods) > 1: if len(methods) > 1:
if method_index == 0: if method_index == 0:
w("#if (%s == %d)\n\n" % (opts.mname, method)) w(("#if (%s == %d)\n\n" % (opts.mname, method)).encode())
elif method_index < len(methods) - 1: elif method_index < len(methods) - 1:
w("\n#elif (%s == %d)\n\n" % (opts.mname, method)) w(("\n#elif (%s == %d)\n\n" % (opts.mname, method)).encode())
else: else:
w("\n#else\n\n") w("\n#else\n\n".encode())
if opts.ident: if opts.ident:
if opts.mode == "c": if opts.mode == "c":
@@ -193,8 +193,8 @@ def write_stub(w, odata, method_index, methods):
#w("#if defined(__ELF__)\n") #w("#if defined(__ELF__)\n")
#w('__attribute__((__section__("upx_stubs")))\n') #w('__attribute__((__section__("upx_stubs")))\n')
#w("#endif\n") #w("#endif\n")
w("ATTRIBUTE_FOR_STUB(%s)\n" % (opts.ident)) w(("ATTRIBUTE_FOR_STUB(%s)\n" % (opts.ident)).encode())
w("unsigned char %s[%d] = {\n" % (opts.ident, len(odata))) w(("unsigned char %s[%d] = {\n" % (opts.ident, len(odata))).encode())
if opts.mode == "c": if opts.mode == "c":
DataWriter_c(w).w_data(odata) DataWriter_c(w).w_data(odata)
elif opts.mode == "gas": elif opts.mode == "gas":
@@ -209,11 +209,11 @@ def write_stub(w, odata, method_index, methods):
assert 0, ("invalid mode", opts.mode) assert 0, ("invalid mode", opts.mode)
if opts.ident: if opts.ident:
if opts.mode == "c": if opts.mode == "c":
w("};\n") w("};\n".encode())
if len(methods) > 1: if len(methods) > 1:
if method_index == len(methods) - 1: if method_index == len(methods) - 1:
w("\n#endif\n") w("\n#endif\n".encode())
# /*********************************************************************** # /***********************************************************************
@@ -293,10 +293,10 @@ def main(argv):
# check file size # check file size
st = os.stat(ifile) st = os.stat(ifile)
if 1 and st.st_size <= 0: if 1 and st.st_size <= 0:
print >> sys.stderr, "%s: ERROR: empty file" % (ifile) sys.stderr.write("%s: ERROR: empty file\n" % (ifile))
sys.exit(1) sys.exit(1)
if 1 and st.st_size > 128*1024: if 1 and st.st_size > 128*1024:
print >> sys.stderr, "%s: ERROR: file is too big (%d bytes)" % (ifile, st.st_size) sys.stderr.write("%s: ERROR: file is too big (%d bytes)\n" % (ifile, st.st_size))
sys.exit(1) sys.exit(1)
# read ifile # read ifile
@@ -321,19 +321,22 @@ def main(argv):
# compress stubs # compress stubs
# (process in reverse order so that incompressible do not get sorted first) # (process in reverse order so that incompressible do not get sorted first)
mdata, mdata_odata = [], {} mdata, mdata_odata = [], {}
assert len(opts.methods) >= 1 ### FIXME assert len(opts.methods) >= 1
r_methods = opts.methods[:] ### r_methods = opts.methods[:]
r_methods.reverse() ### r_methods.reverse()
r_methods = [];
for m in opts.methods:
r_methods.insert(0, m)
for method in r_methods: for method in r_methods:
method, odata = compress_stub(method, idata) method, odata = compress_stub(method, idata)
if mdata_odata.has_key(method): if method in mdata_odata:
assert mdata_odata[method] == odata assert mdata_odata[method] == odata
else: else:
mdata_odata[method] = odata mdata_odata[method] = odata
mdata.append(method) mdata.append(method)
assert len(mdata) >= 1 assert len(mdata) >= 1
mdata.reverse() mdata.reverse()
##print opts.methods, [(i, len(mdata_odata[i])) for i in mdata] ##print (opts.methods, [(i, len(mdata_odata[i])) for i in mdata])
# write ofile # write ofile
if opts.dry_run: if opts.dry_run:
@@ -349,7 +352,7 @@ def main(argv):
if opts.mode == "c": if opts.mode == "c":
if opts.verbose >= 0: if opts.verbose >= 0:
w_header_c(w, ifile, ofile, len(idata)) w_header_c(w, ifile, ofile, len(idata))
w("/* clang" + "-format" + " off */\n\n") w(("/* clang" + "-format" + " off */\n\n").encode())
for i in range(len(mdata)): for i in range(len(mdata)):
write_stub(w, mdata_odata[mdata[i]], i, mdata) write_stub(w, mdata_odata[mdata[i]], i, mdata)
if ofp: if ofp:
+8 -8
View File
@@ -1,4 +1,4 @@
#! /usr/bin/env python2 #! /usr/bin/env python3
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*- ## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
# #
# brandelf.py -- # brandelf.py --
@@ -54,32 +54,32 @@ def do_file(fn):
def write(s): def write(s):
if not opts.dry_run: if not opts.dry_run:
fp.write(s) fp.write(s.encode())
def brand_arm(s): def brand_arm(s):
if e_ident[4:7] != s: if e_ident[4:7] != s.encode():
raise Exception("%s is not %s" % (fn, opts.bfdname)) raise Exception("%s is not %s" % (fn, opts.bfdname))
write("\x61") # ELFOSABI_ARM write("\x61") # ELFOSABI_ARM
def brand_freebsd(s): def brand_freebsd(s):
if e_ident[4:7] != s: if e_ident[4:7] != s.encode():
raise Exception("%s is not %s" % (fn, opts.bfdname)) raise Exception("%s is not %s" % (fn, opts.bfdname))
write("\x09") write("\x09")
def brand_linux(s): def brand_linux(s):
if e_ident[4:7] != s: if e_ident[4:7] != s.encode():
raise Exception("%s is not %s" % (fn, opts.bfdname)) raise Exception("%s is not %s" % (fn, opts.bfdname))
##write("\x00Linux\x00\x00\x00") ##write("\x00Linux\x00\x00\x00")
write("\x00" * 9) write("\x00" * 9)
def brand_netbsd(s): def brand_netbsd(s):
if e_ident[4:7] != s: if e_ident[4:7] != s.encode():
raise Exception("%s is not %s" % (fn, opts.bfdname)) raise Exception("%s is not %s" % (fn, opts.bfdname))
write("\x02") write("\x02")
def brand_openbsd(s): def brand_openbsd(s):
if e_ident[4:7] != s: if e_ident[4:7] != s.encode():
raise Exception("%s is not %s" % (fn, opts.bfdname)) raise Exception("%s is not %s" % (fn, opts.bfdname))
write("\x0c") write("\x0c")
if opts.bfdname[:3] == "elf": if opts.bfdname[:3] == "elf":
if e_ident[:4] != "\x7f\x45\x4c\x46": if e_ident[:4] != "\x7f\x45\x4c\x46".encode():
raise Exception("%s is not %s" % (fn, "ELF")) raise Exception("%s is not %s" % (fn, "ELF"))
fp.seek(7, 0) fp.seek(7, 0)
if opts.bfdname == "elf32-bigarm" and opts.elfosabi == "arm": if opts.bfdname == "elf32-bigarm" and opts.elfosabi == "arm":
+8 -8
View File
@@ -1,4 +1,4 @@
#! /usr/bin/env python2 #! /usr/bin/env python3
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*- ## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
# #
# gpp_inc.py -- Generic PreProcessor: include # gpp_inc.py -- Generic PreProcessor: include
@@ -83,7 +83,7 @@ def parse_comment(state, l, comment):
def handle_inc_c(state, l, ofp): def handle_inc_c(state, l, ofp):
m = re.search(r"^\s*\#\s*include\s+([\"\<])(.+?)([\"\>])(.*)$", l) m = re.search(r"^\s*\#\s*include\s+([\"\<])(.+?)([\"\>])(.*)$", l.decode())
if not m: if not m:
return l return l
q1, inc, q2, comment = m.groups() q1, inc, q2, comment = m.groups()
@@ -93,7 +93,7 @@ def handle_inc_c(state, l, ofp):
elif q1 == '"' and q2 == '"': elif q1 == '"' and q2 == '"':
dirs = [state[1]] + opts.includes dirs = [state[1]] + opts.includes
else: else:
raise Exception("syntax error: include line " + l) raise Exception("syntax error: include line " + l.decode())
for dir in dirs: for dir in dirs:
fn = os.path.join(dir, inc) fn = os.path.join(dir, inc)
if os.path.isfile(fn): if os.path.isfile(fn):
@@ -130,13 +130,13 @@ def handle_file(ifn, ofp, parent_state=None):
ifp = open(ifn, "rb") ifp = open(ifn, "rb")
for l in ifp.readlines(): for l in ifp.readlines():
state[2] += 1 # line counter state[2] += 1 # line counter
l = l.rstrip("\n") l = l.rstrip("\n".encode())
if opts.mode == "c": if opts.mode == "c":
l = handle_inc_c(state, l, ofp) l = handle_inc_c(state, l, ofp)
elif opts.mode == "nasm": elif opts.mode == "nasm":
l = handle_inc_nasm(state, l, ofp) l = handle_inc_nasm(state, l, ofp)
if l is not None: if l is not None:
ofp.write(l + "\n") ofp.write(l + "\n".encode())
def main(argv): def main(argv):
@@ -179,12 +179,12 @@ def main(argv):
os.unlink(fn) os.unlink(fn)
if files_mmd: if files_mmd:
fp = open(fn, "wb") fp = open(fn, "wb")
fp.write("%s : \\\n" % opts.target_mmd) fp.write(("%s : \\\n" % opts.target_mmd).encode())
for i, f in enumerate(files_mmd): for i, f in enumerate(files_mmd):
if i < len(files_mmd) - 1: if i < len(files_mmd) - 1:
fp.write(" %s \\\n" % f) fp.write((" %s \\\n" % f).encode())
else: else:
fp.write(" %s\n" % f) fp.write((" %s\n" % f).encode())
fp.close() fp.close()
+13 -13
View File
@@ -1,4 +1,4 @@
#! /usr/bin/env python2 #! /usr/bin/env python3
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*- ## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
# #
# xstrip.py -- truncate ELF objects created by multiarch-objcopy-2.17 # xstrip.py -- truncate ELF objects created by multiarch-objcopy-2.17
@@ -46,7 +46,7 @@ def strip_with_dump(dump_fn, eh, idata):
new_len = 0 new_len = 0
lines = open(dump_fn, "rb").readlines() lines = open(dump_fn, "rb").readlines()
for l in lines: for l in lines:
l = re.sub(r"\s+", " ", l.strip()) l = re.sub(r"\s+", " ", l.strip().decode())
f = l.split(" ") f = l.split(" ")
if len(f) >= 8: if len(f) >= 8:
if f[7].startswith("CONTENTS"): if f[7].startswith("CONTENTS"):
@@ -54,9 +54,9 @@ def strip_with_dump(dump_fn, eh, idata):
sh_size = int("0x" + f[2], 16) sh_size = int("0x" + f[2], 16)
if sh_offset + sh_size > new_len: if sh_offset + sh_size > new_len:
new_len = sh_offset + sh_size new_len = sh_offset + sh_size
##print sh_offset, sh_size, f ##print (sh_offset, sh_size, f)
if new_len > len(eh): if new_len > len(eh):
##print dump_fn, new_len ##print (dump_fn, new_len)
return eh, idata[:new_len-len(eh)] return eh, idata[:new_len-len(eh)]
return eh, idata return eh, idata
@@ -67,7 +67,7 @@ def strip_with_dump(dump_fn, eh, idata):
def check_dump(dump_fn): def check_dump(dump_fn):
lines = open(dump_fn, "rb").readlines() lines = open(dump_fn, "rb").readlines()
lines = map(lambda l: re.sub(r"\s+", " ", l.strip()).strip(), lines) lines = map(lambda l: re.sub(r"\s+", " ", l.strip().decode()).strip(), lines)
lines = filter(None, lines) lines = filter(None, lines)
d = "\n".join(lines) d = "\n".join(lines)
psections = d.find("Sections:\n") psections = d.find("Sections:\n")
@@ -88,10 +88,10 @@ def check_dump(dump_fn):
assert int(f[0], 10) == len(sections) assert int(f[0], 10) == len(sections)
e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections) e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections)
sections.append(e) sections.append(e)
assert not section_names.has_key(e[0]), e assert not e[0] in section_names, e
assert not e[0].endswith(":"), ("bad section name", e) assert not e[0].endswith(":"), ("bad section name", e)
section_names[e[0]] = e section_names[e[0]] = e
##print sections ##print (sections)
# preprocessSymbols # preprocessSymbols
symbols = [] symbols = []
section = None section = None
@@ -140,25 +140,25 @@ def do_file(fn):
fp = open(fn, "r+b") fp = open(fn, "r+b")
fp.seek(0, 0) fp.seek(0, 0)
idata = fp.read() idata = fp.read()
if idata[:4] != "\x7f\x45\x4c\x46": if idata[:4] != "\x7f\x45\x4c\x46".encode():
raise Exception("%s is not %s" % (fn, "ELF")) raise Exception("%s is not %s" % (fn, "ELF"))
if idata[4:7] == "\x01\x01\x01": if idata[4:7] == "\x01\x01\x01".encode():
# ELF32 LE # ELF32 LE
eh, idata = idata[:52], idata[52:] eh, idata = idata[:52], idata[52:]
e_shnum, e_shstrndx = struct.unpack("<HH", eh[48:52]) e_shnum, e_shstrndx = struct.unpack("<HH", eh[48:52])
assert e_shstrndx + 3 == e_shnum assert e_shstrndx + 3 == e_shnum
##eh = eh[:48] + struct.pack("<HH", e_shnum - 3, e_shstrndx) ##eh = eh[:48] + struct.pack("<HH", e_shnum - 3, e_shstrndx)
elif idata[4:7] == "\x01\x02\x01": elif idata[4:7] == "\x01\x02\x01".encode():
# ELF32 BE # ELF32 BE
eh, idata = idata[:52], idata[52:] eh, idata = idata[:52], idata[52:]
e_shnum, e_shstrndx = struct.unpack(">HH", eh[48:52]) e_shnum, e_shstrndx = struct.unpack(">HH", eh[48:52])
assert e_shstrndx + 3 == e_shnum assert e_shstrndx + 3 == e_shnum
elif idata[4:7] == "\x02\x01\x01": elif idata[4:7] == "\x02\x01\x01".encode():
# ELF64 LE # ELF64 LE
eh, idata = idata[:64], idata[64:] eh, idata = idata[:64], idata[64:]
e_shnum, e_shstrndx = struct.unpack("<HH", eh[60:64]) e_shnum, e_shstrndx = struct.unpack("<HH", eh[60:64])
assert e_shstrndx + 3 == e_shnum assert e_shstrndx + 3 == e_shnum
elif idata[4:7] == "\x02\x02\x01": elif idata[4:7] == "\x02\x02\x01".encode():
# ELF64 BE # ELF64 BE
eh, idata = idata[:64], idata[64:] eh, idata = idata[:64], idata[64:]
e_shnum, e_shstrndx = struct.unpack(">HH", eh[60:64]) e_shnum, e_shstrndx = struct.unpack(">HH", eh[60:64])
@@ -167,7 +167,7 @@ def do_file(fn):
raise Exception("%s is not %s" % (fn, "ELF")) raise Exception("%s is not %s" % (fn, "ELF"))
odata = None odata = None
pos = idata.find("\0.symtab\0.strtab\0.shstrtab\0") pos = idata.find("\0.symtab\0.strtab\0.shstrtab\0".encode())
if opts.with_dump: if opts.with_dump:
eh, odata = strip_with_dump(opts.with_dump, eh, idata) eh, odata = strip_with_dump(opts.with_dump, eh, idata)
# Other compilers can intermix the contents of .rela sections # Other compilers can intermix the contents of .rela sections
+212 -1
View File
@@ -94,7 +94,212 @@ _start: .globl _start
push %rsp; pop %rdi // argv push %rsp; pop %rdi // argv
push %rcx // argc push %rcx // argc
push %rdx // param for atexit() push %rdx // param for atexit()
lea cancel_dummy(%rip),%r15
section ELFSIGSEGV
// install SIGSEGV handler for debugging
SIGSEGV= 11
SA_SIGINFO= 4 // /usr/include/bits/sigaction.h
SA_RESTORER= 0x04000000
__NR_rt_sigaction= 13 // /usr/include/asm/unistd_64.h
push %rdi // save reg
sub %edx,%edx // arg3= 0 ==> do not save old sigaction
push %rdx // .sa_mask: 64 bits (8 bytes) of flags for signals
lea __restore_rt(%rip),%rax; push %rax // .sa_restorer
push $SA_RESTORER | SA_SIGINFO // .sa_flags
lea sigsegv_sigaction(%rip),%rax; push %rax // .sa_sigaction
lea cancel_sigsegv(%rip),%r15
push %rsp; pop %rsi // arg2= &new struct sigaction
push $SIGSEGV; pop %rdi // arg1= signum
push $8; pop %r10 // sys4= sizeof(__sigset_t) ==> 64 bits
push $__NR_rt_sigaction; pop %rax; syscall
add $(3 + 1) * NBPW,%rsp // toss struct sigaction
pop %rdi // restore reg
#if 0 //{ TEST ONLY
movl $0x18181818,%r8d
movl $0x19191919,%r9d
movl $0x1a1a1a1a,%r10d
movl $0x1b1b1b1b,%r11d
movl $0x1c1c1c1c,%r12d
movl $0x1d1d1d1d,%r13d
movl $0x1e1e1e1e,%r14d
movl $0x1f1f1f1f,%r15d
movl $0xaaaaaaaa,%eax
movl $0xbbbbbbbb,%ebx
movl $0xcccccccc,%ecx
movl $0xdddddddd,%edx
movl $0x55555555,%ebp
movl $0x66666666,%esi
movl $0x77777777,%edi
movl (%rdx),%edx // force SIGSEGV
#endif // TEST_ONLY}
jmp end_sigsegv
__NR_rt_sigreturn= 15
__restore_rt:
endbr64
mov $__NR_rt_sigreturn,%eax
syscall
sigsegv_sigaction:
endbr64
push %rdx // save &ucontext_t
// print /proc/self/maps of child (same as parent: the beauty of fork())
mov $end_announce_sigaction - announce_sigaction,%edx // arg3 len
lea announce_sigaction(%rip),%rsi // arg2 buf
push $2; pop %rdi // arg1 fd_stderr
push $__NR_write; pop %rax; syscall // ignore error on write()
xor %esi,%esi // arg2 O_RDONLY
lea proc_self_maps(%rip),%arg1
push $__NR_open; pop %rax; syscall
mov %rax,%r12 // fd_maps
BUFLEN= 4096
mov $BUFLEN,%ebx; sub %rbx,%rsp // allocate buffer
loop_maps:
mov %ebx,%edx // arg3 buflen
push %rsp; pop %rsi // arg2 buffer
mov %r12,%rdi // arg1 fd_maps
xor %eax,%eax; syscall // __NR_read
test %eax,%eax; jle done_maps // ignore error on read()
mov %eax,%edx // arg3 buflen
push %rsp; pop %rsi // arg2 buf
push $2; pop %rdi // arg1 fd_stderr
push $__NR_write; pop %rax; syscall // ignore error on write()
jmp loop_maps
done_maps:
mov %r12,%rdi //arg1 fd_maps
add %rbx,%rsp // discard buffer
push $__NR_close; pop %rax; syscall
// end printing of /proc/self/maps
pop %rdx // restore &ucontext_t
__NR_fork= 57
push $__NR_fork; pop %rax; call sys_check
test %eax,%eax; je child
parent:
jmp parent // spin; paused by gdb
proc_self_cmdline:
.asciz "/proc/self/cmdline"
announce_sigaction:
.asciz "\n\nSIGSEGV address space:\n"
end_announce_sigaction:
proc_self_maps:
.asciz "/proc/self/maps"
minus_q:
.asciz "-q"
path_gdb:
.asciz "/usr/bin/gdb"
commands_gdb:
.ascii "set prompt\n" // null string prompt
.ascii "info inferiors\n"
// ucontext_t, mcontext_t, gregset_t, gret_t, REG_xxx: <sys/ucontext.h>
// stack_t <bits/types/stack_t.h>
.ascii "print \"r8 - r15\"\n"
.ascii "x/8xg $rdx + 5*8\n"
.ascii "print \"rdi, rsi, rbp, rbx\"\n"
.ascii "x/4xg\n"
.ascii "print \"rdx, rax, rcx, rsp\"\n"
.ascii "x/4xg\n"
.ascii "print \"rip, efl\"\n"
.ascii "x/2xg\n"
.ascii "set $pc = *(long *)($rdx + 168)\n"
.ascii "print \"faulting instr\"\n"
.ascii "x/i $pc\n"
.ascii "print \"fault context\"\n"
.ascii "x/16i $pc - 0x20\n"
.ascii "print \"user stack\"\n"
.ascii "x/64xg *(long *)($rdx + 5*8 + 15*8)\n"
.ascii "kill\n"
.ascii "quit 1"
.byte 0
commands_gdb_end:
child:
PATH_MAX= 4096
sub $PATH_MAX,%rsp
lea proc_self_cmdline(%rip),%arg1
O_RDONLY= 0
push $O_RDONLY; pop %arg2
push $__NR_open; pop %rax; call sys_check
push %rax; pop %arg1 // fd
push %rsp; pop %arg2 // buffer
push $PATH_MAX; pop %arg3
__NR_read= 0
push $__NR_read; pop %rax; call sys_check
push $__NR_close; pop %rax; call sys_check
__NR_getppid= 110
push $__NR_getppid; pop %rax; syscall
push %rax; pop %rsi
xor %eax,%eax; push %rax; push %rax // decimal(pid) fits in 16 bytes
push %rsp; pop %rdi; call unsimal
// argv
push %rsp; pop %rsi // fence post: &pid.unsimal
push $0 // argv[4]
push %rsi // arg3 pid
add $16,%rsi; push %rsi // arg2 exename
lea minus_q(%rip),%rax; push %rax // arg1 "-q"
add $(path_gdb - minus_q),%rax; push %rax // arg[0] "/usr/bin/gdb"
#if 1 //{ pipe input to gdb
xor %edi,%edi; push $__NR_close; pop %rax; syscall
push %rax; push %rsp; pop %rdi // &fd_pipe[2]; 4 bytes each
__NR_pipe= 22
push $__NR_pipe; pop %rax; call sys_check
pop %rdi; shr $32,%rdi // arg1 write side of pipe
push $commands_gdb_end - commands_gdb; pop %arg3
lea commands_gdb(%rip),%arg2
__NR_write= 1
push $__NR_write; pop %rax; call sys_check
push $__NR_close; pop %rax; syscall
#endif //}
push $0; pop %arg3 // _environ BUG
push %rsp; pop %arg2 // argv
movq (%arg2),%arg1 // "/usr/bin/gdb"
__NR_execve= 59
push $__NR_execve; pop %rax; call sys_check
hlt
unsimal: // (dst, value)
push $10; pop %rcx // radix
mov %esi,%eax // value
call 0f
movb $0,(%rdi) // terminator
ret
0:
xor %edx,%edx; div %ecx; push %rdx // eax= quo(%edx:%eax / %ecx); edx= rem
// 'div' undefines all flags!
test %eax,%eax; je 1f; call 0b
1:
pop %rax; add $'0',%eax
stosb
ret
// Uninstall SIGSEGV handler
cancel_sigsegv:
endbr64
push $8; pop %sys4 // sys_arg4 minimal byte count
xor %edx,%edx // no old
xor %esi,%esi // no new
push $SIGSEGV; pop %rdi
push $__NR_rt_sigaction; pop %eax; syscall
ret
end_sigsegv:
section ELFMAINX2
#define old_sp %rbp #define old_sp %rbp
F_FRAME= 7*NBPW F_FRAME= 7*NBPW
F_ENTR= 6*NBPW; F_PMASK= F_ENTR F_ENTR= 6*NBPW; F_PMASK= F_ENTR
@@ -105,8 +310,9 @@ F_ELFA= 2*NBPW
F_LENX= 1*NBPW F_LENX= 1*NBPW
F_ADRX= 0*NBPW F_ADRX= 0*NBPW
D_FOLD= 1*NBPW // .data space at start of unfold D_FOLD= 2*NBPW // .data space at start of unfold
D_PMASK= 0*NBPW D_PMASK= 0*NBPW
D_XSIGSEGV= 1*NBPW
// find auxv // find auxv
xor %eax,%eax // 0 xor %eax,%eax // 0
@@ -264,6 +470,7 @@ eof_n2b:
// Write de-compressed 'fold' to file // Write de-compressed 'fold' to file
mov F_PMASK(old_sp),%rax; mov %rax,/*D_PMASK*/(%rsp) // propagate PAGE_MASK mov F_PMASK(old_sp),%rax; mov %rax,/*D_PMASK*/(%rsp) // propagate PAGE_MASK
mov %r15,D_XSIGSEGV(%rsp) // propagate cancel_sigsegv
mov F_LENU(old_sp),%arg3 // LENU mov F_LENU(old_sp),%arg3 // LENU
sub $INSURANCE,%arg3 // memcheck limit sub $INSURANCE,%arg3 // memcheck limit
push %rsp; pop %arg2 // buffer push %rsp; pop %arg2 // buffer
@@ -295,6 +502,10 @@ eof_n2b:
add $D_FOLD,%rax // beyond .data add $D_FOLD,%rax // beyond .data
jmp *%rax // goto unfolded stub jmp *%rax // goto unfolded stub
cancel_dummy:
endbr64
ret
sys_check: sys_check:
push %rax // save __NR_ for debug push %rax // save __NR_ for debug
syscall syscall
+8 -4
View File
@@ -81,6 +81,7 @@ is_ptinterp= (1<<0)
.balign 8 .balign 8
PAGE_MASK: .quad -1<<12 // default PAGE_MASK: .quad -1<<12 // default
cancel_sigsegv: .quad 0 // subroutine that cancels sigaction(SIGSEGV,)
// IN: [ADRX,+LENX): compressed data; [ADRU,+LENU): expanded fold (w/ upx_main2) // IN: [ADRX,+LENX): compressed data; [ADRU,+LENU): expanded fold (w/ upx_main2)
// %rsp= %rbp= &F_ADRX; %r13= O_BINFO | is_ptinterp | unmap_all_pages // %rsp= %rbp= &F_ADRX; %r13= O_BINFO | is_ptinterp | unmap_all_pages
@@ -174,9 +175,12 @@ no_env_pse:
*/ */
// rsp/ {OVERHEAD},ADRU,LENU,rdx,%entry, argc,argv,0,envp,0,auxv,0,strings // rsp/ {OVERHEAD},ADRU,LENU,rdx,%entry, argc,argv,0,envp,0,auxv,0,strings
addq $OVERHEAD,%rsp # Elf64_Ehdr temporary space addq $OVERHEAD,%rsp # Elf64_Ehdr temporary space
mov %ebp,%ebx # fd #define r_fd ebx
mov %ebp,%r_fd
movq %rax,3*NBPW(%rsp) # entry movq %rax,3*NBPW(%rsp) # entry
call *cancel_sigsegv(%rip)
sz_Ehdr= 8*NBPW sz_Ehdr= 8*NBPW
e_type= 16 e_type= 16
ET_EXEC= 2 ET_EXEC= 2
@@ -190,16 +194,16 @@ p_memsz= 5*NBPW
movq %r13,%arg1; call munmap # discard C_TEXT compressed data movq %r13,%arg1; call munmap # discard C_TEXT compressed data
// Map 1 page of /proc/self/exe so that the symlink does not disappear. // Map 1 page of /proc/self/exe so that the symlink does not disappear.
test %ebx,%ebx; js no_pse_map test %r_fd,%r_fd; js no_pse_map
subq %arg6,%arg6 # 0 offset subq %arg6,%arg6 # 0 offset
mov %ebx,%arg5l # fd mov %r_fd,%arg5l # fd
push $MAP_PRIVATE; pop %arg4 push $MAP_PRIVATE; pop %arg4
push $PROT_READ; pop %arg3 push $PROT_READ; pop %arg3
mov $1<<12,%arg2l mov $1<<12,%arg2l
subl %arg1l,%arg1l # 0 subl %arg1l,%arg1l # 0
call mmap call mmap
mov %ebx,%edi # fd mov %r_fd,%edi # fd
call close call close
.macro NOTRACK .macro NOTRACK
+18 -3
View File
@@ -102,7 +102,7 @@ memcpy: .globl memcpy // void *memcpy(void *dst, void const *src, size_t n)
/* 64-bit mode only! */ /* 64-bit mode only! */
__NR_read= 0 __NR_read= 0
__NR_write= 1 __NR_write= 1
//__NR_open= 2 __NR_open= 2
__NR_openat= 257 __NR_openat= 257
FD_CWD= -100 FD_CWD= -100
__NR_close= 3 __NR_close= 3
@@ -190,8 +190,6 @@ exit: .globl exit
push $ __NR_exit; 5: jmp 5f push $ __NR_exit; 5: jmp 5f
ftruncate: .globl ftruncate ftruncate: .globl ftruncate
push $__NR_ftruncate; 5: jmp 5f push $__NR_ftruncate; 5: jmp 5f
memfd_create: .globl memfd_create
push $__NR_memfd_create; 5: jmp 5f
close: .globl close close: .globl close
push $ __NR_close; 5: jmp 5f push $ __NR_close; 5: jmp 5f
openat: .globl openat openat: .globl openat
@@ -202,4 +200,21 @@ write: .globl write
read: .globl read read: .globl read
push $ __NR_read; 5: jmp sysgo push $ __NR_read; 5: jmp sysgo
memfd_create: .globl memfd_create
0:
movl $__NR_memfd_create,%eax; syscall
test %eax,%eax; js 1f; ret // success
1:
test %arg2l,%arg2l; jz no_memfd // memfd_create failed twice
xor %arg2l,%arg2l; jmp 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm
O_RDWR= 2
O_DIRECTORY= 0200000 // 0x010000
O_TMPFILE= 020000000 // 0x400000
call 0f; .int 0700, O_RDWR|O_DIRECTORY|O_TMPFILE; .asciz "/dev/shm"; 0: pop %rsi
lodsl; xchg %eax,%arg3l
lodsl; push %rsi; xchg %eax,%arg2l
pop %arg1
push $__NR_open; jmp sysgo
// section SO_MAIN inserted here // section SO_MAIN inserted here
+76 -7
View File
@@ -83,10 +83,18 @@ section PEISDLL1
jnz reloc_end_jmp jnz reloc_end_jmp
section PEMAIN01 section PEMAIN01
//; remember to keep stack aligned! //; remember to keep stack aligned!
push rbx // Modified entry point to break UPX detection patterns
push rsi // Use register manipulation instead of generic NOP
push rdi mov rax, rsp
add rax, 8
xchg rax, [rsp]
push rbp push rbp
nop
push rdi
xor rax, rax
push rsi
add rbx, 0
push rbx
lea rsi, [rip + start_of_compressed] lea rsi, [rip + start_of_compressed]
lea rdi, [rsi + start_of_uncompressed] lea rdi, [rsi + start_of_uncompressed]
@@ -227,6 +235,47 @@ section PETLSHAK2 // restore the TLS index
pop rax pop rax
mov [rdi], eax mov [rdi], eax
section PEDYNIMPORT_RESOLVER
; Save registers (rcx, rdx, r8, r9 are volatile, rbp, rbx, rsi, rdi must be preserved)
push rbp
push rbx
push rsi
push rdi
; Allocate shadow space (32 bytes) and stack space for arguments if needed
sub rsp, 0x20
; Get handle to kernel32.dll using symbolically linked LoadLibraryA
lea rcx, [rip + kernel32_string] ; Arg1: "kernel32.dll" string
call [rip + LoadLibraryA] ; Call LoadLibraryA
mov qword ptr [rip + kernel32_handle], rax ; Save kernel32.dll handle
; Get address of GetProcAddress
mov rdi, rax ; rdi = kernel32.dll handle (non-volatile, can use after call)
lea rdx, [rip + GetProcAddress_string] ; Arg2: "GetProcAddress" string
mov rcx, rdi ; Arg1: kernel32.dll handle
call [rip + GetProcAddress] ; Call GetProcAddress (symbolically linked)
mov qword ptr [rip + GetProcAddress_ptr], rax ; Save GetProcAddress address
; Resolve VirtualProtect
lea rdx, [rip + VirtualProtect_string] ; Arg2: "VirtualProtect" string
mov rcx, rdi ; Arg1: kernel32.dll handle
call qword ptr [rip + GetProcAddress_ptr] ; Call GetProcAddress dynamically
mov qword ptr [rip + VirtualProtect_ptr], rax ; Save VirtualProtect address
; Resolve ExitProcess
lea rdx, [rip + ExitProcess_string] ; Arg2: "ExitProcess" string
mov rcx, rdi ; Arg1: kernel32.dll handle
call qword ptr [rip + GetProcAddress_ptr] ; Call GetProcAddress dynamically
mov qword ptr [rip + ExitProcess_ptr], rax ; Save ExitProcess address
add rsp, 0x20 ; Deallocate shadow space
; Restore registers
pop rdi
pop rsi
pop rbx
pop rbp
// ============= // =============
// ============= FILTERS // ============= FILTERS
// ============= // =============
@@ -294,7 +343,7 @@ section PEIMPOR2
first_imp: first_imp:
mov rcx, rbp mov rcx, rbp
call [rip + GetProcAddress] call qword ptr [rip + GetProcAddress_ptr]
#if 1 #if 1
;// FIXME: is this error handling really needed? ;// FIXME: is this error handling really needed?
@@ -317,7 +366,7 @@ section PEIERDLL
section PEIEREXE section PEIEREXE
// rcx contains garbage -> garbage return code // rcx contains garbage -> garbage return code
jmp [rip + ExitProcess] jmp qword ptr [rip + ExitProcess_ptr]
section PEIMDONE section PEIMDONE
imports_done: imports_done:
add rsp, 0x28 add rsp, 0x28
@@ -392,7 +441,7 @@ relhi0:
// ============= // =============
section PEDEPHAK section PEDEPHAK
mov rbp, [rip + VirtualProtect] mov rbp, qword ptr [rip + VirtualProtect_ptr]
lea rdi, [rsi + vp_base] lea rdi, [rsi + vp_base]
mov ebx, IMM32(vp_size) // 0x1000 or 0x2000 mov ebx, IMM32(vp_size) // 0x1000 or 0x2000
@@ -512,4 +561,24 @@ done_callbacks:
#include "include/header.S" #include "include/header.S"
/* vim:set ts=8 sw=8 et: */
.global LoadLibraryA_ptr
.global VirtualProtect_ptr
.global ExitProcess_ptr
.global GetProcAddress_ptr
.global kernel32_handle
.global kernel32_string
.global LoadLibraryA_string
.global VirtualProtect_string
.global ExitProcess_string
section PEDATA
LoadLibraryA_ptr: .dq 0 ; Quad word for 64-bit addresses
VirtualProtect_ptr: .dq 0
ExitProcess_ptr: .dq 0
GetProcAddress_ptr: .dq 0
kernel32_handle: .dq 0
kernel32_string: .asciz "kernel32.dll"
LoadLibraryA_string: .asciz "LoadLibraryA"
VirtualProtect_string: .asciz "VirtualProtect"
ExitProcess_string: .asciz "ExitProcess"
+1
View File
@@ -0,0 +1 @@
../src/arch
+2 -2
View File
@@ -198,7 +198,7 @@ ifneq ($(wildcard $(WATCOM)/binl/wcl),)
# step 3: clean asm # step 3: clean asm
lzma_d_c%.S : tmp/lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST) lzma_d_c%.S : tmp/lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
$(PYTHON) cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@ $(PYTHON2) cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
# step 2: compile, strip and disasm # step 2: compile, strip and disasm
tmp/lzma_d_c%.i : tmp/lzma_d_c%.S $(MAKEFILE_LIST) tmp/lzma_d_c%.i : tmp/lzma_d_c%.S $(MAKEFILE_LIST)
@@ -233,7 +233,7 @@ ifneq ($(wildcard $(WATCOM)/binl/wcl),)
$(call tc,wdis) tmp/$T_wc.obj | $(RTRIM) > tmp/$T_wc.obj.disasm $(call tc,wdis) tmp/$T_wc.obj | $(RTRIM) > tmp/$T_wc.obj.disasm
endif endif
# convert # convert
$(PYTHON) wdis2gas.py tmp/$T_wc.obj.disasm $@ $(PYTHON2) wdis2gas.py tmp/$T_wc.obj.disasm $@
.PRECIOUS: tmp/lzma_d_c%.i tmp/lzma_d_c%.S .PRECIOUS: tmp/lzma_d_c%.i tmp/lzma_d_c%.S
+250 -28
View File
@@ -66,6 +66,8 @@ MAP_ANONYMOUS= 0x20
MAP_FIXED= 0x10 MAP_FIXED= 0x10
MAP_PRIVATE= 0x02 MAP_PRIVATE= 0x02
FD_CWD= -1 // AT_CWD= -100
FD_stdin= 0
FD_stderr= 2 FD_stderr= 2
O_RDONLY= 0 O_RDONLY= 0
@@ -81,13 +83,15 @@ PAGE_SIZE = ( 1<<PAGE_SHIFT)
__NR_SYSCALL_BASE = 0 __NR_SYSCALL_BASE = 0
__NR_exit= 1 + __NR_SYSCALL_BASE
__NR_open= 5 + __NR_SYSCALL_BASE
__NR_close= 6 + __NR_SYSCALL_BASE __NR_close= 6 + __NR_SYSCALL_BASE
__NR_execve= 11 + __NR_SYSCALL_BASE
__NR_exit= 1 + __NR_SYSCALL_BASE
__NR_fdatasync=148 + __NR_SYSCALL_BASE __NR_fdatasync=148 + __NR_SYSCALL_BASE
__NR_fork= 2 + __NR_SYSCALL_BASE
__NR_fsync= 118 + __NR_SYSCALL_BASE __NR_fsync= 118 + __NR_SYSCALL_BASE
__NR_ftruncate=93 + __NR_SYSCALL_BASE __NR_ftruncate=93 + __NR_SYSCALL_BASE
__NR_getpid= 20 + __NR_SYSCALL_BASE __NR_getpid= 20 + __NR_SYSCALL_BASE
__NR_getppid= 64 + __NR_SYSCALL_BASE
__NR_lseek= 19 + __NR_SYSCALL_BASE __NR_lseek= 19 + __NR_SYSCALL_BASE
__NR_memfd_create= 385 + __NR_SYSCALL_BASE __NR_memfd_create= 385 + __NR_SYSCALL_BASE
__NR_mkdir= 39 + __NR_SYSCALL_BASE __NR_mkdir= 39 + __NR_SYSCALL_BASE
@@ -95,12 +99,16 @@ __NR_mmap2= 192 + __NR_SYSCALL_BASE
__NR_mprotect=125 + __NR_SYSCALL_BASE __NR_mprotect=125 + __NR_SYSCALL_BASE
__NR_msync= 144 + __NR_SYSCALL_BASE // 0x90 __NR_msync= 144 + __NR_SYSCALL_BASE // 0x90
__NR_open= 5 + __NR_SYSCALL_BASE __NR_open= 5 + __NR_SYSCALL_BASE
__NR_openat= 322 + __NR_SYSCALL_BASE
__NR_pipe= 42 + __NR_SYSCALL_BASE
__NR_read= 3 + __NR_SYSCALL_BASE __NR_read= 3 + __NR_SYSCALL_BASE
__NR_sigaction=67 + __NR_SYSCALL_BASE
__NR_stat= 106 + __NR_SYSCALL_BASE __NR_stat= 106 + __NR_SYSCALL_BASE
__NR_uname= 122 + __NR_SYSCALL_BASE __NR_uname= 122 + __NR_SYSCALL_BASE
__NR_unlink= 10 + __NR_SYSCALL_BASE __NR_unlink= 10 + __NR_SYSCALL_BASE
__NR_write= 4 + __NR_SYSCALL_BASE __NR_write= 4 + __NR_SYSCALL_BASE
__ARM_NR_BASE= 0xf0000 + __NR_SYSCALL_BASE __ARM_NR_BASE= 0xf0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush= 2 + __ARM_NR_BASE __ARM_NR_cacheflush= 2 + __ARM_NR_BASE
@@ -118,21 +126,24 @@ __ARM_NR_cacheflush= 2 + __ARM_NR_BASE
section ELFMAINX section ELFMAINX
F_ADRX= 0*NBPW F_ADRX= 0*NBPW
F_obinfo= F_ADRX // unmap_all_pages in lo bits
F_LENX= 1*NBPW F_LENX= 1*NBPW
F_ELFA= 2*NBPW F_ELFA= 2*NBPW
F_ADRU= 3*NBPW F_SEGV= 3*NBPW
F_LENU= 4*NBPW F_ADRU= 4*NBPW
F_R0= 5*NBPW F_LENU= 5*NBPW
F_R1= 6*NBPW F_R0= 6*NBPW
F_ENTR= 7*NBPW F_R1= 7*NBPW
F_QFLG= F_ENTR F_ENTR= 8*NBPW
F_SIZE= 8*NBPW F_qflg= F_ENTR // QNX mmap flags
F_SIZE= 9*NBPW
// (read-only) .data space at start of unfolded code // (read-only) .data space at start of unfolded code
D_PMASK= 0*NBPW D_PMASK= 0*NBPW
D_FNAME= 1*NBPW D_QFLG= 1*NBPW
D_QFLG= 2*NBPW D_FNAME= 2*NBPW
D_FOLD= 3*NBPW // start of code D_XSEGV= 3*NBPW
D_FOLD= 4*NBPW // start of code
r_pack2 .req r9 r_pack2 .req r9
r_pmask .req r8 r_pmask .req r8
@@ -142,9 +153,58 @@ sz_pack2= . - NBPW
mflg: mflg:
.word MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux .word MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux
_start: .globl _start _start: .globl _start
//// nop; bkpt // DEBUG //// nop; bkpt // DEBUG
stmdb sp!,{r0,r1,lr} // ABI crt0 -static may have data here ldr r_pack2,sz_pack2
sub sp,sp,#-3*NBPW + F_SIZE // F_R0,F_R1 separately ldr r2,mflg
adr r3,sz_pack2
sub r3,r3,r_pack2 @ elfaddr= &Elf_Ehdr of this program
call 0f; cancel_dummy: ret; 0:
stmdb sp!,{r0,r1,r2} // F_R0,F_R1,%F_ENTR(F_QFLG)
sub sp,sp,#2*NBPW // space for F_ADRU, F_LENU
stmdb sp!,{r0,r1,r3,lr} // %F_ADRX,%F_LENX,F_ELFA,F_SEGV
section ELFSIGSEGV
// install SIGSEGV handler for debugging
SIGSEGV= 11
SA_SIGINFO= 4 // /usr/include/bits/sigaction.h
SA_RESTORER= 0x04000000
sa_sigaction = 0 * NBPW
sa_flags = 1 * NBPW
sa_mask = 3 * NBPW // location of mask
sa_restorer = 4 * NBPW
sa_frame = 5 * NBPW
call adr_sigaction; mov r0,lr // .sa_sigaction
mov r1,#SA_SIGINFO // .sa_flags
mov r2,#0 // .sa_mask
mov r3,#0
mov r4,#0 // .sa_restorer
stmdb sp!,{r0,r1,r2,r3,r4}
mov arg4,#8 // 8 bytes ==> 64 bits
mov arg3,#0 // do not save old_sigaction
mov arg2,sp // &new_sigaction
mov arg1,#SIGSEGV
do_sys7t __NR_sigaction
add sp,sp,#sa_frame
call 0f
cancel_sigsegv:
mov r3,#8 // space for 8 bytes of signal flags
mov r2,#0 // no old
mov r1,#0 // no new
mov r0,#SIGSEGV
do_sys7t __NR_sigaction
ret
0:
str lr,[sp,#F_SEGV]
#if 0 //{ TEST ONLY
mov r0,#0xc0;mov r1,#0xc1;mov r2,#0xc2;mov r3,#0xc3;mov r4,#0xc4;mov r5,#0xc5;mov r6,#0xc6;mov r7,#0xc7
mov r8,#0xc8;mov r9,#0xc9;mov r10,#0xca;mov r11,#0xcb;mov r12,#0xcc
ldr r0,[r0] // cause SIGSEGV
#endif //}
section ELFMAINX2
add arg1,sp,#NBPW + F_SIZE // avoid feint of 0==argc add arg1,sp,#NBPW + F_SIZE // avoid feint of 0==argc
call zfind // out: r0= &envp call zfind // out: r0= &envp
call zfind call zfind
@@ -159,14 +219,6 @@ _start: .globl _start
mvn r2,r2; add r2,r2,#1 // neg mvn r2,r2; add r2,r2,#1 // neg
mov r_pmask,r2 mov r_pmask,r2
ldr r1,sz_pack2
adr r0,sz_pack2
sub r0,r0,r1 @ elfaddr= &Elf_Ehdr of this program
str r0,[sp,#F_ELFA]
mov r_pack2,r1 @ save sz_pack2
ldr r0,mflg
str r0,[sp,#F_QFLG]
call get_data // cpr0 can be too far away call get_data // cpr0 can be too far away
old_sp .req r11 old_sp .req r11
@@ -216,10 +268,11 @@ mfd .req old_sp
mov mfd,r0 mov mfd,r0
//}{ r0 free, r1 busy //}{ r0 free, r1 busy
add r4,r_unc,# 2*NBPW + D_FOLD add r4,r_unc,# 2*NBPW + D_FOLD
ldr r5,[sp,#F_SEGV]
and r4,r4, #-2*NBPW // align displacement and r4,r4, #-2*NBPW // align displacement
ldr r3,[sp,#F_QFLG] ldr r3,[sp,#F_qflg]
mov r2,r_pmask mov r2,r_pmask
stmia r1,{r2,r3,r4} // D_PMASK, D_QFLG, D_FNAME stmia r1,{r2,r3,r4,r5} // F_ADRU: D_PMASK, D_QFLG, D_FNAME, D_SEGV
.unreq r_pmask .unreq r_pmask
// De-compress folded stage of stub // De-compress folded stage of stub
@@ -242,7 +295,7 @@ mfd .req old_sp
ldr arg3,[sp,#F_LENU] ldr arg3,[sp,#F_LENU]
ldr arg2,[sp,#F_ADRU] ldr arg2,[sp,#F_ADRU]
mov arg1,mfd mov arg1,mfd
do_sys __NR_write do_sys7t __NR_write
mov r5,#0 mov r5,#0
mov r4,mfd mov r4,mfd
@@ -261,13 +314,182 @@ mfd .req old_sp
add r4,r0,r1 @ ADRX= &b_info | unmap_all_pages add r4,r0,r1 @ ADRX= &b_info | unmap_all_pages
bic r1,r1,#unmap_all_pages bic r1,r1,#unmap_all_pages
sub r5,r_pack2,r1 @ LENX= sz_pack2 - O_BINFO sub r5,r_pack2,r1 @ LENX= sz_pack2 - O_BINFO
stmia sp,{r4,r5} // F_ADRX, F_LENX stmia sp,{r4,r5} // sp: F_ADRX, F_LENX; (sp no change)
#if DEBUG /*{*/ #if DEBUG /*{*/
stmdb sp!,{TRACE_REGS}; mov r0,#3; bl trace stmdb sp!,{TRACE_REGS}; mov r0,#3; bl trace
#endif /*}*/ #endif /*}*/
ldr r12,[sp,#F_ADRU] ldr r12,[sp,#F_ADRU]
add pc,r12,#D_FOLD // goto unfolded code add pc,r12,#D_FOLD // goto unfolded code
proc_self_cmdline:
.asciz "/proc/self/cmdline"
.balign 4
#define r_fd r6
PATH_MAX= 4096
child:
#if 1 //{ pipe input to gdb
mov arg1,#FD_stdin; do_sys7t __NR_close
mov arg2,#0; mov arg1,#0; stmdb sp!,{arg1,arg2} // space for result of pipe()
mov arg1,sp
do_sys7t __NR_pipe // read side will be 0 (FD_stdin)
ldmia sp!,{r0,r_fd} // write side of pipe
mov arg3,#commands_gdb_end - commands_gdb // len
adr arg2,commands_gdb
mov arg1,r_fd
do_sys7t __NR_write
mov arg1,r_fd; do_sys7t __NR_close
#endif //}
sub sp,sp,#PATH_MAX
mov arg3,#O_RDONLY
adr arg2,proc_self_cmdline
mov arg1,#FD_CWD
do_sys7t2 __NR_openat; mov r_fd,r0 // fd
mov arg2,sp // buffer
mov arg3,#PATH_MAX
do_sys7t __NR_read
mov arg1,r_fd; do_sys7t __NR_close
do_sys7t __NR_getppid
sub sp,sp,#16 // decimal(pid) fits in 16 bytes
mov arg2,arg1; mov arg1,sp; call unsimal
mov arg5,#0 // terminator
mov arg4,sp // &"pid" (result of unsimal)
add arg3,sp,#16 // cmdline argv[0] [skip "pid"]
adr arg2,minus_q
adr arg1,path_gdb
stmdb sp!,{arg1,arg2,arg3,arg4,arg5} // argv
mov arg3,#0 // _envviron BUG
mov arg2,sp // &argv
do_sys7t __NR_execve
0:
b 0b
minus_q:
.asciz "-q"
path_gdb:
.asciz "/usr/bin/gdb"
commands_gdb:
.ascii "set prompt\n" // null string prompt
.ascii "info inferiors\n"
.ascii "print \"r0-r7\"\n"
.ascii "x/8xw $sp + 0x28\n"
.ascii "print \"r8-r15\"\n"
.ascii "x/8xw\n"
.ascii "set $pc = *(int *)($sp + 0x64)\n"
.ascii "print \"faulting instr\"\n"
.ascii "x/i $pc\n"
.ascii "print \"fault context\"\n"
.ascii "x/15i $pc - 7*4\n"
//.ascii "print \"intercept stack\"\n"
//.ascii "x/76xw $sp\n"
.ascii "set $sp = *(long *)($sp + 0x5c)\n"
.ascii "print \"user stack\"\n"
.ascii "x/64xw $sp\n"
.ascii "kill\n"
.ascii "quit 1"
.byte 0
commands_gdb_end:
.balign 4
// ucontext_t, mcontext_t, gregset_t, gret_t, REG_xxx: <sys/ucontext.h>
// stack_t <bits/types/stack_t.h>
__restore_rt:
nop
proc_self_maps:
.asciz "/proc/self/maps"
announce_sigaction:
.ascii "\n\nSIGSEGV address space:\n"
end_announce_sigaction:
.balign 4
adr_sigaction:
mov r12,lr; mov lr,pc; mov pc,r12 // blx lr
sigsegv_sigaction:
stmdb sp!,{arg2,arg3} // save siginfo *, ucontext *
// print /proc/self/maps of child (same as parent: the beauty of fork())
mov arg3,#end_announce_sigaction - announce_sigaction // arg3 len
adr arg2,announce_sigaction // buf
mov arg1,#FD_stderr
do_sys7t __NR_write
mov arg3,#O_RDONLY // flags
adr arg2,proc_self_maps // path
mov arg1,#FD_CWD
do_sys7t2 __NR_openat; mov r_fd,r0 // fd_maps
BUFLEN= 4096
sub sp,sp,#BUFLEN
loop_maps:
mov arg3,#BUFLEN // buflen
mov arg2,sp // buffer
mov arg1,r_fd // fd_maps
do_sys7t __NR_read
cmp r0,#0; beq done_maps
mov arg3,r0 // buflen
mov arg2,sp // buf
mov arg1,#FD_stderr
do_sys7t __NR_write
b loop_maps
done_maps:
add sp,sp,#BUFLEN // discard buffer
mov arg1,r_fd; do_sys7t __NR_close
// end printing of /proc/self/maps
mov arg1,#0; mov arg2,#0 // paranoia
do_sys7t __NR_fork
cmp r0,#0; beq child // fork()
parent:
NR_exit= 1
b parent // spin; paused by gdb
unsimal: // (dst, value)
mov r2,#0
stmdb sp!,{r2,lr}; call 0f
ldmia sp!,{r2,lr}
strb r2,[r0] // terminator
ret
0:
mov ip,r1 // extra copy used at end
mov r2,#0 // hi
mov r3,r1 // copy lo
adds r1,r1,r1,lsl #3 // 9*lo
adc r2,r2,r2,lsl #3 // 9*hi + C
add r2,r2,r3,lsr #(32 - 3) // bits shifted from lo to hi
mov r3,r1 // copy lo
adds r1,r1,r1,lsl #4
adc r2,r2,r2,lsl #4
add r2,r2,r3,lsr #(32 - 4) // * 0x99
mov r3,r1 // copy lo
adds r1,r1,r1,lsl #8
adc r2,r2,r2,lsl #8
add r2,r2,r3,lsr #(32 - 8) // * 0x9999
mov r3,r1 // copy lo
adds r1,r1,r1,lsl #16
adc r2,r2,r2,lsl #16
add r2,r2,r3,lsr #(32 - 16) // * 0x99999999
subs r1,r1,ip,lsl #(32 - 1) // - * 0x80000000
sbc r2,r2,ip,lsr #1 // * 0x19999999
adds r1,r1,ip
adcs r1,r2,#0 // * 0x0.1999999a; r1 = quo(ip, 10); set flags
add r2,r1,r1,lsl #2 // r2 = quo * 5
sub r2,ip,r2,lsl #1 // rem = ip - 10 * quo
stmdb sp!,{r2,lr} // save rem and retaddr
beq 1f; call 0b // stop if 0==quo; else recurse for next remainder
1:
ldmia sp!,{r1,lr}; add r1,r1,#'0'; strb r1,[r0],#1
ret
zfind: zfind:
ldr r1,[r0],#NBPW ldr r1,[r0],#NBPW
cmp r1,#0; bne zfind cmp r1,#0; bne zfind
@@ -322,7 +544,7 @@ L610: @ each word
mov r0,#'\n'; strb r0,[r2],#1 mov r0,#'\n'; strb r0,[r2],#1
sub r2,r2,sp @ count sub r2,r2,sp @ count
mov r1,sp @ buf mov r1,sp @ buf
mov r0,#2 @ FD_STDERR mov r0,#FD_stderr
#if defined(ARMEL_EABI4) /*{*/ #if defined(ARMEL_EABI4) /*{*/
mov r7,#__NR_write mov r7,#__NR_write
swi 0 swi 0
+29 -21
View File
@@ -66,11 +66,6 @@ PATH_MAX= 4096
#define call bl #define call bl
#include "MAX_ELF_HDR.S" #include "MAX_ELF_HDR.S"
ZERO= . - 3*NBPW
page_mask= . - 3*NBPW; .globl page_mask
qflg_data = . - 2*NBPW // QNX vs Linux: MAP_PRIVATE | MAP_ANONYMOUS
upxfn_path= . - 1*NBPW // displacement from "zero"
arg1 .req r0 arg1 .req r0
arg2 .req r1 arg2 .req r1
arg3 .req r2 arg3 .req r2
@@ -78,6 +73,12 @@ arg4 .req r3
arg5 .req r4 arg5 .req r4
arg6 .req r5 arg6 .req r5
ZERO= . - 4*NBPW // 4 words initialized prior to unfolded code
page_mask= . - 4*NBPW
qflg_data = . - 3*NBPW // QNX vs Linux: MAP_PRIVATE | MAP_ANONYMOUS
upxfn_path= . - 2*NBPW // displacement from ZERO
cancel_sigsegv= . - 1*NBPW
fold_begin: // enter here fold_begin: // enter here
b L05 // put page_mask and qflg_data within short-displacement of uses b L05 // put page_mask and qflg_data within short-displacement of uses
@@ -141,20 +142,21 @@ mmap_do: // sp: saved r4,r5,lr
proc_self_exe: .asciz "/proc/self/exe"; .balign 4 proc_self_exe: .asciz "/proc/self/exe"; .balign 4
// In: sp/ F_ADRX,F_LENX,F_ELFA,F_ADRU,F_LENU,F_R0,F_R1,%F_ENTR,F_argc // In: sp/ F_ADRX,F_LENX,F_ELFA,f_SEGV,F_ADRU,F_LENU,F_R0,F_R1,%F_ENTR,F_argc
// [ADRX, +LENX) = extent of compressed program // [ADRX, +LENX) = extent of compressed program
// [ADRU, +LENU) = params to munmap unfolded stub // [ADRU, +LENU) = params to munmap unfolded stub
F_ADRX= 0*NBPW F_ADRX= 0*NBPW
F_obinfo= F_ADRX // unmap_all_pages in lo bits F_obinfo= F_ADRX // unmap_all_pages in lo bits
F_LENX= 1*NBPW F_LENX= 1*NBPW
F_ELFA= 2*NBPW F_ELFA= 2*NBPW
F_ADRU= 3*NBPW F_SEGV= 3*NBPW
F_LENU= 4*NBPW F_ADRU= 4*NBPW
F_R0= 5*NBPW F_LENU= 5*NBPW
F_R1= 6*NBPW F_R0= 6*NBPW
F_ENTR= 7*NBPW F_R1= 7*NBPW
F_qflg = F_ENTR // QNX mmap flags F_ENTR= 8*NBPW
F_ARGC= 8*NBPW F_qflg= F_ENTR // QNX mmap flags
F_argc= 9*NBPW
is_ptinterp= (1<<0) is_ptinterp= (1<<0)
unmap_all_pages= (1<<1) unmap_all_pages= (1<<1)
@@ -162,17 +164,17 @@ unmap_all_pages= (1<<1)
/* In: /* In:
r4= ADRX | unmap_all_pages r4= ADRX | unmap_all_pages
r5= LENX r5= LENX
sp/ ADRX|uap,LENX,ELFA,ADRU,LENU,r0,r1,%entry, argc,argv,0,envp,0,auxv sp/ ADRX|uap,LENX,ELFA,r0,r1,%entry,SEGV,ADRU,LENU, argc,argv,0,envp,0,auxv
(ADRX,LENX) = extent of compressed program (ADRX,LENX) = extent of compressed program
(ADRU,LENU) = params to munmap unfolded stub (ADRU,LENU) = params to munmap unfolded stub
*/ */
L05: L05:
ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12} // F_ADRX .. F_ARGC ldmia sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,r12} // F_ADRX .. F_ARGC
mov r1,sp @ src mov r1,sp @ src
tst r4,#unmap_all_pages; bne 0f; sub sp,sp,#PATH_MAX; 0: tst r3,#unmap_all_pages; bne 0f; sub sp,sp,#PATH_MAX; 0:
mov r0,sp @ dst mov r0,sp @ dst
stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12} stmdb sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,r12}
0: // copy argv down 0: // copy argv down
ldr r3,[r1],#NBPW; cmp r3,#0 ldr r3,[r1],#NBPW; cmp r3,#0
@@ -255,6 +257,9 @@ r_elfa .req r9
add sp,sp,#MAX_ELF_HDR_32 + OVERHEAD @ un-alloca add sp,sp,#MAX_ELF_HDR_32 + OVERHEAD @ un-alloca
str r0,[sp,#F_ENTR] @ entry address str r0,[sp,#F_ENTR] @ entry address
adr lr,0f; ldr pc,[sp,#F_SEGV] // cancel_sigsegv
0:
// Map 1 page of /proc/self/exe so that it does not disappear // Map 1 page of /proc/self/exe so that it does not disappear
ldr r0,[sp,#F_obinfo]; tst r0,#unmap_all_pages; bne no_map_pse ldr r0,[sp,#F_obinfo]; tst r0,#unmap_all_pages; bne no_map_pse
mov arg6,#0 @ SEEK_SET offset mov arg6,#0 @ SEEK_SET offset
@@ -290,7 +295,7 @@ sweep:
add sp,sp,#(1<<18) @ pop stack add sp,sp,#(1<<18) @ pop stack
#endif //} #endif //}
add sp,sp,#3*NBPW // toss F_ADRX,F_LENX,F_ELFA add sp,sp,#4*NBPW // toss F_ADRX,F_LENX,F_ELFA,F_SEGV
ldmia sp!,{arg1,arg2} @ F_ADRU,F_LENU ldmia sp!,{arg1,arg2} @ F_ADRU,F_LENU
stmdb sp!,{r_auxe} stmdb sp!,{r_auxe}
mov r3,#0 @ clear registers: paranoia mov r3,#0 @ clear registers: paranoia
@@ -315,6 +320,9 @@ sweep:
#endif /*}*/ #endif /*}*/
ldmia sp!,{r12} // r_auxe ldmia sp!,{r12} // r_auxe
ldr pc,[r12,#NBPW -2*NBPW] @ hatch: Elf32_auxv_t[AT_NULL@.a_type].a_val ldr pc,[r12,#NBPW -2*NBPW] @ hatch: Elf32_auxv_t[AT_NULL@.a_type].a_val
// hatch:
// svc 0 // In: r7= __NR_munmap; arg1= F_ADRU; arg2= F_LENU
// pop {r0,r1,pc} // F_R0, F_R1, F_ENTR
f_unfilter: @ (char *ptr, uint len, uint cto, uint fid) f_unfilter: @ (char *ptr, uint len, uint cto, uint fid)
ptr .req r0 ptr .req r0
+215 -8
View File
@@ -76,12 +76,18 @@ PAGE_SIZE = -(~0<<PAGE_SHIFT)
// /usr/include/asm-generic/unistd.h // /usr/include/asm-generic/unistd.h
__NR_close = 0x39 // 57 __NR_close = 0x39 // 57
__NR_execve = 0xdd // 221
__NR_exit = 0x5d // 93 __NR_exit = 0x5d // 93
__NR_fork = 0xdc // 220
__NR_getppid = 0xad // 173
__NR_memfd_create= 0x117 // 279 __NR_memfd_create= 0x117 // 279
__NR_mmap = 0xde // 222 __NR_mmap = 0xde // 222
__NR_mprotect = 0xe2 // 226 __NR_mprotect = 0xe2 // 226
__NR_munmap = 0xd7 // 215 __NR_munmap = 0xd7 // 215
__NR_openat = 0x38 // 56 __NR_openat = 0x38 // 56
__NR_pipe2 = 0x3b // 59
__NR_read = 0x3f // 63
__NR_sigaction = 0x86 // 134
AT_FDCWD= -100 AT_FDCWD= -100
__NR_write = 0x40 // 64 __NR_write = 0x40 // 64
@@ -134,6 +140,13 @@ wszuf .req w21
xszuf .req x21 xszuf .req x21
xFOLD .req x20 xFOLD .req x20
wPrivAnon .req w19 wPrivAnon .req w19
cancel_SEGV .req x18
D_PMASK= 0*NBPW
D_XSIGSEGV= 1*NBPW
D_GETPM= 2*NBPW
D_PRIVANON= 2*NBPW + 2*4
D_FOLD= 2*NBPW + 3*4 // .data space at start of unfold
// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf
// x18 is CLOBBERED: "The platform register" // x18 is CLOBBERED: "The platform register"
@@ -154,7 +167,198 @@ _start: .globl _start
#endif /*}*/ #endif /*}*/
stp x0,x1,[sp,#-2*NBPW]! // ABI: -static crt0 might pass data in x0,x1 stp x0,x1,[sp,#-2*NBPW]! // ABI: -static crt0 might pass data in x0,x1
ldr wPrivAnon,mflg ldr wPrivAnon,mflg
adr cancel_SEGV,cancel_dummy
section ELFSIGSEGV
// install SIGSEGV handler for debugging hardware and de-compressor
SIGSEGV= 11
SA_SIGINFO= 4 // /usr/include/bits/sigaction.h
SA_RESTORER= 0x04000000
sa_sigaction = 0 * NBPW
sa_flags = 1 * NBPW
sa_mask = 3 * NBPW // location of mask
sa_restorer = 4 * NBPW
sa_frame = 8 * NBPW
adr x0,sigsegv_sigaction // handler
mov x1,#SA_SIGINFO // flag bits
stp x0,x1,[sp,-sa_frame]! // .sa_sigaction, .sa_flags
str xzr,[sp,sa_mask] // .sa_mask
str xzr,[sp,sa_restorer]
mov x3,#8 // 8 bytes ==> 64 bits
mov x2,xzr // do not save old_sigaction
mov x1,sp // &new_sigaction
mov w0,#SIGSEGV
do_sys __NR_sigaction
add sp,sp,sa_frame
adr cancel_SEGV,cancel_sigsegv
b L300
#if 0 //{ TEST ONLY
mov x0,#0xc0;mov x1,#0xc1;mov x2,#0xc2;mov x3,#0xc3;mov x4,#0xc4;mov x5,#0xc5;mov x6,#0xc6;mov x7,#0xc7
mov x8,#0xc8;mov x9,#0xc9;mov x10,#0xca;mov x11,#0xcb;mov x12,#0xcc;mov x13,#0xcd;mov x14,#0xce;mov x15,#0xcf
mov x16,#0xd0;mov x17,#0xd1;mov x18,#0xd2;mov x19,#0xd3;mov x20,#0xd4;mov x21,#0xd5;mov x22,#0xd6;mov x23,#0xd7
mov x24,#0xd8;mov x25,#0xd9;mov x26,#0xda;mov x27,#0xdb;mov x28,#0xdc;mov x29,#0xdd;mov x30,#0xde
ldr x0,[x0] // cause SIGSEGV
#endif //}
proc_self_cmdline:
.asciz "/proc/self/cmdline"
announce_sigaction:
.asciz "\n\nSIGSEGV address space:\n"
end_announce_sigaction:
proc_self_maps:
.asciz "/proc/self/maps"
minus_q:
.asciz "-q"
path_gdb:
.asciz "/usr/bin/gdb"
commands_gdb:
.ascii "set prompt\n" // null string prompt
.ascii "info inferiors\n"
.ascii "print \"x0-x7\"\n"
.ascii "x/8xg $sp + 0x138\n"
.ascii "print \"x8-x15\"\n"
.ascii "x/8xg\n"
.ascii "print \"x16-x23\"\n"
.ascii "x/8xg\n"
.ascii "print \"x24-x30\"\n"
.ascii "x/7xg\n"
.ascii "set $pc = *(long *)($sp + 0x238)\n"
.ascii "print \"faulting instr\"\n"
.ascii "x/i $pc\n"
.ascii "print \"fault context\"\n"
.ascii "x/15i $pc - 7*4\n"
//.ascii "print \"intercept stack\"\n"
//.ascii "x/76xg $sp\n"
.ascii "set $sp = *(long *)($sp + 0x230)\n"
.ascii "print \"user stack\"\n"
.ascii "x/64xg $sp\n"
.ascii "kill\n"
.ascii "quit 1"
.byte 0
commands_gdb_end:
.balign 4
#define r_fd w19
PATH_MAX= 4096
child:
#if 1 //{ pipe input to gdb
mov arg1w,#0; do_sys __NR_close // fd_stdin
stp xzr,xzr,[sp,-2 * NBPW]! // &fd_pipe[2]; 4 bytes each; but stack align
mov arg2w,#0
mov arg1,sp
do_sys __NR_pipe2 // read size will be 0 (fd_stdin)
add x16,sp,#4
ldr r_fd,[x16] // write side of pipe
add sp,sp,#2*NBPW
mov w2,#commands_gdb_end - commands_gdb // arg3 len
adr x1,commands_gdb // arg2
mov w0,r_fd // arg1 fd
do_sys __NR_write
mov w0,r_fd; do_sys __NR_close
#endif //}
sub sp,sp,#PATH_MAX
mov arg3w,#O_RDONLY
adr arg2,proc_self_cmdline
mov arg1,#-1 // fake FD_CWD
do_sys __NR_openat; mov r_fd,w0
mov arg2,sp // buffer
mov arg3w,#PATH_MAX
do_sys __NR_read
mov arg1w,r_fd; do_sys __NR_close
do_sys __NR_getppid
stp xzr,xzr,[sp,-2 * NBPW]! // decimal(pid) fits in 16 bytes
mov w1,w0; mov x0,sp; call unsimal
mov arg4,sp // &"pid" (result of unsimal)
add arg3,sp,#2 * NBPW // cmdline argv[0] [skip "pid"]
adr arg2,minus_q
adr arg1,path_gdb // arg1 path
stp arg1,arg2,[sp,-6 *NBPW]! // path_gdb, "-q"
stp arg3,arg4,[sp,2 *NBPW] // argv[0], "pid"
str xzr,[sp,4 * NBPW] // NULL
mov arg3,#0 // _envviron BUG
mov arg2,sp // &argv
do_sys __NR_execve
0:
b 0b
// ucontext_t, mcontext_t, gregset_t, gret_t, REG_xxx: <sys/ucontext.h>
// stack_t <bits/types/stack_t.h>
__restore_rt:
nop
sigsegv_sigaction:
stp x1,x2,[sp,-2 * NBPW] // save siginfo *, ucontext *
// print /proc/self/maps of child (same as parent: the beauty of fork())
mov x2,#end_announce_sigaction - announce_sigaction // arg3 len
adr x1,announce_sigaction // arg2 buf
mov w0,#2 // arg1 fd_stderr
do_sys __NR_write
mov w2,#O_RDONLY // arg3 flags
adr x1,proc_self_maps // arg2 path
mov w0,#-1 // fake FD_CWD
do_sys __NR_openat
mov r_fd,w0 // fd_maps
BUFLEN= 4096
sub sp,sp,#BUFLEN
loop_maps:
mov x2,#BUFLEN // arg3 buflen
mov x1,sp // arg2 buffer
mov w0,r_fd // arg1 fd_maps
do_sys __NR_read
cbz w0,done_maps
mov x2,x0 // arg3 buflen
mov x1,sp // arg2 buf
mov w0,#2 // fd_stderr
do_sys __NR_write
b loop_maps
done_maps:
add sp,sp,#BUFLEN // discard buffer
mov x0,x16; do_sys __NR_close
// end printing of /proc/self/maps
mov arg1,#0; mov arg2,#0 // paranoia
do_sys __NR_fork; cbz x0,child
parent:
b parent // spin; paused by gdb
unsimal: // (dst, value)
stp lr,xzr,[sp,-2 * NBPW]!; call 0f
ldp lr,x1,[sp],#2 * NBPW
strb w1,[x0] // terminator
ret
0:
mov w2,#0xcccd
movk w2, 0xcccc, lsl 16 // 0xcccccccd ==> 4/5 as 32-bit fraction
umull x2,w1,w2
//add x2,x2,#0x1000 // BUG? unsimal(p, 730)
lsr x3,x2,35 // quo(value, 10)
add w2,w3,w3,lsl 2 // 5 * quo
sub w1,w1,w2,lsl 1 // rem = (val - (10 * quo))
stp lr,x1,[sp,-2 * NBPW]!
cbz x3,1f; mov w1,w3; call 0b
1:
ldp lr,x1,[sp],#2 * NBPW; add w1,w1,#'0'; strb w1,[x0],#1
ret
cancel_sigsegv:
mov x3,#8 // 8 bytes ==> 64 bits
mov x2,xzr // no old
mov x1,xzr // no new
mov w0,#SIGSEGV
do_sys __NR_sigaction
ret
L300:
section ELFMAINX2
add x0,sp,#(1+ 2)*NBPW add x0,sp,#(1+ 2)*NBPW
call zfind // avoid feint of 0==argc; out: x0= &envp call zfind // avoid feint of 0==argc; out: x0= &envp
call zfind; mov xauxv,x0 // &Elf64_auxv call zfind; mov xauxv,x0 // &Elf64_auxv
@@ -175,8 +379,11 @@ F_LENU= 3 * NBPW
neg xPMASK,x2 // save for folded code neg xPMASK,x2 // save for folded code
str xPMASK,[sp,#F_PMASK] str xPMASK,[sp,#F_PMASK]
adr xelfa,sz_pack2
ldr w0,[xelfa] // sz_pack2 causes unknown R_AARCH64_LD_PREL_LO19
str x0,[sp,#F_SZPK2]
sub xelfa,xelfa,w0,uxtw
call main call main
L00:
mov xFOLD,lr mov xFOLD,lr
mov w1,#MFD_EXEC // flags mov w1,#MFD_EXEC // flags
@@ -231,7 +438,8 @@ wmeth .req w4
.unreq xmeth .unreq xmeth
.unreq wmeth .unreq wmeth
str xPMASK,[sp] // propagate PAGE_MASK str xPMASK,[sp] // propagate PAGE_MASK D_PMASK
str cancel_SEGV,[sp, #D_XSIGSEGV]
// Write de-compressed stub // Write de-compressed stub
ldr w2,[xFOLD,#sz_unc + LBINFO - LxFOLD] // .sz_unc of fold ldr w2,[xFOLD,#sz_unc + LBINFO - LxFOLD] // .sz_unc of fold
@@ -255,13 +463,16 @@ wmeth .req w4
// Use the unfolded stub // Use the unfolded stub
ldr wLENC,[sp,#F_SZPK2] ldr wLENC,[sp,#F_SZPK2]
ldr w1,[xFOLD, #LOBINFO - LxFOLD] // O_BINFO ldr w1,[xFOLD, #LOBINFO - LxFOLD] // O_BINFO
add lr,xADRU,#3*4 + NBPW // jmp to fold_begin add lr,xADRU,#D_FOLD // jmp to fold_begin
sub wLENC,wLENC,w1 sub wLENC,wLENC,w1
str xLENC,[sp,#F_SZPK2] str xLENC,[sp,#F_SZPK2]
bic w1,w1,#unmap_all_pages bic w1,w1,#unmap_all_pages
add xADRC,xelfa,x1 // &b_info of compressed input data add xADRC,xelfa,x1 // &b_info of compressed input data
jr lr // goto unfolded stub jr lr // goto unfolded stub
cancel_dummy:
ret
zfind: zfind:
ldr x1,[x0],#NBPW; cbnz x1,zfind ldr x1,[x0],#NBPW; cbnz x1,zfind
ret ret
@@ -383,12 +594,8 @@ strupx:
.asciz "upx" .asciz "upx"
.balign 4 .balign 4
main: main: // In: w0= sz_pack2
lr .req x30 lr .req x30
add xelfa,lr,#sz_pack2 - L00 // &sz_pack2
ldr w0,[xelfa]
sub xelfa,xelfa,w0,uxtw
str x0,[sp,#F_SZPK2]
callr lr callr lr
LxFOLD: LxFOLD:
LOBINFO: LOBINFO:
+9 -6
View File
@@ -84,16 +84,16 @@ PATH_MAX= 4096
#define OVERHEAD 2048 #define OVERHEAD 2048
#include "MAX_ELF_HDR.S" #include "MAX_ELF_HDR.S"
PAGE_MASK: .quad ~0<<12 // default PAGE_MASK: .quad ~0<<12 // default D_PMASK
get_page_mask: .globl get_page_mask cancel_sigsegv: .quad 0 // D_XSIGSEGV
get_page_mask: .globl get_page_mask // D_GETPM
ldr x0,PAGE_MASK ldr x0,PAGE_MASK
ret ret
bits_privanon: // known offset (2*NBPW + 2*4) D_PRIVANON
bits_privanon: // known offset (NBPW + 2*4)
.int MAP_PRIVATE | MAP_ANONYMOUS // Linux default; else QNX .int MAP_PRIVATE | MAP_ANONYMOUS // Linux default; else QNX
fold_begin: // known offset (NBPW + 3*4) fold_begin: // known offset D_FOLD = (2*NBPW + 3*4)
//// bkpt // DEBUG
b L10 b L10
// In: sp/ PMASK,LENC,ADRU,LENU, x0,x1, argc,argv,... // In: sp/ PMASK,LENC,ADRU,LENU, x0,x1, argc,argv,...
@@ -271,6 +271,9 @@ no_env_pse:
add sp,sp,#MAX_ELF_HDR_64 + OVERHEAD // un-alloca add sp,sp,#MAX_ELF_HDR_64 + OVERHEAD // un-alloca
mov xfexp,x0 // entry address mov xfexp,x0 // entry address
ldr x0,cancel_sigsegv
blr x0 // callr
// Discard pages of compressed input data (includes [ADRC,+LENC) ) // Discard pages of compressed input data (includes [ADRC,+LENC) )
ldr x1,[xelfa,#p_memsz+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_memsz ldr x1,[xelfa,#p_memsz+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_memsz
mov x0,xelfa // hi &Elf64_Ehdr mov x0,xelfa // hi &Elf64_Ehdr
+68 -5
View File
@@ -38,7 +38,21 @@ section PEISDLL1
cmpb [esp + 8], 1 cmpb [esp + 8], 1
jnz reloc_end_jmp jnz reloc_end_jmp
section PEMAIN01 section PEMAIN01
pusha push eax
nop
push ecx
xor edx, edx
push edx
nop
push ebx
add esp, 0
push esp
nop
push ebp
sub esi, esi
push esi
nop
push edi
section PESOCREL section PESOCREL
mov esi, offset start_of_compressed // relocated mov esi, offset start_of_compressed // relocated
section PESOCPIC section PESOCPIC
@@ -81,6 +95,35 @@ section PETLSHAK2 // restore the TLS index
pop eax pop eax
mov [edi], eax mov [edi], eax
section PEDYNIMPORT_RESOLVER
pushad ; Save all general-purpose registers
; Get handle to kernel32.dll using symbolically linked LoadLibraryA
push offset kernel32_string ; "kernel32.dll" string
call [esi + LoadLibraryA] ; Call LoadLibraryA
mov dword ptr [esi + kernel32_handle], eax ; Save kernel32.dll handle
; Get address of GetProcAddress
mov edi, eax ; edi = kernel32.dll handle. (Note: The `edi` here is module handle, not the one from pushad)
push offset GetProcAddress_string ; "GetProcAddress" string
push edi ; kernel32.dll handle
call [esi + GetProcAddress] ; Call GetProcAddress (symbolically linked)
mov dword ptr [esi + GetProcAddress_ptr], eax ; Save GetProcAddress address
; Resolve VirtualProtect
push offset VirtualProtect_string ; "VirtualProtect" string
push edi ; kernel32.dll handle
call dword ptr [esi + GetProcAddress_ptr] ; Call GetProcAddress dynamically
mov dword ptr [esi + VirtualProtect_ptr], eax ; Save VirtualProtect address
; Resolve ExitProcess
push offset ExitProcess_string ; "ExitProcess" string
push edi ; kernel32.dll handle
call dword ptr [esi + GetProcAddress_ptr] ; Call GetProcAddress dynamically
mov dword ptr [esi + ExitProcess_ptr], eax ; Save ExitProcess address
popad ; Restore general-purpose registers
// ============= // =============
// ============= CALLTRICK // ============= CALLTRICK
// ============= // =============
@@ -142,7 +185,7 @@ section PEIMPOR2
scasb scasb
push ebp push ebp
call [esi + GetProcAddress] call dword ptr [esi + GetProcAddress_ptr]
or eax, eax or eax, eax
jz imp_failed jz imp_failed
next_imp: next_imp:
@@ -156,7 +199,7 @@ section PEIERDLL
xor eax, eax xor eax, eax
ret 0x0c ret 0x0c
section PEIEREXE section PEIEREXE
call [esi + ExitProcess] call dword ptr [esi + ExitProcess_ptr]
section PEIMDONE section PEIMDONE
imports_done: imports_done:
@@ -200,7 +243,7 @@ relhi0:
// ============= // =============
section PEDEPHAK section PEDEPHAK
mov ebp, [esi + VirtualProtect] mov ebp, dword ptr [esi + VirtualProtect_ptr]
lea edi, [esi + vp_base] lea edi, [esi + vp_base]
mov ebx, offset vp_size // 0x1000 or 0x2000 mov ebx, offset vp_size // 0x1000 or 0x2000
@@ -310,4 +353,24 @@ end_of_tls_handler:
#include "include/header.S" #include "include/header.S"
/* vim:set ts=8 sw=8 et: */
.global LoadLibraryA_ptr
.global VirtualProtect_ptr
.global ExitProcess_ptr
.global GetProcAddress_ptr
.global kernel32_handle
.global kernel32_string
.global LoadLibraryA_string
.global VirtualProtect_string
.global ExitProcess_string
section PEDATA
LoadLibraryA_ptr: .dd 0
VirtualProtect_ptr: .dd 0
ExitProcess_ptr: .dd 0
GetProcAddress_ptr: .dd 0
kernel32_handle: .dd 0
kernel32_string: .asciz "kernel32.dll"
LoadLibraryA_string: .asciz "LoadLibraryA"
VirtualProtect_string: .asciz "VirtualProtect"
ExitProcess_string: .asciz "ExitProcess"
+17 -8
View File
@@ -418,21 +418,30 @@ close: .globl close
li r0,SYS_close; 5: b sysgo li r0,SYS_close; 5: b sysgo
upxfd_create: .globl upxfd_create // (char *tag, unsigned flags) upxfd_create: .globl upxfd_create // (char *tag, unsigned flags)
stdu a0,-AL_STK(sp) // push tag onto aligned stack
0: // try memfd_create 0: // try memfd_create
ld a0,0(sp) // get tag
li r0,SYS_memfd_create; sc; bns+ ok_memfd li r0,SYS_memfd_create; sc; bns+ ok_memfd
cmpwi a2,0; beq no_memfd // memfd_create failed twice // failed syscall returns errno in a0
li a2,0; b 0b // try again without MFD_EXEC cmpwi a0,EINVAL; bne 8f // unexpected error number
cmpwi a1,0; beq no_memfd // memfd_create failed twice
li a1,0; b 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm no_memfd: // so try /dev/shm
O_RDWR= 2 O_RDWR= 2
O_DIRECTORY= 040000 // 0x4000 O_DIRECTORY= 040000 // 0x4000
O_TMPFILE= 020000000 // 0x400000 O_TMPFILE= 020000000 // 0x400000
mflr r6; bl 0f; .asciz "/dev/shm"; .balign 4; mflr r6
0: mflr a1; mtlr r6 bl 0f; .asciz "/dev/shm"; .balign 4
li a2,0700 0: mflr a0
lis a3,O_TMPFILE>>16 mtlr r6
ori a3,a3,O_RDWR | O_DIRECTORY li a2,0700 // mode
li r0,SYS_open; sc; bns+ ok_memfd; teq r0,r0 lis a1,O_TMPFILE>>16
ori a1,a1,O_RDWR | O_DIRECTORY
li r0,SYS_open; sc; bns+ ok_memfd // name, flags, mode
8:
teq r0,r0 // unexpected errno
ok_memfd: ok_memfd:
addi sp,sp,AL_STK // toss tag
ret ret
__NR_memfd_create= 360 __NR_memfd_create= 360
+23 -4
View File
@@ -2,17 +2,36 @@ file format elf64-x86-64
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0193 0 0 040 2**0 CONTENTS 0 ELFMAINX 010 0 0 040 2**0 CONTENTS
1 ELFMAINZ 04 0 0 01d4 2**2 CONTENTS 1 ELFSIGSEGV 0310 0 0 050 2**0 CONTENTS
2 ELFMAINX2 0194 0 0 0360 2**0 CONTENTS
3 ELFMAINZ 04 0 0 04f4 2**2 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX 0000000000000000 l d ELFMAINX 0 ELFMAINX
0000000000000000 l d ELFMAINX2 0 ELFMAINX2
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFSIGSEGV 0 ELFSIGSEGV
0000000000000000 g ELFMAINX 0 _start 0000000000000000 g ELFMAINX 0 _start
0000000000000000 *UND* 0 O_BINFO 0000000000000000 *UND* 0 O_BINFO
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000073 R_X86_64_PC32 ELFMAINZ+0xfffffffffffffffc 000000000000000c R_X86_64_PC32 ELFMAINX2+0x0000000000000158
RELOCATION RECORDS FOR [ELFSIGSEGV]:
OFFSET TYPE VALUE
00000000000000a2 R_X86_64_PC32 ELFMAINX2+0x000000000000015d
0000000000000250 R_X86_64_PC32 ELFMAINX2+0x000000000000015d
0000000000000262 R_X86_64_PC32 ELFMAINX2+0x000000000000015d
000000000000026a R_X86_64_PC32 ELFMAINX2+0x000000000000015d
00000000000002a5 R_X86_64_PC32 ELFMAINX2+0x000000000000015d
00000000000002bf R_X86_64_PC32 ELFMAINX2+0x000000000000015d
00000000000002d4 R_X86_64_PC32 ELFMAINX2+0x000000000000015d
RELOCATION RECORDS FOR [ELFMAINX2]:
OFFSET TYPE VALUE
000000000000005e R_X86_64_PC32 ELFMAINX+0xfffffffffffffff8
000000000000006a R_X86_64_PC32 ELFMAINZ+0xfffffffffffffffc
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
+8 -8
View File
@@ -8,14 +8,14 @@ Linker script and memory map
0x0000000000000040 . = SIZEOF_HEADERS 0x0000000000000040 . = SIZEOF_HEADERS
.text 0x0000000000000000 0x9cd .text 0x0000000000000000 0x9d9
.text 0x0000000000000000 0x165 tmp/amd64-linux.elf-fold.o .text 0x0000000000000000 0x173 tmp/amd64-linux.elf-fold.o
0x000000000000015d get_page_mask 0x000000000000016b get_page_mask
*fill* 0x0000000000000165 0x3 00 *fill* 0x0000000000000173 0x1 00
.text 0x0000000000000168 0x0 tmp/amd64-expand.o .text 0x0000000000000174 0x0 tmp/amd64-expand.o
.text 0x0000000000000168 0x865 tmp/amd64-linux.elf-main2.o .text 0x0000000000000174 0x865 tmp/amd64-linux.elf-main2.o
0x0000000000000898 upx_main2 0x00000000000008a4 upx_main2
0x00000000000002c6 underlay 0x00000000000002d2 underlay
UMF_LINUX 0x0000000000000000 0xf9 UMF_LINUX 0x0000000000000000 0xf9
UMF_LINUX 0x0000000000000000 0xf9 tmp/amd64-linux.elf-upxfd_linux.o UMF_LINUX 0x0000000000000000 0xf9 tmp/amd64-linux.elf-upxfd_linux.o
+18 -18
View File
@@ -8,18 +8,18 @@ Idx Name Size VMA LMA File off Algn
3 SO_MAIN 0813 0 0 0150 2**4 CONTENTS 3 SO_MAIN 0813 0 0 0150 2**4 CONTENTS
4 SO_HEAD 044 0 0 0963 2**0 CONTENTS 4 SO_HEAD 044 0 0 0963 2**0 CONTENTS
5 ptr_NEXT 0 0 0 09a7 2**0 CONTENTS 5 ptr_NEXT 0 0 0 09a7 2**0 CONTENTS
6 SO_TAIL 0c9 0 0 09a7 2**0 CONTENTS 6 SO_TAIL 0fa 0 0 09a7 2**0 CONTENTS
7 EXP_HEAD 0e9 0 0 0a70 2**0 CONTENTS 7 EXP_HEAD 0e9 0 0 0aa1 2**0 CONTENTS
8 NRV2E 0e8 0 0 0b59 2**0 CONTENTS 8 NRV2E 0e8 0 0 0b8a 2**0 CONTENTS
9 NRV2D 0db 0 0 0c41 2**0 CONTENTS 9 NRV2D 0db 0 0 0c72 2**0 CONTENTS
10 NRV2B 0c4 0 0 0d1c 2**0 CONTENTS 10 NRV2B 0c4 0 0 0d4d 2**0 CONTENTS
11 LZMA_DAISY 0a 0 0 0de0 2**0 CONTENTS 11 LZMA_DAISY 0a 0 0 0e11 2**0 CONTENTS
12 LZMA_ELF00 065 0 0 0dea 2**0 CONTENTS 12 LZMA_ELF00 065 0 0 0e1b 2**0 CONTENTS
13 LZMA_DEC10 09f7 0 0 0e4f 2**0 CONTENTS 13 LZMA_DEC10 09f7 0 0 0e80 2**0 CONTENTS
14 LZMA_DEC20 09f7 0 0 01846 2**0 CONTENTS 14 LZMA_DEC20 09f7 0 0 01877 2**0 CONTENTS
15 LZMA_DEC30 019 0 0 0223d 2**0 CONTENTS 15 LZMA_DEC30 019 0 0 0226e 2**0 CONTENTS
16 EXP_TAIL 014 0 0 02258 2**2 CONTENTS 16 EXP_TAIL 014 0 0 02288 2**2 CONTENTS
17 STRCON 04b 0 0 0226c 2**0 CONTENTS 17 STRCON 04b 0 0 0229c 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d SO_HEAD 0 SO_HEAD 0000000000000000 l d SO_HEAD 0 SO_HEAD
0000000000000000 l d EXP_HEAD 0 EXP_HEAD 0000000000000000 l d EXP_HEAD 0 EXP_HEAD
@@ -54,22 +54,22 @@ SYMBOL TABLE:
0000000000000000 g F UMF_LINUX 0f9 upx_mmap_and_fd_linux 0000000000000000 g F UMF_LINUX 0f9 upx_mmap_and_fd_linux
0000000000000000 g F SO_TAIL 0 eof 0000000000000000 g F SO_TAIL 0 eof
00000000000004c3 g F SO_MAIN 0b9 prep_SELinux 00000000000004c3 g F SO_MAIN 0b9 prep_SELinux
00000000000000c1 g SO_TAIL 0 write 00000000000000ba g SO_TAIL 0 write
00000000000003fa g F SO_MAIN 01d PF_to_PROT 00000000000003fa g F SO_MAIN 01d PF_to_PROT
00000000000000af g SO_TAIL 0 memfd_create 00000000000000c2 g SO_TAIL 0 memfd_create
00000000000000c5 g SO_TAIL 0 read 00000000000000be g SO_TAIL 0 read
0000000000000184 g F SO_MAIN 0ef make_hatch 0000000000000184 g F SO_MAIN 0ef make_hatch
0000000000000013 g SO_TAIL 0 memset 0000000000000013 g SO_TAIL 0 memset
0000000000000042 g SO_TAIL 0 msync 0000000000000042 g SO_TAIL 0 msync
0000000000000011 g SO_TAIL 0 my_bkpt 0000000000000011 g SO_TAIL 0 my_bkpt
0000000000000046 g SO_TAIL 0 Pprotect 0000000000000046 g SO_TAIL 0 Pprotect
00000000000000c1 g SO_TAIL 0 Pwrite 00000000000000ba g SO_TAIL 0 Pwrite
0000000000000095 g SO_TAIL 0 Punmap 0000000000000095 g SO_TAIL 0 Punmap
00000000000000a7 g SO_TAIL 0 exit 00000000000000a7 g SO_TAIL 0 exit
00000000000000ba g SO_TAIL 0 openat 00000000000000b3 g SO_TAIL 0 openat
0000000000000080 g SO_TAIL 0 open 0000000000000080 g SO_TAIL 0 open
0000000000000057 g SO_TAIL 0 mprotect 0000000000000057 g SO_TAIL 0 mprotect
00000000000000b6 g SO_TAIL 0 close 00000000000000af g SO_TAIL 0 close
000000000000057c g F SO_MAIN 0297 upx_so_main 000000000000057c g F SO_MAIN 0297 upx_so_main
RELOCATION RECORDS FOR [HUMF_A]: RELOCATION RECORDS FOR [HUMF_A]:
+49 -49
View File
@@ -6,53 +6,53 @@ Idx Name Size VMA LMA File off Algn
1 PEISDLL0 0f 0 0 040 2**0 CONTENTS 1 PEISDLL0 0f 0 0 040 2**0 CONTENTS
2 PEISEFI0 02 0 0 04f 2**0 CONTENTS 2 PEISEFI0 02 0 0 04f 2**0 CONTENTS
3 PEISDLL1 09 0 0 051 2**0 CONTENTS 3 PEISDLL1 09 0 0 051 2**0 CONTENTS
4 PEMAIN01 012 0 0 05a 2**0 CONTENTS 4 PEMAIN01 01d 0 0 05a 2**0 CONTENTS
5 PEICONS1 07 0 0 06c 2**0 CONTENTS 5 PEICONS1 07 0 0 077 2**0 CONTENTS
6 PEICONS2 09 0 0 073 2**0 CONTENTS 6 PEICONS2 09 0 0 07e 2**0 CONTENTS
7 PETLSHAK 010 0 0 07c 2**0 CONTENTS 7 PETLSHAK 010 0 0 087 2**0 CONTENTS
8 PEMAIN02 01 0 0 08c 2**0 CONTENTS 8 PEMAIN02 01 0 0 097 2**0 CONTENTS
9 PEMAIN03 0 0 0 08d 2**0 CONTENTS 9 PEMAIN03 0 0 0 098 2**0 CONTENTS
10 NRV_HEAD 060 0 0 08d 2**0 CONTENTS 10 NRV_HEAD 060 0 0 098 2**0 CONTENTS
11 NRV2B 083 0 0 0ed 2**0 CONTENTS 11 NRV2B 083 0 0 0f8 2**0 CONTENTS
12 NRV2D 091 0 0 0170 2**0 CONTENTS 12 NRV2D 091 0 0 017b 2**0 CONTENTS
13 NRV2E 0aa 0 0 0201 2**0 CONTENTS 13 NRV2E 0aa 0 0 020c 2**0 CONTENTS
14 LZMA_HEAD 014 0 0 02ab 2**0 CONTENTS 14 LZMA_HEAD 014 0 0 02b6 2**0 CONTENTS
15 LZMA_ELF00 05a 0 0 02bf 2**0 CONTENTS 15 LZMA_ELF00 05a 0 0 02ca 2**0 CONTENTS
16 LZMA_DEC20 0a01 0 0 0319 2**0 CONTENTS 16 LZMA_DEC20 0a01 0 0 0324 2**0 CONTENTS
17 LZMA_DEC30 014 0 0 0d1a 2**0 CONTENTS 17 LZMA_DEC30 014 0 0 0d25 2**0 CONTENTS
18 LZMA_TAIL 02 0 0 0d2e 2**0 CONTENTS 18 LZMA_TAIL 02 0 0 0d39 2**0 CONTENTS
19 PEMAIN10 01 0 0 0d30 2**0 CONTENTS 19 PEMAIN10 01 0 0 0d3b 2**0 CONTENTS
20 PETLSHAK2 04 0 0 0d31 2**0 CONTENTS 20 PETLSHAK2 04 0 0 0d3c 2**0 CONTENTS
21 PECTTPOS 07 0 0 0d35 2**0 CONTENTS 21 PECTTPOS 07 0 0 0d40 2**0 CONTENTS
22 PECTTNUL 03 0 0 0d3c 2**0 CONTENTS 22 PECTTNUL 03 0 0 0d47 2**0 CONTENTS
23 PEFILTER49 052 0 0 0d3f 2**0 CONTENTS 23 PEFILTER49 052 0 0 0d4a 2**0 CONTENTS
24 PEIMPORT 034 0 0 0d91 2**0 CONTENTS 24 PEIMPORT 034 0 0 0d9c 2**0 CONTENTS
25 PEIBYORD 02 0 0 0dc5 2**0 CONTENTS 25 PEIBYORD 02 0 0 0dd0 2**0 CONTENTS
26 PEK32ORD 012 0 0 0dc7 2**0 CONTENTS 26 PEK32ORD 012 0 0 0dd2 2**0 CONTENTS
27 PEIMORD1 0a 0 0 0dd9 2**0 CONTENTS 27 PEIMORD1 0a 0 0 0de4 2**0 CONTENTS
28 PEIMPOR2 021 0 0 0de3 2**0 CONTENTS 28 PEIMPOR2 021 0 0 0dee 2**0 CONTENTS
29 PEIERDLL 0b 0 0 0e04 2**0 CONTENTS 29 PEIERDLL 0b 0 0 0e0f 2**0 CONTENTS
30 PEIEREXE 06 0 0 0e0f 2**0 CONTENTS 30 PEIEREXE 06 0 0 0e1a 2**0 CONTENTS
31 PEIMDONE 04 0 0 0e15 2**0 CONTENTS 31 PEIMDONE 04 0 0 0e20 2**0 CONTENTS
32 PERELOC1 07 0 0 0e19 2**0 CONTENTS 32 PERELOC1 07 0 0 0e24 2**0 CONTENTS
33 PERELOC2 04 0 0 0e20 2**0 CONTENTS 33 PERELOC2 04 0 0 0e2b 2**0 CONTENTS
34 PERELOC3 030 0 0 0e24 2**0 CONTENTS 34 PERELOC3 030 0 0 0e2f 2**0 CONTENTS
35 REL64BIG 0a 0 0 0e54 2**0 CONTENTS 35 REL64BIG 0a 0 0 0e5f 2**0 CONTENTS
36 RELOC64J 02 0 0 0e5e 2**0 CONTENTS 36 RELOC64J 02 0 0 0e69 2**0 CONTENTS
37 PERLOHI0 0a 0 0 0e60 2**0 CONTENTS 37 PERLOHI0 0a 0 0 0e6b 2**0 CONTENTS
38 PERELLO0 0b 0 0 0e6a 2**0 CONTENTS 38 PERELLO0 0b 0 0 0e75 2**0 CONTENTS
39 PERELHI0 0e 0 0 0e75 2**0 CONTENTS 39 PERELHI0 0e 0 0 0e80 2**0 CONTENTS
40 PEDEPHAK 04b 0 0 0e83 2**0 CONTENTS 40 PEDEPHAK 04b 0 0 0e8e 2**0 CONTENTS
41 PETLSC 01b 0 0 0ece 2**0 CONTENTS 41 PETLSC 01b 0 0 0ed9 2**0 CONTENTS
42 PEMAIN20 04 0 0 0ee9 2**0 CONTENTS 42 PEMAIN20 04 0 0 0ef4 2**0 CONTENTS
43 CLEARSTACK 010 0 0 0eed 2**0 CONTENTS 43 CLEARSTACK 010 0 0 0ef8 2**0 CONTENTS
44 PEMAIN21 0 0 0 0efd 2**0 CONTENTS 44 PEMAIN21 0 0 0 0f08 2**0 CONTENTS
45 PEISDLL9 0f 0 0 0efd 2**0 CONTENTS 45 PEISDLL9 0f 0 0 0f08 2**0 CONTENTS
46 PEISEFI9 02 0 0 0f0c 2**0 CONTENTS 46 PEISEFI9 02 0 0 0f17 2**0 CONTENTS
47 PERETURN 04 0 0 0f0e 2**0 CONTENTS 47 PERETURN 04 0 0 0f19 2**0 CONTENTS
48 PEDOJUMP 05 0 0 0f12 2**0 CONTENTS 48 PEDOJUMP 05 0 0 0f1d 2**0 CONTENTS
49 PETLSC2 026 0 0 0f17 2**0 CONTENTS 49 PETLSC2 026 0 0 0f22 2**0 CONTENTS
50 UPX1HEAD 020 0 0 0f3d 2**0 CONTENTS 50 UPX1HEAD 020 0 0 0f48 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d NRV_HEAD 0 NRV_HEAD 0000000000000000 l d NRV_HEAD 0 NRV_HEAD
0000000000000000 l PEIMDONE 0 imports_done 0000000000000000 l PEIMDONE 0 imports_done
@@ -145,8 +145,8 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [PEMAIN01]: RELOCATION RECORDS FOR [PEMAIN01]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000007 R_X86_64_PC32 start_of_compressed-0x0000000000000004 0000000000000012 R_X86_64_PC32 start_of_compressed-0x0000000000000004
000000000000000e R_X86_64_32S start_of_uncompressed 0000000000000019 R_X86_64_32S start_of_uncompressed
RELOCATION RECORDS FOR [PEICONS1]: RELOCATION RECORDS FOR [PEICONS1]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
+81 -59
View File
@@ -2,53 +2,100 @@ file format elf32-littlearm
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFSIGSEGV 05c 0 0 034 2**0 CONTENTS
1 HUMF_A 04 0 0 034 2**0 CONTENTS 1 ELFMAINX2 0598 0 0 090 2**2 CONTENTS
2 HUMF_L 04 0 0 038 2**0 CONTENTS 2 ELFMAINY 0 0 0 0628 2**0 CONTENTS
3 UMF_ANDROID 0544 0 0 03c 2**2 CONTENTS 3 HUMF_A 04 0 0 0628 2**0 CONTENTS
4 UMF_LINUX 0144 0 0 0580 2**2 CONTENTS 4 HUMF_L 04 0 0 062c 2**0 CONTENTS
5 ELFMAINX 0264 0 0 06c4 2**2 CONTENTS 5 UMF_ANDROID 0544 0 0 0630 2**2 CONTENTS
6 ELFMAINZ 0218 0264 0264 0928 2**0 CONTENTS 6 UMF_LINUX 0144 0 0 0b74 2**2 CONTENTS
7 ELFMAINX 028 0 0 0cb8 2**0 CONTENTS
8 ELFMAINZ 0218 028 028 0ce0 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d ELFSIGSEGV 0 ELFSIGSEGV
00000000 l d ELFMAINX2 0 ELFMAINX2
00000000 l d UMF_ANDROID 0 UMF_ANDROID 00000000 l d UMF_ANDROID 0 UMF_ANDROID
00000000 l d UMF_LINUX 0 UMF_LINUX 00000000 l d UMF_LINUX 0 UMF_LINUX
00000000 l d ELFMAINX 0 ELFMAINX 00000000 l d ELFMAINX 0 ELFMAINX
00000264 l d ELFMAINZ 0 ELFMAINZ 00000028 l d ELFMAINZ 0 ELFMAINZ
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 l d HUMF_A 0 HUMF_A 00000000 l d HUMF_A 0 HUMF_A
00000000 l d HUMF_L 0 HUMF_L 00000000 l d HUMF_L 0 HUMF_L
00000258 g ELFMAINX 0 get_page_mask 0000058c g ELFMAINX2 0 get_page_mask
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
00000350 g ELFMAINZ 0 getpid 00000114 g ELFMAINZ 0 getpid
00000264 g ELFMAINX 0 upx_mmap_and_fd 00000598 g ELFMAINX2 0 upx_mmap_and_fd
0000026c g ELFMAINZ 0 memcpy 00000030 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
00000404 g ELFMAINZ 0 Psync 000001c8 g ELFMAINZ 0 Psync
000002b0 g ELFMAINZ 0 mempcpy 00000074 g ELFMAINZ 0 mempcpy
0000033c g ELFMAINZ 0 ftruncate 00000100 g ELFMAINZ 0 ftruncate
00000364 g ELFMAINZ 0 lseek 00000128 g ELFMAINZ 0 lseek
000002c4 g F UMF_ANDROID 0280 upx_mmap_and_fd_android 000002c4 g F UMF_ANDROID 0280 upx_mmap_and_fd_android
00000434 g ELFMAINZ 0 mmap 000001f8 g ELFMAINZ 0 mmap
00000000 g F UMF_LINUX 0144 upx_mmap_and_fd_linux 00000000 g F UMF_LINUX 0144 upx_mmap_and_fd_linux
000003c8 g ELFMAINZ 0 uname 0000018c g ELFMAINZ 0 uname
00000000 g ELFMAINY 0 end_decompress 00000000 g ELFMAINY 0 end_decompress
000003f0 g ELFMAINZ 0 write 000001b4 g ELFMAINZ 0 write
00000314 g ELFMAINZ 0 fdatasync 000000d8 g ELFMAINZ 0 fdatasync
00000264 g ELFMAINZ 0 get_upxfn_path 00000028 g ELFMAINZ 0 get_upxfn_path
000002cc g ELFMAINZ 0 memfd_create 00000090 g ELFMAINZ 0 memfd_create
00000004 g ELFMAINX 0 _start 00000004 g ELFMAINX 0 _start
000003a0 g ELFMAINZ 0 read 00000164 g ELFMAINZ 0 read
000003dc g ELFMAINZ 0 unlink 000001a0 g ELFMAINZ 0 unlink
00000290 g ELFMAINZ 0 memset 00000054 g ELFMAINZ 0 memset
00000194 g F ELFMAINX 0c4 ucl_nrv2b_decompress_8 000004c8 g F ELFMAINX2 0c4 ucl_nrv2b_decompress_8
0000042c g ELFMAINZ 0 my_bkpt 000001f0 g ELFMAINZ 0 my_bkpt
00000328 g ELFMAINZ 0 fsync 000000ec g ELFMAINZ 0 fsync
000003b4 g ELFMAINZ 0 stat 00000178 g ELFMAINZ 0 stat
0000047c g ELFMAINZ 0 cpr0 00000240 g ELFMAINZ 0 cpr0
00000300 g ELFMAINZ 0 exit 000000c4 g ELFMAINZ 0 exit
0000038c g ELFMAINZ 0 open 00000150 g ELFMAINZ 0 open
00000378 g ELFMAINZ 0 mkdir 0000013c g ELFMAINZ 0 mkdir
000002ec g ELFMAINZ 0 close 000000b0 g ELFMAINZ 0 close
RELOCATION RECORDS FOR [ELFSIGSEGV]:
OFFSET TYPE VALUE
00000000 R_ARM_PC24 ELFMAINX2
00000038 R_ARM_PC24 ELFSIGSEGV
RELOCATION RECORDS FOR [ELFMAINX2]:
OFFSET TYPE VALUE
00000004 R_ARM_PC24 ELFMAINX2
00000008 R_ARM_PC24 ELFMAINX2
00000014 R_ARM_PC24 ELFMAINX2
0000001c R_ARM_PC24 ELFMAINX2
00000030 R_ARM_PC24 ELFMAINZ
00000068 R_ARM_PC24 ELFMAINX2
00000078 R_ARM_PC24 upx_mmap_and_fd
00000080 R_ARM_PC24 ELFMAINX2
000000b0 R_ARM_PC24 ELFMAINX2
000000f0 R_ARM_PC24 ELFMAINX2
0000020c R_ARM_PC24 ELFMAINX2
00000238 R_ARM_PC24 ELFMAINX2
000003dc R_ARM_PC24 ELFMAINX2
000003f4 R_ARM_PC24 ELFMAINX2
0000041c R_ARM_PC24 ELFMAINX2
00000420 R_ARM_PC24 ELFMAINX2
0000042c R_ARM_PC24 ELFMAINX2
000004a0 R_ARM_PC24 ELFMAINX2
000004a4 R_ARM_PC24 ELFMAINX2
000004c0 R_ARM_PC24 ELFMAINX2
000004d8 R_ARM_PC24 ELFMAINX2
00000510 R_ARM_PC24 ELFMAINX2
00000518 R_ARM_PC24 ELFMAINX2
0000051c R_ARM_PC24 ELFMAINX2
0000052c R_ARM_PC24 ELFMAINX2
00000530 R_ARM_PC24 ELFMAINX2
00000534 R_ARM_PC24 ELFMAINX2
00000540 R_ARM_PC24 ELFMAINX2
00000550 R_ARM_PC24 ELFMAINX2
00000554 R_ARM_PC24 ELFMAINX2
0000055c R_ARM_PC24 ELFMAINX2
00000564 R_ARM_PC24 ELFMAINX2
00000568 R_ARM_PC24 ELFMAINX2
00000584 R_ARM_PC24 ELFMAINX2
00000588 R_ARM_PC24 ELFMAINX2
RELOCATION RECORDS FOR [HUMF_A]: RELOCATION RECORDS FOR [HUMF_A]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
@@ -171,32 +218,7 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000000 R_ARM_ABS32 MFLG 00000000 R_ARM_ABS32 MFLG
00000010 R_ARM_PC24 ELFMAINX
00000014 R_ARM_PC24 ELFMAINX 00000014 R_ARM_PC24 ELFMAINX
00000020 R_ARM_PC24 ELFMAINX
00000028 R_ARM_PC24 ELFMAINX
00000058 R_ARM_PC24 ELFMAINZ
00000090 R_ARM_PC24 ELFMAINX
000000a0 R_ARM_PC24 upx_mmap_and_fd
000000a8 R_ARM_PC24 ELFMAINX
000000d8 R_ARM_PC24 ELFMAINX
00000114 R_ARM_PC24 ELFMAINX
0000018c R_ARM_PC24 ELFMAINX
000001a4 R_ARM_PC24 ELFMAINX
000001dc R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001e8 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
000001fc R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
0000021c R_ARM_PC24 ELFMAINX
00000220 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000234 R_ARM_PC24 ELFMAINX
00000250 R_ARM_PC24 ELFMAINX
00000254 R_ARM_PC24 ELFMAINX
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
+10 -11
View File
@@ -7,24 +7,23 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0xcb8 .text 0x0000000000000000 0xcc0
.text 0x0000000000000000 0x398 tmp/arm.v4a-linux.elf-fold.o .text 0x0000000000000000 0x3a0 tmp/arm.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
0x0000000000000338 memcpy 0x0000000000000340 memcpy
0x0000000000000048 Psync 0x0000000000000048 Psync
0x000000000000037c mempcpy 0x0000000000000384 mempcpy
0x00000000000000b0 mmap 0x00000000000000b0 mmap
0x0000000000000098 mmap_privanon 0x0000000000000098 mmap_privanon
0x000000000000000c get_upxfn_path 0x000000000000000c get_upxfn_path
0x000000000000035c memset 0x0000000000000364 memset
0x00000000fffffff4 page_mask
0x0000000000000024 Pprotect 0x0000000000000024 Pprotect
0x0000000000000024 mprotect 0x0000000000000024 mprotect
.text 0x0000000000000398 0x0 tmp/arm.v4a-linux.elf-help_umf.o .text 0x00000000000003a0 0x0 tmp/arm.v4a-linux.elf-help_umf.o
.text 0x0000000000000398 0x0 tmp/arm.v4a-expand.o .text 0x00000000000003a0 0x0 tmp/arm.v4a-expand.o
.text 0x0000000000000398 0x920 tmp/arm.v4a-linux.elf-main2.o .text 0x00000000000003a0 0x920 tmp/arm.v4a-linux.elf-main2.o
0x0000000000000c54 underlay 0x0000000000000c5c underlay
0x0000000000000b24 upx_main 0x0000000000000b2c upx_main
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v4a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/arm.v4a-linux.elf-fold.o
+57 -35
View File
@@ -2,14 +2,18 @@ file format elf32-littlearm
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFSIGSEGV 05c 0 0 034 2**0 CONTENTS
1 ELFMAINZ 0218 0 0 034 2**0 CONTENTS 1 ELFMAINX2 0598 0 0 090 2**2 CONTENTS
2 HUMF_A 04 0 0 024c 2**0 CONTENTS 2 ELFMAINY 0 0 0 0628 2**0 CONTENTS
3 HUMF_L 04 0 0 0250 2**0 CONTENTS 3 ELFMAINZ 0218 0 0 0628 2**0 CONTENTS
4 UMF_ANDROID 054c 0 0 0254 2**2 CONTENTS 4 HUMF_A 04 0 0 0840 2**0 CONTENTS
5 UMF_LINUX 0140 0 0 07a0 2**2 CONTENTS 5 HUMF_L 04 0 0 0844 2**0 CONTENTS
6 ELFMAINX 0264 0 0 08e0 2**2 CONTENTS 6 UMF_ANDROID 054c 0 0 0848 2**2 CONTENTS
7 UMF_LINUX 0140 0 0 0d94 2**2 CONTENTS
8 ELFMAINX 028 0 0 0ed4 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d ELFSIGSEGV 0 ELFSIGSEGV
00000000 l d ELFMAINX2 0 ELFMAINX2
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d UMF_ANDROID 0 UMF_ANDROID 00000000 l d UMF_ANDROID 0 UMF_ANDROID
00000000 l d UMF_LINUX 0 UMF_LINUX 00000000 l d UMF_LINUX 0 UMF_LINUX
@@ -17,10 +21,10 @@ SYMBOL TABLE:
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 l d HUMF_A 0 HUMF_A 00000000 l d HUMF_A 0 HUMF_A
00000000 l d HUMF_L 0 HUMF_L 00000000 l d HUMF_L 0 HUMF_L
00000258 g ELFMAINX 0 get_page_mask 0000058c g ELFMAINX2 0 get_page_mask
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
000000ec g ELFMAINZ 0 getpid 000000ec g ELFMAINZ 0 getpid
00000264 g ELFMAINX 0 upx_mmap_and_fd 00000598 g ELFMAINX2 0 upx_mmap_and_fd
00000008 g ELFMAINZ 0 memcpy 00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
000001a0 g ELFMAINZ 0 Psync 000001a0 g ELFMAINZ 0 Psync
@@ -40,7 +44,7 @@ SYMBOL TABLE:
0000013c g ELFMAINZ 0 read 0000013c g ELFMAINZ 0 read
00000178 g ELFMAINZ 0 unlink 00000178 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset 0000002c g ELFMAINZ 0 memset
00000194 g F ELFMAINX 0c4 ucl_nrv2b_decompress_8 000004c8 g F ELFMAINX2 0c4 ucl_nrv2b_decompress_8
000001c8 g ELFMAINZ 0 my_bkpt 000001c8 g ELFMAINZ 0 my_bkpt
000000c4 g ELFMAINZ 0 fsync 000000c4 g ELFMAINZ 0 fsync
00000150 g ELFMAINZ 0 stat 00000150 g ELFMAINZ 0 stat
@@ -50,6 +54,49 @@ SYMBOL TABLE:
00000114 g ELFMAINZ 0 mkdir 00000114 g ELFMAINZ 0 mkdir
00000088 g ELFMAINZ 0 close 00000088 g ELFMAINZ 0 close
RELOCATION RECORDS FOR [ELFSIGSEGV]:
OFFSET TYPE VALUE
00000000 R_ARM_PC24 ELFMAINX2
00000038 R_ARM_PC24 ELFSIGSEGV
RELOCATION RECORDS FOR [ELFMAINX2]:
OFFSET TYPE VALUE
00000004 R_ARM_PC24 ELFMAINX2
00000008 R_ARM_PC24 ELFMAINX2
00000014 R_ARM_PC24 ELFMAINX2
0000001c R_ARM_PC24 ELFMAINX2
00000030 R_ARM_PC24 ELFMAINZ
00000068 R_ARM_PC24 ELFMAINX2
00000078 R_ARM_PC24 upx_mmap_and_fd
00000080 R_ARM_PC24 ELFMAINX2
000000b0 R_ARM_PC24 ELFMAINX2
000000f0 R_ARM_PC24 ELFMAINX2
0000020c R_ARM_PC24 ELFMAINX2
00000238 R_ARM_PC24 ELFMAINX2
000003dc R_ARM_PC24 ELFMAINX2
000003f4 R_ARM_PC24 ELFMAINX2
0000041c R_ARM_PC24 ELFMAINX2
00000420 R_ARM_PC24 ELFMAINX2
0000042c R_ARM_PC24 ELFMAINX2
000004a0 R_ARM_PC24 ELFMAINX2
000004a4 R_ARM_PC24 ELFMAINX2
000004c0 R_ARM_PC24 ELFMAINX2
000004d8 R_ARM_PC24 ELFMAINX2
00000510 R_ARM_PC24 ELFMAINX2
00000518 R_ARM_PC24 ELFMAINX2
0000051c R_ARM_PC24 ELFMAINX2
0000052c R_ARM_PC24 ELFMAINX2
00000530 R_ARM_PC24 ELFMAINX2
00000534 R_ARM_PC24 ELFMAINX2
00000540 R_ARM_PC24 ELFMAINX2
00000550 R_ARM_PC24 ELFMAINX2
00000554 R_ARM_PC24 ELFMAINX2
0000055c R_ARM_PC24 ELFMAINX2
00000564 R_ARM_PC24 ELFMAINX2
00000568 R_ARM_PC24 ELFMAINX2
00000584 R_ARM_PC24 ELFMAINX2
00000588 R_ARM_PC24 ELFMAINX2
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000c R_ARM_PC24 ELFMAINZ 0000000c R_ARM_PC24 ELFMAINZ
@@ -183,29 +230,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000000 R_ARM_ABS32 MFLG 00000000 R_ARM_ABS32 MFLG
00000010 R_ARM_PC24 ELFMAINX
00000014 R_ARM_PC24 ELFMAINX 00000014 R_ARM_PC24 ELFMAINX
00000020 R_ARM_PC24 ELFMAINX
00000028 R_ARM_PC24 ELFMAINX
00000058 R_ARM_PC24 ELFMAINZ
00000090 R_ARM_PC24 ELFMAINX
000000a0 R_ARM_PC24 upx_mmap_and_fd
000000a8 R_ARM_PC24 ELFMAINX
000000d8 R_ARM_PC24 ELFMAINX
00000114 R_ARM_PC24 ELFMAINX
0000018c R_ARM_PC24 ELFMAINX
000001a4 R_ARM_PC24 ELFMAINX
000001dc R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001e8 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
000001fc R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
0000021c R_ARM_PC24 ELFMAINX
00000220 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000234 R_ARM_PC24 ELFMAINX
00000250 R_ARM_PC24 ELFMAINX
00000254 R_ARM_PC24 ELFMAINX
+10 -11
View File
@@ -7,24 +7,23 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0xcb8 .text 0x0000000000000000 0xcc0
.text 0x0000000000000000 0x398 tmp/arm.v5a-linux.elf-fold.o .text 0x0000000000000000 0x3a0 tmp/arm.v5a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
0x0000000000000338 memcpy 0x0000000000000340 memcpy
0x0000000000000048 Psync 0x0000000000000048 Psync
0x000000000000037c mempcpy 0x0000000000000384 mempcpy
0x00000000000000b0 mmap 0x00000000000000b0 mmap
0x0000000000000098 mmap_privanon 0x0000000000000098 mmap_privanon
0x000000000000000c get_upxfn_path 0x000000000000000c get_upxfn_path
0x000000000000035c memset 0x0000000000000364 memset
0x00000000fffffff4 page_mask
0x0000000000000024 Pprotect 0x0000000000000024 Pprotect
0x0000000000000024 mprotect 0x0000000000000024 mprotect
.text 0x0000000000000398 0x0 tmp/arm.v5a-linux.elf-help_umf.o .text 0x00000000000003a0 0x0 tmp/arm.v5a-linux.elf-help_umf.o
.text 0x0000000000000398 0x0 tmp/arm.v5a-expand.o .text 0x00000000000003a0 0x0 tmp/arm.v5a-expand.o
.text 0x0000000000000398 0x920 tmp/arm.v5a-linux.elf-main2.o .text 0x00000000000003a0 0x920 tmp/arm.v5a-linux.elf-main2.o
0x0000000000000c54 underlay 0x0000000000000c5c underlay
0x0000000000000b24 upx_main 0x0000000000000b2c upx_main
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/arm.v5a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/arm.v5a-linux.elf-fold.o
+17 -8
View File
@@ -2,25 +2,34 @@ file format elf64-littleaarch64
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0228 0 0 040 2**2 CONTENTS 0 ELFMAINX 010 0 0 040 2**0 CONTENTS
1 ELFMAINY 0 0 0 0268 2**0 CONTENTS 1 ELFSIGSEGV 0378 0 0 050 2**2 CONTENTS
2 ELFMAINZ 01c 0 0 0268 2**2 CONTENTS 2 ELFMAINX2 0234 0 0 03c8 2**2 CONTENTS
3 ELFMAINY 0 0 0 05fc 2**0 CONTENTS
4 ELFMAINZ 0c 0 0 05fc 2**2 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX 0000000000000000 l d ELFMAINX 0 ELFMAINX
0000000000000000 l d ELFMAINX2 0 ELFMAINX2
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFSIGSEGV 0 ELFSIGSEGV
0000000000000000 l d ELFMAINY 0 ELFMAINY 0000000000000000 l d ELFMAINY 0 ELFMAINY
0000000000000000 *UND* 0 MFLG 0000000000000000 *UND* 0 MFLG
0000000000000004 g ELFMAINX 0 _start 0000000000000004 g ELFMAINX 0 _start
000000000000014c g F ELFMAINX 0dc ucl_nrv2b_decompress_32 0000000000000158 g F ELFMAINX2 0dc ucl_nrv2b_decompress_32
0000000000000000 g ELFMAINY 0 end_decompress 0000000000000000 g ELFMAINY 0 end_decompress
0000000000000000 *UND* 0 O_BINFO 0000000000000000 *UND* 0 O_BINFO
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000000 R_AARCH64_ABS32 MFLG 0000000000000000 R_AARCH64_ABS32 MFLG
000000000000003c R_AARCH64_CALL26 ELFMAINZ+0x0000000000000004 000000000000000c R_AARCH64_ADR_PREL_LO21 ELFMAINX2+0x0000000000000148
0000000000000048 R_AARCH64_ADR_PREL_LO21 ELFMAINZ
RELOCATION RECORDS FOR [ELFMAINX2]:
OFFSET TYPE VALUE
0000000000000030 R_AARCH64_ADR_PREL_LO21 ELFMAINX-0x0000000000000004
0000000000000040 R_AARCH64_CALL26 ELFMAINZ+0x0000000000000004
000000000000004c R_AARCH64_ADR_PREL_LO21 ELFMAINZ
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000018 R_AARCH64_ABS32 O_BINFO 0000000000000008 R_AARCH64_ABS32 O_BINFO
+13 -13
View File
@@ -12,19 +12,19 @@ LOAD tmp/arm64-expand.o
LOAD tmp/arm64-linux.elf-main2.o LOAD tmp/arm64-linux.elf-main2.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64) OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.text 0x0000000000000000 0xb84 .text 0x0000000000000000 0xb94
.text 0x0000000000000000 0x2c4 tmp/arm64-linux.elf-fold.o .text 0x0000000000000000 0x2d4 tmp/arm64-linux.elf-fold.o
0x0000000000000008 get_page_mask 0x0000000000000010 get_page_mask
0x0000000000000018 mmap_privanon 0x0000000000000020 mmap_privanon
0x0000000000000028 Psync 0x0000000000000030 Psync
0x0000000000000098 msync 0x00000000000000a0 msync
0x00000000000000a4 mmap 0x00000000000000ac mmap
0x00000000000000c0 Pprotect 0x00000000000000c8 Pprotect
0x00000000000000c0 mprotect 0x00000000000000c8 mprotect
.text 0x00000000000002c4 0x0 tmp/arm64-expand.o .text 0x00000000000002d4 0x0 tmp/arm64-expand.o
.text 0x00000000000002c4 0x8c0 tmp/arm64-linux.elf-main2.o .text 0x00000000000002d4 0x8c0 tmp/arm64-linux.elf-main2.o
0x00000000000009e0 underlay 0x00000000000009f0 underlay
0x0000000000000a4c upx_main2 0x0000000000000a5c upx_main2
.data 0x0000000000000000 0x0 .data 0x0000000000000000 0x0
.data 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o .data 0x0000000000000000 0x0 tmp/arm64-linux.elf-fold.o
+57 -35
View File
@@ -2,14 +2,18 @@ file format elf32-bigarm
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINY 0 0 0 034 2**0 CONTENTS 0 ELFSIGSEGV 05c 0 0 034 2**0 CONTENTS
1 ELFMAINZ 0218 0 0 034 2**0 CONTENTS 1 ELFMAINX2 0598 0 0 090 2**2 CONTENTS
2 HUMF_A 04 0 0 024c 2**0 CONTENTS 2 ELFMAINY 0 0 0 0628 2**0 CONTENTS
3 HUMF_L 04 0 0 0250 2**0 CONTENTS 3 ELFMAINZ 0218 0 0 0628 2**0 CONTENTS
4 UMF_ANDROID 0544 0 0 0254 2**2 CONTENTS 4 HUMF_A 04 0 0 0840 2**0 CONTENTS
5 UMF_LINUX 0144 0 0 0798 2**2 CONTENTS 5 HUMF_L 04 0 0 0844 2**0 CONTENTS
6 ELFMAINX 0264 0 0 08dc 2**2 CONTENTS 6 UMF_ANDROID 0544 0 0 0848 2**2 CONTENTS
7 UMF_LINUX 0144 0 0 0d8c 2**2 CONTENTS
8 ELFMAINX 028 0 0 0ed0 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d ELFSIGSEGV 0 ELFSIGSEGV
00000000 l d ELFMAINX2 0 ELFMAINX2
00000000 l d ELFMAINZ 0 ELFMAINZ 00000000 l d ELFMAINZ 0 ELFMAINZ
00000000 l d UMF_ANDROID 0 UMF_ANDROID 00000000 l d UMF_ANDROID 0 UMF_ANDROID
00000000 l d UMF_LINUX 0 UMF_LINUX 00000000 l d UMF_LINUX 0 UMF_LINUX
@@ -17,10 +21,10 @@ SYMBOL TABLE:
00000000 l d ELFMAINY 0 ELFMAINY 00000000 l d ELFMAINY 0 ELFMAINY
00000000 l d HUMF_A 0 HUMF_A 00000000 l d HUMF_A 0 HUMF_A
00000000 l d HUMF_L 0 HUMF_L 00000000 l d HUMF_L 0 HUMF_L
00000258 g ELFMAINX 0 get_page_mask 0000058c g ELFMAINX2 0 get_page_mask
00000000 *UND* 0 MFLG 00000000 *UND* 0 MFLG
000000ec g ELFMAINZ 0 getpid 000000ec g ELFMAINZ 0 getpid
00000264 g ELFMAINX 0 upx_mmap_and_fd 00000598 g ELFMAINX2 0 upx_mmap_and_fd
00000008 g ELFMAINZ 0 memcpy 00000008 g ELFMAINZ 0 memcpy
00000000 *UND* 0 O_BINFO 00000000 *UND* 0 O_BINFO
000001a0 g ELFMAINZ 0 Psync 000001a0 g ELFMAINZ 0 Psync
@@ -40,7 +44,7 @@ SYMBOL TABLE:
0000013c g ELFMAINZ 0 read 0000013c g ELFMAINZ 0 read
00000178 g ELFMAINZ 0 unlink 00000178 g ELFMAINZ 0 unlink
0000002c g ELFMAINZ 0 memset 0000002c g ELFMAINZ 0 memset
00000194 g F ELFMAINX 0c4 ucl_nrv2b_decompress_8 000004c8 g F ELFMAINX2 0c4 ucl_nrv2b_decompress_8
000001c8 g ELFMAINZ 0 my_bkpt 000001c8 g ELFMAINZ 0 my_bkpt
000000c4 g ELFMAINZ 0 fsync 000000c4 g ELFMAINZ 0 fsync
00000150 g ELFMAINZ 0 stat 00000150 g ELFMAINZ 0 stat
@@ -50,6 +54,49 @@ SYMBOL TABLE:
00000114 g ELFMAINZ 0 mkdir 00000114 g ELFMAINZ 0 mkdir
00000088 g ELFMAINZ 0 close 00000088 g ELFMAINZ 0 close
RELOCATION RECORDS FOR [ELFSIGSEGV]:
OFFSET TYPE VALUE
00000000 R_ARM_PC24 ELFMAINX2
00000038 R_ARM_PC24 ELFSIGSEGV
RELOCATION RECORDS FOR [ELFMAINX2]:
OFFSET TYPE VALUE
00000004 R_ARM_PC24 ELFMAINX2
00000008 R_ARM_PC24 ELFMAINX2
00000014 R_ARM_PC24 ELFMAINX2
0000001c R_ARM_PC24 ELFMAINX2
00000030 R_ARM_PC24 ELFMAINZ
00000068 R_ARM_PC24 ELFMAINX2
00000078 R_ARM_PC24 upx_mmap_and_fd
00000080 R_ARM_PC24 ELFMAINX2
000000b0 R_ARM_PC24 ELFMAINX2
000000f0 R_ARM_PC24 ELFMAINX2
0000020c R_ARM_PC24 ELFMAINX2
00000238 R_ARM_PC24 ELFMAINX2
000003dc R_ARM_PC24 ELFMAINX2
000003f4 R_ARM_PC24 ELFMAINX2
0000041c R_ARM_PC24 ELFMAINX2
00000420 R_ARM_PC24 ELFMAINX2
0000042c R_ARM_PC24 ELFMAINX2
000004a0 R_ARM_PC24 ELFMAINX2
000004a4 R_ARM_PC24 ELFMAINX2
000004c0 R_ARM_PC24 ELFMAINX2
000004d8 R_ARM_PC24 ELFMAINX2
00000510 R_ARM_PC24 ELFMAINX2
00000518 R_ARM_PC24 ELFMAINX2
0000051c R_ARM_PC24 ELFMAINX2
0000052c R_ARM_PC24 ELFMAINX2
00000530 R_ARM_PC24 ELFMAINX2
00000534 R_ARM_PC24 ELFMAINX2
00000540 R_ARM_PC24 ELFMAINX2
00000550 R_ARM_PC24 ELFMAINX2
00000554 R_ARM_PC24 ELFMAINX2
0000055c R_ARM_PC24 ELFMAINX2
00000564 R_ARM_PC24 ELFMAINX2
00000568 R_ARM_PC24 ELFMAINX2
00000584 R_ARM_PC24 ELFMAINX2
00000588 R_ARM_PC24 ELFMAINX2
RELOCATION RECORDS FOR [ELFMAINZ]: RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000c R_ARM_PC24 ELFMAINZ 0000000c R_ARM_PC24 ELFMAINZ
@@ -181,29 +228,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINX]: RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000000 R_ARM_ABS32 MFLG 00000000 R_ARM_ABS32 MFLG
00000010 R_ARM_PC24 ELFMAINX
00000014 R_ARM_PC24 ELFMAINX 00000014 R_ARM_PC24 ELFMAINX
00000020 R_ARM_PC24 ELFMAINX
00000028 R_ARM_PC24 ELFMAINX
00000058 R_ARM_PC24 ELFMAINZ
00000090 R_ARM_PC24 ELFMAINX
000000a0 R_ARM_PC24 upx_mmap_and_fd
000000a8 R_ARM_PC24 ELFMAINX
000000d8 R_ARM_PC24 ELFMAINX
00000114 R_ARM_PC24 ELFMAINX
0000018c R_ARM_PC24 ELFMAINX
000001a4 R_ARM_PC24 ELFMAINX
000001dc R_ARM_PC24 ELFMAINX
000001e4 R_ARM_PC24 ELFMAINX
000001e8 R_ARM_PC24 ELFMAINX
000001f8 R_ARM_PC24 ELFMAINX
000001fc R_ARM_PC24 ELFMAINX
00000200 R_ARM_PC24 ELFMAINX
0000020c R_ARM_PC24 ELFMAINX
0000021c R_ARM_PC24 ELFMAINX
00000220 R_ARM_PC24 ELFMAINX
00000228 R_ARM_PC24 ELFMAINX
00000230 R_ARM_PC24 ELFMAINX
00000234 R_ARM_PC24 ELFMAINX
00000250 R_ARM_PC24 ELFMAINX
00000254 R_ARM_PC24 ELFMAINX
+10 -11
View File
@@ -7,24 +7,23 @@ Name Origin Length Attributes
Linker script and memory map Linker script and memory map
.text 0x0000000000000000 0xccc .text 0x0000000000000000 0xcd4
.text 0x0000000000000000 0x398 tmp/armeb.v4a-linux.elf-fold.o .text 0x0000000000000000 0x3a0 tmp/armeb.v4a-linux.elf-fold.o
0x0000000000000004 get_page_mask 0x0000000000000004 get_page_mask
0x0000000000000338 memcpy 0x0000000000000340 memcpy
0x0000000000000048 Psync 0x0000000000000048 Psync
0x000000000000037c mempcpy 0x0000000000000384 mempcpy
0x00000000000000b0 mmap 0x00000000000000b0 mmap
0x0000000000000098 mmap_privanon 0x0000000000000098 mmap_privanon
0x000000000000000c get_upxfn_path 0x000000000000000c get_upxfn_path
0x000000000000035c memset 0x0000000000000364 memset
0x00000000fffffff4 page_mask
0x0000000000000024 Pprotect 0x0000000000000024 Pprotect
0x0000000000000024 mprotect 0x0000000000000024 mprotect
.text 0x0000000000000398 0x0 tmp/armeb.v4a-linux.elf-help_umf.o .text 0x00000000000003a0 0x0 tmp/armeb.v4a-linux.elf-help_umf.o
.text 0x0000000000000398 0x0 tmp/armeb.v4a-expand.o .text 0x00000000000003a0 0x0 tmp/armeb.v4a-expand.o
.text 0x0000000000000398 0x934 tmp/armeb.v4a-linux.elf-main2.o .text 0x00000000000003a0 0x934 tmp/armeb.v4a-linux.elf-main2.o
0x0000000000000c68 underlay 0x0000000000000c70 underlay
0x0000000000000b34 upx_main 0x0000000000000b3c upx_main
SYSCALLS 0x0000000000000000 0x214 SYSCALLS 0x0000000000000000 0x214
SYSCALLS 0x0000000000000000 0x214 tmp/armeb.v4a-linux.elf-fold.o SYSCALLS 0x0000000000000000 0x214 tmp/armeb.v4a-linux.elf-fold.o
+124 -124
View File
@@ -3,130 +3,130 @@ file format elf32-i386
Sections: Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 PEISDLL1 0b 0 0 034 2**0 CONTENTS 0 PEISDLL1 0b 0 0 034 2**0 CONTENTS
1 PEMAIN01 01 0 0 03f 2**0 CONTENTS 1 PEMAIN01 08 0 0 03f 2**0 CONTENTS
2 PESOCREL 05 0 0 040 2**0 CONTENTS 2 PESOCREL 05 0 0 047 2**0 CONTENTS
3 PESOCPIC 0c 0 0 045 2**0 CONTENTS 3 PESOCPIC 0c 0 0 04c 2**0 CONTENTS
4 PESOUNC0 06 0 0 051 2**0 CONTENTS 4 PESOUNC0 06 0 0 058 2**0 CONTENTS
5 PEICONS1 07 0 0 057 2**0 CONTENTS 5 PEICONS1 07 0 0 05e 2**0 CONTENTS
6 PEICONS2 09 0 0 05e 2**0 CONTENTS 6 PEICONS2 09 0 0 065 2**0 CONTENTS
7 PETLSHAK 0f 0 0 067 2**0 CONTENTS 7 PETLSHAK 0f 0 0 06e 2**0 CONTENTS
8 PEMAIN02 01 0 0 076 2**0 CONTENTS 8 PEMAIN02 01 0 0 07d 2**0 CONTENTS
9 PEMAIN03 03 0 0 077 2**0 CONTENTS 9 PEMAIN03 03 0 0 07e 2**0 CONTENTS
10 N2BSMA10 03 0 0 07a 2**0 CONTENTS 10 N2BSMA10 03 0 0 081 2**0 CONTENTS
11 N2BFAS10 02 0 0 07d 2**0 CONTENTS 11 N2BFAS10 02 0 0 084 2**0 CONTENTS
12 N2BFAS11 06 0 0 07f 2**0 CONTENTS 12 N2BFAS11 06 0 0 086 2**0 CONTENTS
13 N2BDEC10 0b 0 0 085 2**0 CONTENTS 13 N2BDEC10 0b 0 0 08c 2**0 CONTENTS
14 N2BSMA20 05 0 0 090 2**0 CONTENTS 14 N2BSMA20 05 0 0 097 2**0 CONTENTS
15 N2BFAS20 07 0 0 095 2**0 CONTENTS 15 N2BFAS20 07 0 0 09c 2**0 CONTENTS
16 N2BDEC20 0d 0 0 09c 2**0 CONTENTS 16 N2BDEC20 0d 0 0 0a3 2**0 CONTENTS
17 N2BSMA30 0d 0 0 0a9 2**0 CONTENTS 17 N2BSMA30 0d 0 0 0b0 2**0 CONTENTS
18 N2BFAS30 0f 0 0 0b6 2**0 CONTENTS 18 N2BFAS30 0f 0 0 0bd 2**0 CONTENTS
19 N2BDEC30 03e 0 0 0c5 2**0 CONTENTS 19 N2BDEC30 03e 0 0 0cc 2**0 CONTENTS
20 N2BSMA40 0d 0 0 0103 2**0 CONTENTS 20 N2BSMA40 0d 0 0 010a 2**0 CONTENTS
21 N2BFAS40 0f 0 0 0110 2**0 CONTENTS 21 N2BFAS40 0f 0 0 0117 2**0 CONTENTS
22 N2BSMA50 02 0 0 011f 2**0 CONTENTS 22 N2BSMA50 02 0 0 0126 2**0 CONTENTS
23 N2BFAS50 03 0 0 0121 2**0 CONTENTS 23 N2BFAS50 03 0 0 0128 2**0 CONTENTS
24 N2BDEC50 09 0 0 0124 2**0 CONTENTS 24 N2BDEC50 09 0 0 012b 2**0 CONTENTS
25 N2BSMA60 0e 0 0 012d 2**0 CONTENTS 25 N2BSMA60 0e 0 0 0134 2**0 CONTENTS
26 N2BFAS60 016 0 0 013b 2**0 CONTENTS 26 N2BFAS60 016 0 0 0142 2**0 CONTENTS
27 N2BFAS61 016 0 0 0151 2**0 CONTENTS 27 N2BFAS61 016 0 0 0158 2**0 CONTENTS
28 N2BDEC60 0 0 0 0167 2**0 CONTENTS 28 N2BDEC60 0 0 0 016e 2**0 CONTENTS
29 N2DSMA10 03 0 0 0167 2**0 CONTENTS 29 N2DSMA10 03 0 0 016e 2**0 CONTENTS
30 N2DFAS10 02 0 0 016a 2**0 CONTENTS 30 N2DFAS10 02 0 0 0171 2**0 CONTENTS
31 N2DFAS11 06 0 0 016c 2**0 CONTENTS 31 N2DFAS11 06 0 0 0173 2**0 CONTENTS
32 N2DDEC10 0b 0 0 0172 2**0 CONTENTS 32 N2DDEC10 0b 0 0 0179 2**0 CONTENTS
33 N2DSMA20 05 0 0 017d 2**0 CONTENTS 33 N2DSMA20 05 0 0 0184 2**0 CONTENTS
34 N2DFAS20 07 0 0 0182 2**0 CONTENTS 34 N2DFAS20 07 0 0 0189 2**0 CONTENTS
35 N2DDEC20 0d 0 0 0189 2**0 CONTENTS 35 N2DDEC20 0d 0 0 0190 2**0 CONTENTS
36 N2DSMA30 0d 0 0 0196 2**0 CONTENTS 36 N2DSMA30 0d 0 0 019d 2**0 CONTENTS
37 N2DFAS30 0f 0 0 01a3 2**0 CONTENTS 37 N2DFAS30 0f 0 0 01aa 2**0 CONTENTS
38 N2DDEC30 052 0 0 01b2 2**0 CONTENTS 38 N2DDEC30 052 0 0 01b9 2**0 CONTENTS
39 N2DSMA40 0d 0 0 0204 2**0 CONTENTS 39 N2DSMA40 0d 0 0 020b 2**0 CONTENTS
40 N2DFAS40 0f 0 0 0211 2**0 CONTENTS 40 N2DFAS40 0f 0 0 0218 2**0 CONTENTS
41 N2DSMA50 02 0 0 0220 2**0 CONTENTS 41 N2DSMA50 02 0 0 0227 2**0 CONTENTS
42 N2DFAS50 03 0 0 0222 2**0 CONTENTS 42 N2DFAS50 03 0 0 0229 2**0 CONTENTS
43 N2DDEC50 09 0 0 0225 2**0 CONTENTS 43 N2DDEC50 09 0 0 022c 2**0 CONTENTS
44 N2DSMA60 0e 0 0 022e 2**0 CONTENTS 44 N2DSMA60 0e 0 0 0235 2**0 CONTENTS
45 N2DFAS60 016 0 0 023c 2**0 CONTENTS 45 N2DFAS60 016 0 0 0243 2**0 CONTENTS
46 N2DFAS61 016 0 0 0252 2**0 CONTENTS 46 N2DFAS61 016 0 0 0259 2**0 CONTENTS
47 N2DDEC60 0 0 0 0268 2**0 CONTENTS 47 N2DDEC60 0 0 0 026f 2**0 CONTENTS
48 N2ESMA10 03 0 0 0268 2**0 CONTENTS 48 N2ESMA10 03 0 0 026f 2**0 CONTENTS
49 N2EFAS10 02 0 0 026b 2**0 CONTENTS 49 N2EFAS10 02 0 0 0272 2**0 CONTENTS
50 N2EFAS11 06 0 0 026d 2**0 CONTENTS 50 N2EFAS11 06 0 0 0274 2**0 CONTENTS
51 N2EDEC10 0b 0 0 0273 2**0 CONTENTS 51 N2EDEC10 0b 0 0 027a 2**0 CONTENTS
52 N2ESMA20 05 0 0 027e 2**0 CONTENTS 52 N2ESMA20 05 0 0 0285 2**0 CONTENTS
53 N2EFAS20 07 0 0 0283 2**0 CONTENTS 53 N2EFAS20 07 0 0 028a 2**0 CONTENTS
54 N2EDEC20 0d 0 0 028a 2**0 CONTENTS 54 N2EDEC20 0d 0 0 0291 2**0 CONTENTS
55 N2ESMA30 0d 0 0 0297 2**0 CONTENTS 55 N2ESMA30 0d 0 0 029e 2**0 CONTENTS
56 N2EFAS30 0f 0 0 02a4 2**0 CONTENTS 56 N2EFAS30 0f 0 0 02ab 2**0 CONTENTS
57 N2EDEC30 05f 0 0 02b3 2**0 CONTENTS 57 N2EDEC30 05f 0 0 02ba 2**0 CONTENTS
58 N2ESMA40 0d 0 0 0312 2**0 CONTENTS 58 N2ESMA40 0d 0 0 0319 2**0 CONTENTS
59 N2EFAS40 0f 0 0 031f 2**0 CONTENTS 59 N2EFAS40 0f 0 0 0326 2**0 CONTENTS
60 N2ESMA50 02 0 0 032e 2**0 CONTENTS 60 N2ESMA50 02 0 0 0335 2**0 CONTENTS
61 N2EFAS50 03 0 0 0330 2**0 CONTENTS 61 N2EFAS50 03 0 0 0337 2**0 CONTENTS
62 N2EDEC50 09 0 0 0333 2**0 CONTENTS 62 N2EDEC50 09 0 0 033a 2**0 CONTENTS
63 N2ESMA60 0e 0 0 033c 2**0 CONTENTS 63 N2ESMA60 0e 0 0 0343 2**0 CONTENTS
64 N2EFAS60 016 0 0 034a 2**0 CONTENTS 64 N2EFAS60 016 0 0 0351 2**0 CONTENTS
65 N2EFAS61 016 0 0 0360 2**0 CONTENTS 65 N2EFAS61 016 0 0 0367 2**0 CONTENTS
66 N2EDEC60 0 0 0 0376 2**0 CONTENTS 66 N2EDEC60 0 0 0 037d 2**0 CONTENTS
67 LZMA_DEC00 02e 0 0 0376 2**0 CONTENTS 67 LZMA_DEC00 02e 0 0 037d 2**0 CONTENTS
68 LZMA_ELF00 048 0 0 03a4 2**0 CONTENTS 68 LZMA_ELF00 048 0 0 03ab 2**0 CONTENTS
69 LZMA_DEC10 0b3e 0 0 03ec 2**0 CONTENTS 69 LZMA_DEC10 0b3e 0 0 03f3 2**0 CONTENTS
70 LZMA_DEC20 0b3e 0 0 0f2a 2**0 CONTENTS 70 LZMA_DEC20 0b3e 0 0 0f31 2**0 CONTENTS
71 LZMA_DEC30 01a 0 0 01a68 2**0 CONTENTS 71 LZMA_DEC30 01a 0 0 01a6f 2**0 CONTENTS
72 PEMAIN10 01 0 0 01a82 2**0 CONTENTS 72 PEMAIN10 01 0 0 01a89 2**0 CONTENTS
73 PETLSHAK2 04 0 0 01a83 2**0 CONTENTS 73 PETLSHAK2 04 0 0 01a8a 2**0 CONTENTS
74 PECTTPOS 06 0 0 01a87 2**0 CONTENTS 74 PECTTPOS 06 0 0 01a8e 2**0 CONTENTS
75 PECTTNUL 02 0 0 01a8d 2**0 CONTENTS 75 PECTTNUL 02 0 0 01a94 2**0 CONTENTS
76 CALLTR00 0e 0 0 01a8f 2**0 CONTENTS 76 CALLTR00 0e 0 0 01a96 2**0 CONTENTS
77 CTCLEVE1 05 0 0 01a9d 2**0 CONTENTS 77 CTCLEVE1 05 0 0 01aa4 2**0 CONTENTS
78 CALLTR01 05 0 0 01aa2 2**0 CONTENTS 78 CALLTR01 05 0 0 01aa9 2**0 CONTENTS
79 CTBSHR01 04 0 0 01aa7 2**0 CONTENTS 79 CTBSHR01 04 0 0 01aae 2**0 CONTENTS
80 CTBROR01 02 0 0 01aab 2**0 CONTENTS 80 CTBROR01 02 0 0 01ab2 2**0 CONTENTS
81 CTBSWA01 05 0 0 01aad 2**0 CONTENTS 81 CTBSWA01 05 0 0 01ab4 2**0 CONTENTS
82 CALLTR02 010 0 0 01ab2 2**0 CONTENTS 82 CALLTR02 010 0 0 01ab9 2**0 CONTENTS
83 CALLTR10 05 0 0 01ac2 2**0 CONTENTS 83 CALLTR10 05 0 0 01ac9 2**0 CONTENTS
84 CALLTRE8 02 0 0 01ac7 2**0 CONTENTS 84 CALLTRE8 02 0 0 01ace 2**0 CONTENTS
85 CALLTRE9 02 0 0 01ac9 2**0 CONTENTS 85 CALLTRE9 02 0 0 01ad0 2**0 CONTENTS
86 CALLTR11 04 0 0 01acb 2**0 CONTENTS 86 CALLTR11 04 0 0 01ad2 2**0 CONTENTS
87 CTCLEVE2 05 0 0 01acf 2**0 CONTENTS 87 CTCLEVE2 05 0 0 01ad6 2**0 CONTENTS
88 CALLTR12 02 0 0 01ad4 2**0 CONTENTS 88 CALLTR12 02 0 0 01adb 2**0 CONTENTS
89 CTBSHR11 04 0 0 01ad6 2**0 CONTENTS 89 CTBSHR11 04 0 0 01add 2**0 CONTENTS
90 CTBROR11 02 0 0 01ada 2**0 CONTENTS 90 CTBROR11 02 0 0 01ae1 2**0 CONTENTS
91 CTBSWA11 05 0 0 01adc 2**0 CONTENTS 91 CTBSWA11 05 0 0 01ae3 2**0 CONTENTS
92 CALLTR13 07 0 0 01ae1 2**0 CONTENTS 92 CALLTR13 07 0 0 01ae8 2**0 CONTENTS
93 ctok32.00 0a 0 0 01ae8 2**0 CONTENTS 93 ctok32.00 0a 0 0 01aef 2**0 CONTENTS
94 ctok32.10 0e 0 0 01af2 2**0 CONTENTS 94 ctok32.10 0e 0 0 01af9 2**0 CONTENTS
95 ctok32.20 020 0 0 01b00 2**0 CONTENTS 95 ctok32.20 020 0 0 01b07 2**0 CONTENTS
96 ctok32.30 0a 0 0 01b20 2**0 CONTENTS 96 ctok32.30 0a 0 0 01b27 2**0 CONTENTS
97 ctok32.40 05 0 0 01b2a 2**0 CONTENTS 97 ctok32.40 05 0 0 01b31 2**0 CONTENTS
98 PEIMPORT 02c 0 0 01b2f 2**0 CONTENTS 98 PEIMPORT 02c 0 0 01b36 2**0 CONTENTS
99 PEIBYORD 02 0 0 01b5b 2**0 CONTENTS 99 PEIBYORD 02 0 0 01b62 2**0 CONTENTS
100 PEK32ORD 010 0 0 01b5d 2**0 CONTENTS 100 PEK32ORD 010 0 0 01b64 2**0 CONTENTS
101 PEIMORD1 07 0 0 01b6d 2**0 CONTENTS 101 PEIMORD1 07 0 0 01b74 2**0 CONTENTS
102 PEIMPOR2 016 0 0 01b74 2**0 CONTENTS 102 PEIMPOR2 016 0 0 01b7b 2**0 CONTENTS
103 PEIERDLL 06 0 0 01b8a 2**0 CONTENTS 103 PEIERDLL 06 0 0 01b91 2**0 CONTENTS
104 PEIEREXE 06 0 0 01b90 2**0 CONTENTS 104 PEIEREXE 06 0 0 01b97 2**0 CONTENTS
105 PEIMDONE 0 0 0 01b96 2**0 CONTENTS 105 PEIMDONE 0 0 0 01b9d 2**0 CONTENTS
106 PERELOC1 06 0 0 01b96 2**0 CONTENTS 106 PERELOC1 06 0 0 01b9d 2**0 CONTENTS
107 PERELOC2 03 0 0 01b9c 2**0 CONTENTS 107 PERELOC2 03 0 0 01ba3 2**0 CONTENTS
108 PERELOC3 03 0 0 01b9f 2**0 CONTENTS 108 PERELOC3 03 0 0 01ba6 2**0 CONTENTS
109 RELOC320 029 0 0 01ba2 2**0 CONTENTS 109 RELOC320 029 0 0 01ba9 2**0 CONTENTS
110 REL32BIG 09 0 0 01bcb 2**0 CONTENTS 110 REL32BIG 09 0 0 01bd2 2**0 CONTENTS
111 RELOC32J 02 0 0 01bd4 2**0 CONTENTS 111 RELOC32J 02 0 0 01bdb 2**0 CONTENTS
112 REL32END 0 0 0 01bd6 2**0 CONTENTS 112 REL32END 0 0 0 01bdd 2**0 CONTENTS
113 PERLOHI0 08 0 0 01bd6 2**0 CONTENTS 113 PERLOHI0 08 0 0 01bdd 2**0 CONTENTS
114 PERELLO0 0a 0 0 01bde 2**0 CONTENTS 114 PERELLO0 0a 0 0 01be5 2**0 CONTENTS
115 PERELHI0 0d 0 0 01be8 2**0 CONTENTS 115 PERELHI0 0d 0 0 01bef 2**0 CONTENTS
116 PEDEPHAK 02f 0 0 01bf5 2**0 CONTENTS 116 PEDEPHAK 02f 0 0 01bfc 2**0 CONTENTS
117 PETLSC 018 0 0 01c24 2**0 CONTENTS 117 PETLSC 018 0 0 01c2b 2**0 CONTENTS
118 PEMAIN20 01 0 0 01c3c 2**0 CONTENTS 118 PEMAIN20 01 0 0 01c43 2**0 CONTENTS
119 CLEARSTACK 0d 0 0 01c3d 2**0 CONTENTS 119 CLEARSTACK 0d 0 0 01c44 2**0 CONTENTS
120 PEMAIN21 0 0 0 01c4a 2**0 CONTENTS 120 PEMAIN21 0 0 0 01c51 2**0 CONTENTS
121 PERETURN 06 0 0 01c4a 2**0 CONTENTS 121 PERETURN 06 0 0 01c51 2**0 CONTENTS
122 PEDOJUMP 05 0 0 01c50 2**0 CONTENTS 122 PEDOJUMP 05 0 0 01c57 2**0 CONTENTS
123 PETLSC2 01f 0 0 01c55 2**0 CONTENTS 123 PETLSC2 01f 0 0 01c5c 2**0 CONTENTS
124 UPX1HEAD 020 0 0 01c74 2**0 CONTENTS 124 UPX1HEAD 020 0 0 01c7b 2**0 CONTENTS
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d N2BSMA10 0 N2BSMA10 00000000 l d N2BSMA10 0 N2BSMA10
00000000 l d N2BFAS11 0 N2BFAS11 00000000 l d N2BFAS11 0 N2BFAS11

Some files were not shown because too many files have changed in this diff Show More