src: minor cleanups

This commit is contained in:
Markus F.X.J. Oberhumer 2023-08-11 13:32:53 +02:00
parent 777d4f5279
commit 10e759f1f1
8 changed files with 50 additions and 35 deletions

View File

@ -12,8 +12,8 @@ env:
CMAKE_REQUIRED_QUIET: OFF CMAKE_REQUIRED_QUIET: OFF
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
UPX_CMAKE_BUILD_FLAGS: --verbose UPX_CMAKE_BUILD_FLAGS: --verbose
# 2023-08-09 # 2023-08-10
ZIG_DIST_VERSION: 0.12.0-dev.25+36c57c3ba ZIG_DIST_VERSION: 0.12.0-dev.47+0461a64a9
jobs: jobs:
job-rebuild-and-verify-stubs: job-rebuild-and-verify-stubs:

View File

@ -8,8 +8,8 @@ on:
env: env:
CMAKE_REQUIRED_QUIET: OFF CMAKE_REQUIRED_QUIET: OFF
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
# 2023-08-09 # 2023-08-10
ZIG_DIST_VERSION: 0.12.0-dev.25+36c57c3ba ZIG_DIST_VERSION: 0.12.0-dev.47+0461a64a9
jobs: jobs:
job-linux-zigcc: # uses cmake + make job-linux-zigcc: # uses cmake + make

View File

