diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 81821ab1..a7015625 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -319,8 +319,8 @@ PackLinuxElf32ppc::buildLinuxLoader( linker->addSection("ELFPPC32", proto, szproto); - addLoader("ELFPPC32", 0); - addLoader("FOLDEXEC", 0); + addLoader("ELFPPC32", NULL); + addLoader("FOLDEXEC", NULL); return getLoaderSize(); } @@ -373,8 +373,8 @@ PackLinuxElf64amd::buildLinuxLoader( linker->addSection("ELF64AMD", proto, szproto); - addLoader("ELF64AMD", 0); - addLoader("FOLDEXEC", 0); + addLoader("ELF64AMD", NULL); + addLoader("FOLDEXEC", NULL); return getLoaderSize(); } diff --git a/src/p_lx_exc.cpp b/src/p_lx_exc.cpp index 4a918b3c..647af6b1 100644 --- a/src/p_lx_exc.cpp +++ b/src/p_lx_exc.cpp @@ -291,71 +291,71 @@ PackLinuxI386::buildLinuxLoader( // compressed data b_len + ph.c_len ); // entry to stub - addLoader("LEXEC000", 0); + addLoader("LEXEC000", NULL); if (ft->id) { if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate - addLoader("LXUNF000", 0); - addLoader("LXUNF002", 0); + addLoader("LXUNF000", NULL); + addLoader("LXUNF002", NULL); if (0x80==(ft->id & 0xF0)) { if (256==n_mru) { - addLoader("MRUBYTE0", 0); + addLoader("MRUBYTE0", NULL); } else if (n_mru) { - addLoader("LXMRU005", 0); + addLoader("LXMRU005", NULL); } if (n_mru) { - addLoader("LXMRU006", 0); + addLoader("LXMRU006", NULL); } else { - addLoader("LXMRU007", 0); + addLoader("LXMRU007", NULL); } } else if (0x40==(ft->id & 0xF0)) { - addLoader("LXUNF008", 0); + addLoader("LXUNF008", NULL); } - addLoader("LXUNF010", 0); + addLoader("LXUNF010", NULL); } if (n_mru) { - addLoader("LEXEC009", 0); + addLoader("LEXEC009", NULL); } } - addLoader("LEXEC010", 0); - addLoader(getDecompressor(), 0); - addLoader("LEXEC015", 0); + addLoader("LEXEC010", NULL); + addLoader(getDecompressor(), NULL); + addLoader("LEXEC015", NULL); if (ft->id) { if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate if (0x80!=(ft->id & 0xF0)) { - addLoader("LXUNF042", 0); + addLoader("LXUNF042", NULL); } } else { // decompr, unfilter not separate if (0x80==(ft->id & 0xF0)) { - addLoader("LEXEC110", 0); + addLoader("LEXEC110", NULL); if (n_mru) { - addLoader("LEXEC100", 0); + addLoader("LEXEC100", NULL); } // bug in APP: jmp and label must be in same .asx/.asy - addLoader("LEXEC016", 0); + addLoader("LEXEC016", NULL); } } addFilter32(ft->id); if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate if (0x80==(ft->id & 0xF0)) { if (0==n_mru) { - addLoader("LXMRU058", 0); + addLoader("LXMRU058", NULL); } } - addLoader("LXUNF035", 0); + addLoader("LXUNF035", NULL); } else { // decompr always unfilters - addLoader("LEXEC017", 0); + addLoader("LEXEC017", NULL); } } - addLoader("IDENTSTR", 0); - addLoader("LEXEC020", 0); - addLoader("FOLDEXEC", 0); + addLoader("IDENTSTR", NULL); + addLoader("LEXEC020", NULL); + addLoader("FOLDEXEC", NULL); char *ptr_cto = (char *)const_cast(getLoader()); int sz_cto = getLoaderSize(); diff --git a/src/p_lx_interp.cpp b/src/p_lx_interp.cpp index e683164f..978a258a 100644 --- a/src/p_lx_interp.cpp +++ b/src/p_lx_interp.cpp @@ -147,38 +147,38 @@ void PackLinuxI386interp::pack3(OutputFile *fo, Filter &/*ft*/) initLoader(linux_i386pti_loader, sizeof(linux_i386pti_loader)); linker->addSection("FOLDEXEC", linux_i386pti_fold, sizeof(linux_i386pti_fold)); - addLoader("LXPTI000", 0); + addLoader("LXPTI000", NULL); - addLoader("LXPTI040", 0); - ph.method = M_NRV2B_LE32; addLoader(getDecompressor(), 0); - addLoader("LXPTI090", 0); + addLoader("LXPTI040", NULL); + ph.method = M_NRV2B_LE32; addLoader(getDecompressor(), NULL); + addLoader("LXPTI090", NULL); - addLoader("LXPTI041", 0); - ph.method = M_NRV2D_LE32; addLoader(getDecompressor(), 0); - addLoader("LXPTI090", 0); + addLoader("LXPTI041", NULL); + ph.method = M_NRV2D_LE32; addLoader(getDecompressor(), NULL); + addLoader("LXPTI090", NULL); - addLoader("LXPTI042", 0); - ph.method = M_NRV2E_LE32; addLoader(getDecompressor(), 0); - addLoader("LXPTI090", 0); + addLoader("LXPTI042", NULL); + ph.method = M_NRV2E_LE32; addLoader(getDecompressor(), NULL); + addLoader("LXPTI090", NULL); - addLoader("LXPTI043", 0); - ph.method = M_CL1B_LE32; addLoader(getDecompressor(), 0); - addLoader("LXPTI090", 0); + addLoader("LXPTI043", NULL); + ph.method = M_CL1B_LE32; addLoader(getDecompressor(), NULL); + addLoader("LXPTI090", NULL); - addLoader("LXPTI091", 0); + addLoader("LXPTI091", NULL); - addLoader("LXPTI140", 0); + addLoader("LXPTI140", NULL); - addLoader("LXUNF002,LXUNF008,LXUNF010", 0); + addLoader("LXUNF002,LXUNF008,LXUNF010", NULL); addFilter32(0x46); - addLoader("LXUNF042,LXUNF035", 0); + addLoader("LXUNF042,LXUNF035", NULL); - addLoader("LXUNF002,LXUNF008,LXUNF010", 0); + addLoader("LXUNF002,LXUNF008,LXUNF010", NULL); addFilter32(0x49); - addLoader("LXUNF042,LXUNF035", 0); + addLoader("LXUNF042,LXUNF035", NULL); - addLoader("LXPTI200", 0); - addLoader("FOLDEXEC", 0); + addLoader("LXPTI200", NULL); + addLoader("FOLDEXEC", NULL); upx_byte const *p = getLoader(); lsize = getLoaderSize(); updateLoader(fo); diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 641151da..01693b98 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -106,8 +106,8 @@ PackMachPPC32::buildMachLoader( linker->addSection("MACOS000", proto, szproto); - addLoader("MACOS000", 0); - addLoader("FOLDEXEC", 0); + addLoader("MACOS000", NULL); + addLoader("FOLDEXEC", NULL); return getLoaderSize(); } diff --git a/src/packer.h b/src/packer.h index b2de61ca..af25b95e 100644 --- a/src/packer.h +++ b/src/packer.h @@ -210,7 +210,11 @@ protected: virtual const upx_byte *getLoader() const; virtual int getLoaderSize() const; virtual void initLoader(const void *pdata, int plen, int pinfo=-1, int small=-1); +#if 1 && (ACC_CC_GNUC >= 0x040100) && (ACC_OS_POSIX_LINUX) + virtual void __acc_cdecl_va addLoader(const char *s, ...) __attribute__((__sentinel__)); +#else virtual void __acc_cdecl_va addLoader(const char *s, ...); +#endif virtual int getLoaderSection(const char *name, int *slen=NULL) const; virtual int getLoaderSectionStart(const char *name, int *slen=NULL) const; virtual const char *getDecompressor() const; diff --git a/src/packerf.cpp b/src/packerf.cpp index 1385eacb..1b461bb8 100644 --- a/src/packerf.cpp +++ b/src/packerf.cpp @@ -139,15 +139,15 @@ void Packer::addFilter32(int filter_id) ); } else if (0x40==(0xF0 & filter_id)) { - addLoader("CKLLTR00", 0); + addLoader("CKLLTR00", NULL); if (9<=(0xf & filter_id)) { - addLoader("CKLLTR10", 0); + addLoader("CKLLTR10", NULL); } - addLoader("CKLLTR20", 0); + addLoader("CKLLTR20", NULL); if (9<=(0xf & filter_id)) { - addLoader("CKLLTR30", 0); + addLoader("CKLLTR30", NULL); } - addLoader("CKLLTR40", 0); + addLoader("CKLLTR40", NULL); } } else @@ -170,187 +170,187 @@ void Packer::addFilter32(int filter_id) unsigned const f_jcc2 = f80_jcc2(filter_id); if (NOFILT!=f_jcc2) { - addLoader("LXJCC010", 0); + addLoader("LXJCC010", NULL); if (n_mru) { - addLoader("LXMRU045", 0); + addLoader("LXMRU045", NULL); } else { - addLoader("LXMRU046", 0); + addLoader("LXMRU046", NULL); } if (0==n_mru || MRUFLT!=f_jcc2) { - addLoader("LXJCC020", 0); + addLoader("LXJCC020", NULL); } else { // 0!=n_mru - addLoader("LXJCC021", 0); + addLoader("LXJCC021", NULL); } if (NOFILT!=f_jcc2) { - addLoader("LXJCC023", 0); + addLoader("LXJCC023", NULL); } } - addLoader("LXUNF037", 0); + addLoader("LXUNF037", NULL); if (x386) { if (n_mru) { - addLoader("LXUNF386", 0); + addLoader("LXUNF386", NULL); } - addLoader("LXUNF387", 0); + addLoader("LXUNF387", NULL); if (n_mru) { - addLoader("LXUNF388", 0); + addLoader("LXUNF388", NULL); } } else { - addLoader("LXUNF486", 0); + addLoader("LXUNF486", NULL); if (n_mru) { - addLoader("LXUNF487", 0); + addLoader("LXUNF487", NULL); } } if (n_mru) { - addLoader("LXMRU065", 0); + addLoader("LXMRU065", NULL); if (256==n_mru) { - addLoader("MRUBYTE3", 0); + addLoader("MRUBYTE3", NULL); } else { - addLoader("MRUARB30", 0); + addLoader("MRUARB30", NULL); if (mrupwr2) { - addLoader("MRUBITS3", 0); + addLoader("MRUBITS3", NULL); } else { - addLoader("MRUARB40", 0); + addLoader("MRUARB40", NULL); } } - addLoader("LXMRU070", 0); + addLoader("LXMRU070", NULL); if (256==n_mru) { - addLoader("MRUBYTE4", 0); + addLoader("MRUBYTE4", NULL); } else if (mrupwr2) { - addLoader("MRUBITS4", 0); + addLoader("MRUBITS4", NULL); } else { - addLoader("MRUARB50", 0); + addLoader("MRUARB50", NULL); } - addLoader("LXMRU080", 0); + addLoader("LXMRU080", NULL); if (256==n_mru) { - addLoader("MRUBYTE5", 0); + addLoader("MRUBYTE5", NULL); } else { - addLoader("MRUARB60", 0); + addLoader("MRUARB60", NULL); if (mrupwr2) { - addLoader("MRUBITS5", 0); + addLoader("MRUBITS5", NULL); } else { - addLoader("MRUARB70", 0); + addLoader("MRUARB70", NULL); } } - addLoader("LXMRU090", 0); + addLoader("LXMRU090", NULL); if (256==n_mru) { - addLoader("MRUBYTE6", 0); + addLoader("MRUBYTE6", NULL); } else { - addLoader("MRUARB80", 0); + addLoader("MRUARB80", NULL); if (mrupwr2) { - addLoader("MRUBITS6", 0); + addLoader("MRUBITS6", NULL); } else { - addLoader("MRUARB90", 0); + addLoader("MRUARB90", NULL); } } - addLoader("LXMRU100", 0); + addLoader("LXMRU100", NULL); } - addLoader("LXUNF040", 0); + addLoader("LXUNF040", NULL); if (n_mru) { - addLoader("LXMRU110", 0); + addLoader("LXMRU110", NULL); } else { - addLoader("LXMRU111", 0); + addLoader("LXMRU111", NULL); } - addLoader("LXUNF041", 0); - addLoader("LXUNF042", 0); + addLoader("LXUNF041", NULL); + addLoader("LXUNF042", NULL); if (n_mru) { - addLoader("LXMRU010", 0); + addLoader("LXMRU010", NULL); if (NOFILT!=f_jmp1 && NOFILT==f_call) { - addLoader("LXJMPA00", 0); + addLoader("LXJMPA00", NULL); } else { - addLoader("LXCALLB0", 0); + addLoader("LXCALLB0", NULL); } - addLoader("LXUNF021", 0); + addLoader("LXUNF021", NULL); } else { - addLoader("LXMRU022", 0); + addLoader("LXMRU022", NULL); if (NOFILT!=f_jmp1 && NOFILT==f_call) { - addLoader("LXJMPA01", 0); + addLoader("LXJMPA01", NULL); } else { - addLoader("LXCALLB1", 0); + addLoader("LXCALLB1", NULL); } } if (n_mru) { if (256!=n_mru && mrupwr2) { - addLoader("MRUBITS1", 0); + addLoader("MRUBITS1", NULL); } - addLoader("LXMRU030", 0); + addLoader("LXMRU030", NULL); if (256==n_mru) { - addLoader("MRUBYTE1", 0); + addLoader("MRUBYTE1", NULL); } else { - addLoader("MRUARB10", 0); + addLoader("MRUARB10", NULL); } - addLoader("LXMRU040", 0); + addLoader("LXMRU040", NULL); } - addLoader("LXUNF030", 0); + addLoader("LXUNF030", NULL); if (NOFILT!=f_jcc2) { - addLoader("LXJCC000", 0); + addLoader("LXJCC000", NULL); } if (NOFILT!=f_call || NOFILT!=f_jmp1) { // at least one is filtered // shift opcode origin to zero if (0==n_mru) { - addLoader("LXCJ0MRU", 0); + addLoader("LXCJ0MRU", NULL); } else { - addLoader("LXCJ1MRU", 0); + addLoader("LXCJ1MRU", NULL); } // determine if in range if ((NOFILT!=f_call) && (NOFILT!=f_jmp1)) { // unfilter both - addLoader("LXCALJMP", 0); + addLoader("LXCALJMP", NULL); } if ((NOFILT==f_call) ^ (NOFILT==f_jmp1)) { // unfilter just one if (0==n_mru) { - addLoader("LXCALL00", 0); + addLoader("LXCALL00", NULL); } else { - addLoader("LXCALL01", 0); + addLoader("LXCALL01", NULL); } } // determine if mru applies if (0==n_mru || ! ((FNOMRU==f_call) || (FNOMRU==f_jmp1)) ) { - addLoader("LXCJ2MRU", 0); // no mru, or no exceptions + addLoader("LXCJ2MRU", NULL); // no mru, or no exceptions } else { // mru on one, but not the other - addLoader("LXCJ4MRU", 0); + addLoader("LXCJ4MRU", NULL); if (MRUFLT==f_jmp1) { // JMP only - addLoader("LXCJ6MRU", 0); + addLoader("LXCJ6MRU", NULL); } else if (MRUFLT==f_call) { // CALL only - addLoader("LXCJ7MRU", 0); + addLoader("LXCJ7MRU", NULL); } - addLoader("LXCJ8MRU", 0); + addLoader("LXCJ8MRU", NULL); } } - addLoader("LXUNF034", 0); + addLoader("LXUNF034", NULL); if (n_mru) { - addLoader("LXMRU055", 0); + addLoader("LXMRU055", NULL); if (256==n_mru) { - addLoader("MRUBYTE2", 0); + addLoader("MRUBYTE2", NULL); } else if (mrupwr2) { - addLoader("MRUBITS2", 0); + addLoader("MRUBITS2", NULL); } else if (n_mru) { - addLoader("MRUARB20", 0); + addLoader("MRUARB20", NULL); } - addLoader("LXMRU057", 0); + addLoader("LXMRU057", NULL); } } }