src: minor cleanups
This commit is contained in:
parent
777d4f5279
commit
10e759f1f1
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@ -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:
|
||||||
|
|||||||
4
.github/workflows/weekly-ci-zigcc.yml
vendored
4
.github/workflows/weekly-ci-zigcc.yml
vendored
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
12
src/packer.h
12
src/packer.h
@ -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()
|
||||||
};
|
};
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user