mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
merge
This commit is contained in:
commit
47d728667d
1
.hgtags
1
.hgtags
|
@ -14,6 +14,7 @@ a935d577fc7dd9c2c87761c9c702805da6ce1e51 RELEASE_193
|
|||
b0353253b0b3d062eb5adb50d4b665a96620da45 RELEASE_195
|
||||
b82ef51896199484afe5b0553af7d1e59b7ce428 BRANCHPOINT_FOR_upx2.hg
|
||||
c2e0cd4d621b047f254f2def42132a03683ff52c RELEASE_192
|
||||
c9a983b7da9d4a2311f74366478348412cac2986 RELEASE_305
|
||||
d276aa09033c24d0981bc3f4fee5628aecc988ad RELEASE_290
|
||||
eb1ce56dce7dd1835964362470610925963b9043 RELEASE_110
|
||||
ed96891ef795bceec6b7ff3ca1ca7764431bfb39 RELEASE_191
|
||||
|
|
8
Makefile
8
Makefile
|
@ -38,13 +38,5 @@ endif
|
|||
$(MAKE) -C doc $@
|
||||
|
||||
|
||||
ifneq ($(wildcard .hg/.),)
|
||||
# automatically generate ChangeLog from local Mercurial repo
|
||||
ChangeLog:
|
||||
hg log --style=changelog > $@
|
||||
.PHONY: ChangeLog
|
||||
endif
|
||||
|
||||
|
||||
.PHONY: default all mostlyclean clean distclean maintainer-clean
|
||||
|
||||
|
|
6
NEWS
6
NEWS
|
@ -2,13 +2,15 @@
|
|||
User visible changes for UPX
|
||||
==================================================================
|
||||
|
||||
Changes in 3.06 (XX XXX XXXX):
|
||||
|
||||
Changes in 3.05 (27 Apr 2010):
|
||||
* Withdraw support for shared libraries on Darwin (Apple Mac OS X)
|
||||
because upx does not understand enough about .dylib.
|
||||
* i386-linux and amd64-linux support shared libraries (DT_INIT must
|
||||
exist, all info needed by runtime loader must be first in .text, etc.)
|
||||
* Linux /proc/self/exe now is preserved by default, by leaving behind
|
||||
one page. New compress-time option --unmap-all-pages is available.
|
||||
* Withdraw support for shared libraries on Darwin (Apple Mac OS X)
|
||||
because upx does not understand enough about .dylib.
|
||||
* bug fixes
|
||||
|
||||
Changes in 3.04 (27 Sep 2009):
|
||||
|
|
|
@ -98,7 +98,7 @@ If you want to modify the stub sources you'll also need
|
|||
|
||||
- A number of cross-assemblers and cross-compilers - precompiled
|
||||
binaries for i386-linux hosts are available from
|
||||
http://sourceforge.net/project/showfiles.php?group_id=2331
|
||||
http://sourceforge.net/projects/upx/files/upx-tools/20060823/
|
||||
|
||||
|
||||
Misc. notes
|
||||
|
|
|
@ -546,7 +546,7 @@ int upx_lzma_compress ( const upx_bytep src, unsigned src_len,
|
|||
}
|
||||
|
||||
error:
|
||||
*dst_len = os.b_pos;
|
||||
*dst_len = (unsigned) os.b_pos;
|
||||
//printf("\nlzma_compress: %d: %u %u %u %u %u, %u - > %u\n", r, res->pos_bits, res->lit_pos_bits, res->lit_context_bits, res->dict_size, res->num_probs, src_len, *dst_len);
|
||||
//printf("%u %u %u\n", is.__m_RefCount, os.__m_RefCount, progress.__m_RefCount);
|
||||
return r;
|
||||
|
|
15
src/conf.h
15
src/conf.h
|
@ -36,6 +36,21 @@
|
|||
// ACC
|
||||
**************************************************************************/
|
||||
|
||||
#if (defined(_WIN32) || defined(_WIN64)) && defined(_MSC_VER)
|
||||
#ifndef _CRT_NONSTDC_NO_DEPRECATE
|
||||
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
||||
#endif
|
||||
#ifndef _CRT_NONSTDC_NO_WARNINGS
|
||||
#define _CRT_NONSTDC_NO_WARNINGS 1
|
||||
#endif
|
||||
#ifndef _CRT_SECURE_NO_DEPRECATE
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#endif
|
||||
#ifndef _CRT_SECURE_NO_WARNINGS
|
||||
#define _CRT_SECURE_NO_WARNINGS 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "miniacc.h"
|
||||
#if ((ACC_OS_WIN32 || ACC_OS_WIN64) && ACC_CC_MWERKS) && defined(__MSL__)
|
||||
# undef HAVE_UTIME_H /* this pulls in <windows.h> */
|
||||
|
|
|
@ -51,8 +51,9 @@ void show_head(void)
|
|||
fg = con_fg(f,FG_GREEN);
|
||||
con_fprintf(f,
|
||||
" Ultimate Packer for eXecutables\n"
|
||||
" Copyright (C) 1996 - 2009\n"
|
||||
" Copyright (C) 1996 - %s\n"
|
||||
"UPX %-10s Markus Oberhumer, Laszlo Molnar & John Reiser %14s\n\n",
|
||||
UPX_VERSION_YEAR,
|
||||
#if (ACC_OS_DOS16 || ACC_OS_DOS32)
|
||||
V("d"),
|
||||
#elif (ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
|
||||
|
@ -113,6 +114,7 @@ struct PackerNames
|
|||
{
|
||||
PackerNames *self = (PackerNames *) user;
|
||||
self->add(p);
|
||||
delete p; p = NULL;
|
||||
return NULL;
|
||||
}
|
||||
static int __acc_cdecl_qsort cmp_fname(const void *a, const void *b) {
|
||||
|
|
|
@ -469,7 +469,7 @@ int ElfLinker::getSection(const char *sname, int *slen) const
|
|||
const Section *section = findSection(sname);
|
||||
if (slen)
|
||||
*slen = section->size;
|
||||
return section->output - output;
|
||||
return (int) (section->output - output);
|
||||
}
|
||||
|
||||
int ElfLinker::getSectionSize(const char *sname) const
|
||||
|
|
21
src/main.cpp
21
src/main.cpp
|
@ -1351,27 +1351,40 @@ void upx_sanity_check(void)
|
|||
assert(TestBELE<BE32>::test());
|
||||
assert(TestBELE<BE64>::test());
|
||||
{
|
||||
static const unsigned char dd[32] = { 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,
|
||||
static const unsigned char dd[32]
|
||||
#if 1 && (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE) && defined(__ELF__)
|
||||
__attribute__((__aligned__(16)))
|
||||
#endif
|
||||
= { 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 };
|
||||
const unsigned char *d;
|
||||
const N_BELE_RTP::AbstractPolicy *bele;
|
||||
d = dd + 7;
|
||||
assert(upx_adler32(d, 4) == 0x09f003f7);
|
||||
assert(upx_adler32(d, 4, 0) == 0x09ec03f6);
|
||||
assert(upx_adler32(d, 4, 1) == 0x09f003f7);
|
||||
bele = &N_BELE_RTP::be_policy;
|
||||
assert(get_be16(d) == 0xfffe);
|
||||
assert(bele->get16(d) == 0xfffe);
|
||||
assert(get_be16_signed(d) == -2);
|
||||
assert(get_be24(d) == 0xfffefd);
|
||||
assert(bele->get24(d) == 0xfffefd);
|
||||
assert(get_be24_signed(d) == -259);
|
||||
assert(get_be32(d) == 0xfffefdfc);
|
||||
assert(bele->get32(d) == 0xfffefdfc);
|
||||
assert(get_be32_signed(d) == -66052);
|
||||
bele = &N_BELE_RTP::le_policy;
|
||||
assert(get_le16(d) == 0xfeff);
|
||||
assert(bele->get16(d) == 0xfeff);
|
||||
assert(get_le16_signed(d) == -257);
|
||||
assert(get_le24(d) == 0xfdfeff);
|
||||
assert(bele->get24(d) == 0xfdfeff);
|
||||
assert(get_le24_signed(d) == -131329);
|
||||
assert(get_le32(d) == 0xfcfdfeff);
|
||||
assert(bele->get32(d) == 0xfcfdfeff);
|
||||
assert(get_le32_signed(d) == -50462977);
|
||||
assert(get_le64_signed(d) == ACC_INT64_C(-506097522914230529));
|
||||
assert(find_be16(d, 2, 0xfffe) == 0);
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
#ifndef __ACC_H_INCLUDED
|
||||
#define __ACC_H_INCLUDED 1
|
||||
#define ACC_VERSION 20100205L
|
||||
#define ACC_VERSION 20100419L
|
||||
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
|
||||
# define __CYGWIN__ __CYGWIN32__
|
||||
#endif
|
||||
|
@ -758,6 +758,9 @@
|
|||
#elif (UINT_MAX <= ACC_0xffffL) && defined(__AVR__)
|
||||
# define ACC_ARCH_AVR 1
|
||||
# define ACC_INFO_ARCH "avr"
|
||||
#elif defined(__avr32__) || defined(__AVR32__)
|
||||
# define ACC_ARCH_AVR32 1
|
||||
# define ACC_INFO_ARCH "avr32"
|
||||
#elif defined(__bfin__)
|
||||
# define ACC_ARCH_BLACKFIN 1
|
||||
# define ACC_INFO_ARCH "blackfin"
|
||||
|
@ -1316,9 +1319,11 @@ extern "C" {
|
|||
#elif !defined(ACC_ABI_BIG_ENDIAN) && !defined(ACC_ABI_LITTLE_ENDIAN)
|
||||
#if (ACC_ARCH_ALPHA) && (ACC_ARCH_CRAY_MPP)
|
||||
# define ACC_ABI_BIG_ENDIAN 1
|
||||
#elif (ACC_ARCH_IA64) && (ACC_OS_POSIX_LINUX || ACC_OS_WIN64)
|
||||
# define ACC_ABI_LITTLE_ENDIAN 1
|
||||
#elif (ACC_ARCH_ALPHA || ACC_ARCH_AMD64 || ACC_ARCH_BLACKFIN || ACC_ARCH_CRIS || ACC_ARCH_I086 || ACC_ARCH_I386 || ACC_ARCH_MSP430)
|
||||
# define ACC_ABI_LITTLE_ENDIAN 1
|
||||
#elif (ACC_ARCH_M68K || ACC_ARCH_S390)
|
||||
#elif (ACC_ARCH_AVR32 || ACC_ARCH_M68K || ACC_ARCH_S390)
|
||||
# define ACC_ABI_BIG_ENDIAN 1
|
||||
#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__)
|
||||
# if (__LITTLE_ENDIAN__ == 1)
|
||||
|
@ -1669,7 +1674,7 @@ extern "C" {
|
|||
# endif
|
||||
#endif
|
||||
#if !defined(ACC_UNCONST_CAST)
|
||||
# if 1 && defined(__cplusplus)
|
||||
# if 0 && defined(__cplusplus)
|
||||
# define ACC_UNCONST_CAST(t,e) (const_cast<t> (e))
|
||||
# elif (ACC_CC_GNUC || ACC_CC_LLVM || ACC_CC_PATHSCALE)
|
||||
# define ACC_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((acc_uintptr_t) ((const void *) (e))))))
|
||||
|
@ -2312,8 +2317,12 @@ extern "C" {
|
|||
# undef HAVE_SNPRINTF
|
||||
# undef HAVE_VSNPRINTF
|
||||
#elif (ACC_CC_INTELC)
|
||||
# ifndef snprintf
|
||||
# define snprintf _snprintf
|
||||
# endif
|
||||
# ifndef vsnprintf
|
||||
# define vsnprintf _vsnprintf
|
||||
# endif
|
||||
#elif (ACC_CC_LCCWIN32)
|
||||
# define utime _utime
|
||||
#elif (ACC_CC_MSC)
|
||||
|
@ -2324,8 +2333,16 @@ extern "C" {
|
|||
# undef HAVE_SNPRINTF
|
||||
# undef HAVE_VSNPRINTF
|
||||
# elif (_MSC_VER < 1500)
|
||||
# ifndef snprintf
|
||||
# define snprintf _snprintf
|
||||
# endif
|
||||
# ifndef vsnprintf
|
||||
# define vsnprintf _vsnprintf
|
||||
# endif
|
||||
# else
|
||||
# ifndef snprintf
|
||||
# define snprintf _snprintf
|
||||
# endif
|
||||
# endif
|
||||
# if ((_MSC_VER < 800) && ACC_OS_WIN16)
|
||||
# undef HAVE_ALLOCA
|
||||
|
|
|
@ -167,7 +167,7 @@ PackLinuxElf::PackLinuxElf(InputFile *f)
|
|||
|
||||
PackLinuxElf::~PackLinuxElf()
|
||||
{
|
||||
delete[] file_image;
|
||||
delete[] file_image; file_image = NULL;
|
||||
}
|
||||
|
||||
void PackLinuxElf::pack3(OutputFile *fo, Filter &ft)
|
||||
|
@ -400,6 +400,7 @@ PackLinuxElf32::PackLinuxElf32(InputFile *f)
|
|||
shstrtab(NULL), n_elf_shnum(0),
|
||||
sec_strndx(NULL), sec_dynsym(NULL), sec_dynstr(NULL)
|
||||
{
|
||||
memset(&ehdri, 0, sizeof(ehdri));
|
||||
if (f) {
|
||||
f->seek(0, SEEK_SET);
|
||||
f->readx(&ehdri, sizeof(ehdri));
|
||||
|
@ -408,7 +409,7 @@ PackLinuxElf32::PackLinuxElf32(InputFile *f)
|
|||
|
||||
PackLinuxElf32::~PackLinuxElf32()
|
||||
{
|
||||
delete[] phdri;
|
||||
delete[] phdri; phdri = NULL;
|
||||
}
|
||||
|
||||
PackLinuxElf64::PackLinuxElf64(InputFile *f)
|
||||
|
@ -417,6 +418,7 @@ PackLinuxElf64::PackLinuxElf64(InputFile *f)
|
|||
shstrtab(NULL), n_elf_shnum(0),
|
||||
sec_strndx(NULL), sec_dynsym(NULL), sec_dynstr(NULL)
|
||||
{
|
||||
memset(&ehdri, 0, sizeof(ehdri));
|
||||
if (f) {
|
||||
f->seek(0, SEEK_SET);
|
||||
f->readx(&ehdri, sizeof(ehdri));
|
||||
|
@ -425,7 +427,7 @@ PackLinuxElf64::PackLinuxElf64(InputFile *f)
|
|||
|
||||
PackLinuxElf64::~PackLinuxElf64()
|
||||
{
|
||||
delete[] phdri;
|
||||
delete[] phdri; phdri = NULL;
|
||||
}
|
||||
|
||||
Linker* PackLinuxElf64amd::newLinker() const
|
||||
|
@ -2033,9 +2035,6 @@ void PackLinuxElf64::pack2(OutputFile *fo, Filter &ft)
|
|||
throwEOFException();
|
||||
}
|
||||
|
||||
#include "bele.h"
|
||||
using namespace N_BELE_CTP;
|
||||
|
||||
// Filter 0x50, 0x51 assume HostPolicy::isLE
|
||||
static const int *
|
||||
ARM_getFilters(bool const isBE)
|
||||
|
|
|
@ -861,6 +861,8 @@ unsigned PackMachBase<T>::find_SEGMENT_gap(
|
|||
}
|
||||
unsigned const hi = msegcmd[k].fileoff + msegcmd[k].filesize;
|
||||
unsigned lo = ph.u_file_size;
|
||||
if (lo < hi)
|
||||
throwCantPack("bad input: LC_SEGMENT beyond end-of-file");
|
||||
unsigned j = k;
|
||||
for (;;) { // circular search, optimize for adjacent ascending
|
||||
++j;
|
||||
|
|
|
@ -986,11 +986,14 @@ void PackVmlinuxPPC32::buildLoader(const Filter *ft)
|
|||
addFilter32(ft->id);
|
||||
}
|
||||
addLoader("LINUX030", NULL);
|
||||
if (ph.method == M_NRV2E_LE32) addLoader("NRV2E", NULL);
|
||||
else if (ph.method == M_NRV2B_LE32) addLoader("NRV2B", NULL);
|
||||
else if (ph.method == M_NRV2D_LE32) addLoader("NRV2D", NULL);
|
||||
if (ph.method == M_NRV2E_LE32) addLoader("NRV2E,NRV_TAIL", NULL);
|
||||
else if (ph.method == M_NRV2B_LE32) addLoader("NRV2B,NRV_TAIL", NULL);
|
||||
else if (ph.method == M_NRV2D_LE32) addLoader("NRV2D,NRV_TAIL", NULL);
|
||||
else if (M_IS_LZMA(ph.method)) addLoader("LZMA_ELF00,LZMA_DEC10,LZMA_DEC30", NULL);
|
||||
else throwBadLoader();
|
||||
if (hasLoaderSection("CFLUSH"))
|
||||
addLoader("CFLUSH");
|
||||
|
||||
addLoader("IDENTSTR,UPX1HEAD", NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -162,54 +162,72 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
|
|||
{
|
||||
if ((p = func(new PackDjgpp2(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackTmt(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackWcle(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
#if 0
|
||||
if ((p = func(new PackVxd(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
#endif
|
||||
#if 0
|
||||
if ((p = func(new PackW16Ne(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
#endif
|
||||
if ((p = func(new PackW32Pe(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
}
|
||||
if ((p = func(new PackArmPe(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackExe(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
//
|
||||
// atari
|
||||
//
|
||||
if ((p = func(new PackTos(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
//
|
||||
// linux kernel
|
||||
//
|
||||
if ((p = func(new PackVmlinuxARMEL(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuxARMEB(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuxPPC32(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuxAMD64(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuxI386(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuzI386(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackBvmlinuzI386(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackVmlinuzARMEL(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
#if 0
|
||||
if ((p = func(new PackElks8086(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
#endif
|
||||
|
||||
//
|
||||
|
@ -222,75 +240,101 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
|
|||
{
|
||||
if ((p = func(new PackLinuxI386sep(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
}
|
||||
#endif
|
||||
if (o->o_unix.use_ptinterp) {
|
||||
if ((p = func(new PackLinuxElf32x86interp(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
}
|
||||
if ((p = func(new PackFreeBSDElf32x86(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackNetBSDElf32x86(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackOpenBSDElf32x86(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32x86(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf64amd(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32armLe(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32armBe(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32mipsel(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxElf32mipseb(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxI386sh(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
}
|
||||
if ((p = func(new PackBSDI386(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackMachFat(f), user)) != NULL) // cafebabe conflict
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackLinuxI386(f), user)) != NULL) // cafebabe conflict
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
//
|
||||
// psone
|
||||
//
|
||||
if ((p = func(new PackPs1(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
//
|
||||
// .sys and .com
|
||||
//
|
||||
if ((p = func(new PackSys(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackCom(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
// Mach (MacOS X PowerPC)
|
||||
if ((p = func(new PackMachPPC32(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackMachI386(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackMachAMD64(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
if ((p = func(new PackMachARMEL(f), user)) != NULL)
|
||||
return p;
|
||||
delete p; p = NULL;
|
||||
|
||||
// 2010-03-12 omit these because PackMachBase<T>::pack4dylib (p_mach.cpp)
|
||||
// does not understand what the Darwin (Apple Mac OS X) dynamic loader
|
||||
// assumes about .dylib file structure.
|
||||
//if ((p = func(new PackDylibI386(f), user)) != NULL)
|
||||
// return p;
|
||||
//delete p; p = NULL;
|
||||
//if ((p = func(new PackDylibPPC32(f), user)) != NULL)
|
||||
// return p;
|
||||
//delete p; p = NULL;
|
||||
//if ((p = func(new PackDylibAMD64(f), user)) != NULL)
|
||||
// return p;
|
||||
//delete p; p = NULL;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -214,7 +214,7 @@ protected:
|
|||
DLL_FLAG = 0x2000,
|
||||
FBIG_ENDIAN = 0x8000
|
||||
};
|
||||
|
||||
|
||||
//NEW: DLL characteristics definition for ASLR, ... - Stefan Widmann
|
||||
enum {
|
||||
IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -90,6 +90,42 @@ section NRV2D
|
|||
section NRV2E
|
||||
#include "arch/powerpc/32/nrv2e_d.S"
|
||||
|
||||
section NRV_TAIL
|
||||
eof_nrv:
|
||||
#define dst0 a4
|
||||
#define tmp a1
|
||||
lwz dst0,0(ldst) // original dst
|
||||
mtlr t3 // return address
|
||||
subf a0,lsrc,src
|
||||
subf tmp,dst0,dst // -1+ dst length
|
||||
addi a0,a0,1 // return 0: good; else: bad [+1: correct for lbzu]
|
||||
addi tmp,tmp,1 // dst length
|
||||
stw tmp,0(ldst)
|
||||
#undef tmp
|
||||
|
||||
// CACHELINE=32 is the observed minimum line size of any cache.
|
||||
// Some caches may have larger lines, but it is cumbersome to lookup
|
||||
// {AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE: /usr/include/elf.h},
|
||||
// then save the correct size in a variable {where to put it?}, or to modify
|
||||
// the two instructions here. If a cache has larger lines, then we expect
|
||||
// that the second dcbst (or icbi) on a the same line will be fast.
|
||||
// If not, then too bad.
|
||||
|
||||
section CFLUSH // In: a2=dst= &highest stored byte; a4=dst0= &lowest stored byte
|
||||
CACHELINE=32
|
||||
ori dst0,dst0,-1+ CACHELINE // highest addr on cache line
|
||||
cfl_nrv:
|
||||
dcbst 0,dst0 // initiate store (modified) cacheline to memory
|
||||
cmpl cr0,dst0,dst // did we cover the highest-addressed byte?
|
||||
icbi 0,dst0 // discard instructions from cacheline
|
||||
addi dst0,dst0,CACHELINE // highest addr on next line
|
||||
blt cr0,cfl_nrv // not done yet
|
||||
#undef dst0
|
||||
sync // wait for all memory operations to finish
|
||||
isync // discard prefetched instructions (if any)
|
||||
cfl_ret:
|
||||
ret
|
||||
|
||||
#undef hibit
|
||||
|
||||
#undef src
|
||||
|
|
61
src/stub/tmp/amd64-darwin.dylib-entry.bin.dump
Normal file
61
src/stub/tmp/amd64-darwin.dylib-entry.bin.dump
Normal file
|
@ -0,0 +1,61 @@
|
|||
file format elf64-x86-64
|
||||
|
||||
Sections:
|
||||
Idx Name Size VMA LMA File off Algn Flags
|
||||
0 MACHMAINX 00000015 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
|
||||
1 NRV_HEAD 00000066 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, READONLY
|
||||
2 NRV2E 000000b7 0000000000000000 0000000000000000 000000bb 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 0000009e 0000000000000000 0000000000000000 00000172 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000090 0000000000000000 0000000000000000 00000210 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 000002a0 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 00000304 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000cfb 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 000016f2 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 00000000 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY
|
||||
10 MACHMAINY 00000011 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY
|
||||
11 MACHMAINZ 00000135 0000000000000000 0000000000000000 00001717 2**0 CONTENTS, RELOC, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX
|
||||
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY
|
||||
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
|
||||
0000000000000000 l d NRV2E 0000000000000000 NRV2E
|
||||
0000000000000000 l d NRV2D 0000000000000000 NRV2D
|
||||
0000000000000000 l d NRV2B 0000000000000000 NRV2B
|
||||
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
|
||||
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
|
||||
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
|
||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||
0000000000000000 g MACHMAINX 0000000000000000 _start
|
||||
0000000000000011 g MACHMAINY 0000000000000000 end_decompress
|
||||
|
||||
RELOCATION RECORDS FOR [MACHMAINX]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000009 R_X86_64_PC32 MACHMAINZ+0xffffffffffffffff
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2E]:
|
||||
OFFSET TYPE VALUE
|
||||
00000000000000ae R_X86_64_PC32 NRV_HEAD+0x0000000000000021
|
||||
000000000000005b R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2D]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000095 R_X86_64_PC32 NRV_HEAD+0x0000000000000021
|
||||
000000000000005b R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2B]:
|
||||
OFFSET TYPE VALUE
|
||||
000000000000008a R_X86_64_PC32 NRV_HEAD+0x0000000000000021
|
||||
0000000000000052 R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000006 R_X86_64_PC32 LZMA_DEC30+0x0000000000000010
|
||||
|
||||
RELOCATION RECORDS FOR [MACHMAINZ]:
|
||||
OFFSET TYPE VALUE
|
||||
000000000000000f R_X86_64_32 MACHMAINZ+0x0000000000000135
|
||||
0000000000000014 R_X86_64_32 MACHMAINX+0x000000000000000d
|
||||
0000000000000048 R_X86_64_32 MACHMAINZ+0x0000000000000135
|
||||
000000000000004e R_X86_64_32 MACHMAINX+0x000000000000000d
|
|
@ -9,21 +9,25 @@ Idx Name Size VMA LMA File off Algn Flags
|
|||
4 NRV2B 000000f0 00000000 00000000 000000a8 2**0 CONTENTS, RELOC, READONLY
|
||||
5 NRV2D 0000012c 00000000 00000000 00000198 2**0 CONTENTS, RELOC, READONLY
|
||||
6 NRV2E 00000148 00000000 00000000 000002c4 2**0 CONTENTS, RELOC, READONLY
|
||||
7 LZMA 00000000 00000000 00000000 0000040c 2**0 CONTENTS, READONLY
|
||||
8 LZMA_ELF00 0000008c 00000000 00000000 0000040c 2**0 CONTENTS, RELOC, READONLY
|
||||
9 LZMA_DEC10 0000099c 00000000 00000000 00000498 2**0 CONTENTS, READONLY
|
||||
10 LZMA_DEC20 0000099c 00000000 00000000 00000e34 2**0 CONTENTS, READONLY
|
||||
11 LZMA_DEC30 00000020 00000000 00000000 000017d0 2**0 CONTENTS, READONLY
|
||||
12 UPX1HEAD 00000020 00000000 00000000 000017f0 2**0 CONTENTS, READONLY
|
||||
7 NRV_TAIL 0000001c 00000000 00000000 0000040c 2**0 CONTENTS, READONLY
|
||||
8 CFLUSH 00000024 00000000 00000000 00000428 2**0 CONTENTS, READONLY
|
||||
9 LZMA 00000000 00000000 00000000 0000044c 2**0 CONTENTS, READONLY
|
||||
10 LZMA_ELF00 0000008c 00000000 00000000 0000044c 2**0 CONTENTS, RELOC, READONLY
|
||||
11 LZMA_DEC10 0000099c 00000000 00000000 000004d8 2**0 CONTENTS, READONLY
|
||||
12 LZMA_DEC20 0000099c 00000000 00000000 00000e74 2**0 CONTENTS, READONLY
|
||||
13 LZMA_DEC30 00000020 00000000 00000000 00001810 2**0 CONTENTS, READONLY
|
||||
14 UPX1HEAD 00000020 00000000 00000000 00001830 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
00000000 l d LINUX020 00000000 LINUX020
|
||||
00000000 l d LINUX030 00000000 LINUX030
|
||||
00000000 l d NRV_TAIL 00000000 NRV_TAIL
|
||||
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
|
||||
00000000 l d LINUX000 00000000 LINUX000
|
||||
00000000 l d LINUX010 00000000 LINUX010
|
||||
00000000 l d NRV2B 00000000 NRV2B
|
||||
00000000 l d NRV2D 00000000 NRV2D
|
||||
00000000 l d NRV2E 00000000 NRV2E
|
||||
00000000 l d CFLUSH 00000000 CFLUSH
|
||||
00000000 l d LZMA 00000000 LZMA
|
||||
00000000 l d LZMA_ELF00 00000000 LZMA_ELF00
|
||||
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
|
||||
|
@ -31,7 +35,6 @@ SYMBOL TABLE:
|
|||
00000000 l d UPX1HEAD 00000000 UPX1HEAD
|
||||
00000000 *UND* 00000000 filter_length
|
||||
00000000 *UND* 00000000 filter_cto
|
||||
00000000 *UND* 00000000 eof_nrv
|
||||
|
||||
RELOCATION RECORDS FOR [LINUX000]:
|
||||
OFFSET TYPE VALUE
|
||||
|
@ -45,15 +48,15 @@ OFFSET TYPE VALUE
|
|||
|
||||
RELOCATION RECORDS FOR [NRV2B]:
|
||||
OFFSET TYPE VALUE
|
||||
00000090 R_PPC_REL14 eof_nrv
|
||||
00000090 R_PPC_REL14 NRV_TAIL
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2D]:
|
||||
OFFSET TYPE VALUE
|
||||
000000b4 R_PPC_REL14 eof_nrv
|
||||
000000b4 R_PPC_REL14 NRV_TAIL
|
||||
|
||||
RELOCATION RECORDS FOR [NRV2E]:
|
||||
OFFSET TYPE VALUE
|
||||
000000b4 R_PPC_REL14 eof_nrv
|
||||
000000b4 R_PPC_REL14 NRV_TAIL
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#define UPX_VERSION_HEX 0x030500 /* 03.05.00 */
|
||||
#define UPX_VERSION_STRING "3.05"
|
||||
#define UPX_VERSION_STRING4 "3.05"
|
||||
#define UPX_VERSION_DATE "Apr 27th 2010"
|
||||
#define UPX_VERSION_DATE_ISO "2010-04-27"
|
||||
#define UPX_VERSION_HEX 0x030600 /* 03.06.00 */
|
||||
#define UPX_VERSION_STRING "3.06"
|
||||
#define UPX_VERSION_STRING4 "3.06"
|
||||
#define UPX_VERSION_DATE "Apr 28th 2010"
|
||||
#define UPX_VERSION_DATE_ISO "2010-04-28"
|
||||
#define UPX_VERSION_YEAR "2010"
|
||||
|
|
Loading…
Reference in New Issue
Block a user