@ -36,14 +36,13 @@
// //
**************************************************************************/ **************************************************************************/
Packer::Packer(InputFile *f) : PackerBase(f) { PackerBase::PackerBase(InputFile *f) : fi(f), file_size(f ? f->st.st_size : 0) {
if (fi != nullptr) ph.reset();
file_size = fi->st_size(); mem_size_assert(1, file_size);
mem_size_assert(1, file_size_u);
uip = new UiPacker(this);
mem_clear(&ph);
} }
Packer::Packer(InputFile *f) : PackerBase(f) { uip = new UiPacker(this); }
Packer::~Packer() noexcept { Packer::~Packer() noexcept {
// owner // owner
owner_delete(uip); owner_delete(uip);
@ -51,7 +50,6 @@ Packer::~Packer() noexcept {
assert_noexcept(linker == nullptr); assert_noexcept(linker == nullptr);
// references // references
bele = nullptr; bele = nullptr;
fi = nullptr;
} }
// for PackMaster // for PackMaster

View File

@ -44,7 +44,7 @@ class Filter;
class PackerBase { class PackerBase {
friend class UiPacker; friend class UiPacker;
protected: protected:
explicit PackerBase(InputFile *f) noexcept : fi(f) {} explicit PackerBase(InputFile *f);
public: public:
virtual ~PackerBase() noexcept {} virtual ~PackerBase() noexcept {}
// getVersion() enables detecting forward incompatibility of unpack() // getVersion() enables detecting forward incompatibility of unpack()
@ -75,12 +75,12 @@ public:
virtual void doFileInfo() = 0; virtual void doFileInfo() = 0;
protected: protected:
InputFile *fi = nullptr; InputFile *const fi; // reference
union { // unnamed union union { // unnamed union
upx_int64_t file_size = 0; // must get set by constructor const upx_int64_t file_size; // must get set by constructor
upx_uint64_t file_size_u; // explicitly unsigned const upx_uint64_t file_size_u; // explicitly unsigned
}; };
PackHeader ph = PackHeader{}; // must be filled by canUnpack() PackHeader ph; // must be filled by canUnpack()
}; };
/************************************************************************* /*************************************************************************

View File

@ -36,23 +36,28 @@
// least to detect older versions, so this is a little bit messy. // least to detect older versions, so this is a little bit messy.
**************************************************************************/ **************************************************************************/
PackHeader::PackHeader() noexcept : version(-1), format(-1) {} PackHeader::PackHeader() noexcept { reset(); }
void PackHeader::reset() noexcept {
mem_clear(this);
version = -1;
format = -1;
compress_result.reset();
}
/************************************************************************* /*************************************************************************
// very simple checksum for the header itself (since version 10) // extremely simple checksum for the header itself (since version 10)
**************************************************************************/ **************************************************************************/
static byte get_packheader_checksum(SPAN_S(const byte) buf, int blen) { static byte get_packheader_checksum(SPAN_S(const byte) buf, int blen) {
assert(blen >= 4); assert(blen >= 4);
assert(get_le32(buf) == UPX_MAGIC_LE32); assert(get_le32(buf) == UPX_MAGIC_LE32);
// printf("1 %d\n", blen);
buf += 4; buf += 4;
blen -= 4; blen -= 4;
unsigned c = 0; unsigned c = 0;
while (blen-- > 0) while (blen-- > 0)
c += *buf++; c += *buf++;
c %= 251; c %= 251;
// printf("2 %d\n", c);
return (byte) c; return (byte) c;
} }
@ -98,7 +103,7 @@ void PackHeader::putPackHeader(SPAN_S(byte) p) const {
// sufficient space for the header. // sufficient space for the header.
assert(get_le32(p) == UPX_MAGIC_LE32); assert(get_le32(p) == UPX_MAGIC_LE32);
if (get_le32(p + 4) != UPX_MAGIC2_LE32) { if (get_le32(p + 4) != UPX_MAGIC2_LE32) {
// fprintf(stderr, "MAGIC2_LE32: %x %x\n", get_le32(p+4), UPX_MAGIC2_LE32); NO_fprintf(stderr, "MAGIC2_LE32: %x %x\n", get_le32(p + 4), UPX_MAGIC2_LE32);
throwBadLoader(); throwBadLoader();
} }

View File

@ -34,21 +34,22 @@ class Filter;
// also see stub/src/include/header.S // also see stub/src/include/header.S
**************************************************************************/ **************************************************************************/
class PackHeader final { struct PackHeader final {
public:
explicit PackHeader() noexcept; explicit PackHeader() noexcept;
~PackHeader() noexcept = default; ~PackHeader() noexcept = default;
void reset() noexcept;
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; int getPackHeaderSize() const;
// fields stored in compressed file => see 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;
int format; // executable format int format; // executable format UPX_F_xxx
int method; // compresison method int method; // compresison method M_xxx
int level; // compresison level 1..10 int level; // compresison level 1..10
unsigned u_len; unsigned u_len;
unsigned c_len; unsigned c_len;
@ -57,7 +58,10 @@ public:
unsigned u_file_size; unsigned u_file_size;
int filter; int filter;
int filter_cto; int filter_cto;
int n_mru; // FIXME: rename to filter_misc union {
int filter_misc; // generic name
int n_mru; // specific name for filter ctojr
};
int header_checksum; int header_checksum;
// support fields for verifying decompression // support fields for verifying decompression

View File

@ -27,32 +27,40 @@
; ;
*/ */
// see PackHeader::putPackHeader()
section UPX1HEAD section UPX1HEAD
.byte 85,80,88,33 // 0 UPX_MAGIC_LE32 .byte 85,80,88,33 // 0 UPX_MAGIC_LE32
.byte 161,216,208,213 // UPX_MAGIC2_LE32 #if 0
.byte 161,216,208,213 // 4 UPX_MAGIC2_LE32
#else
.byte 161 // 4 version
.byte 216 // 5 format
.byte 208 // 6 method
.byte 213 // 7 level
#endif
.long 0 // 8 uncompressed adler32 .long 0 // 8 uncompressed adler32
.long 0 // 12 compressed adler32 .long 0 // 12 compressed adler32
#ifdef COM #ifdef COM
.short 0 // 16 uncompressed len .short 0 // 16 uncompressed len
.short 0 // 18 compressed len .short 0 // 18 compressed len
.byte 0 // 20 filter .byte 0 // 20 filter id
.byte 45 // 21 header checksum .byte 45 // 21 header checksum
#elif defined(EXE) #elif defined(EXE)
.byte 0,0,0 // 16 uncompressed len .byte 0,0,0 // 16 uncompressed len
.byte 0,0,0 // 19 compressed len .byte 0,0,0 // 19 compressed len
.byte 0,0,0 // 22 original file size .byte 0,0,0 // 22 original file size
.byte 0 // 25 filter .byte 0 // 25 filter id
.byte 45 // 26 header checksum .byte 45 // 26 header checksum
#else #else
.long 0 // 16 uncompressed len .long 0 // 16 uncompressed len
.long 0 // 20 compressed len .long 0 // 20 compressed len
.long 0 // 24 original file size .long 0 // 24 original file size
.byte 0 // 28 filter id .byte 0 // 28 filter id
.byte 0 // 29 filter cto .byte 0 // 29 filter_cto
.byte 0 // unused .byte 0 // 30 filter_misc / n_mru
.byte 45 // 31 header checksum .byte 45 // 31 header checksum
#endif #endif

View File

@ -109,7 +109,7 @@ public:
// assignment // assignment
Self &operator=(const Self &other) { return assign(other); } Self &operator=(const Self &other) { return assign(other); }
// FIXME: this is not called !! // FIXME: this is not called??
template <class U> template <class U>
XSPAN_REQUIRES_CONVERTIBLE_R(Self &) XSPAN_REQUIRES_CONVERTIBLE_R(Self &)
operator=(U *other) { operator=(U *other) {
@ -117,7 +117,7 @@ public:
return assign(Self(other)); return assign(Self(other));
} }
// FIXME: this is not called !! // FIXME: this is not called??
template <class U> template <class U>
XSPAN_REQUIRES_CONVERTIBLE_R(Self &) XSPAN_REQUIRES_CONVERTIBLE_R(Self &)
operator=(const CSelf<U> &other) { operator=(const CSelf<U> &other) {