i386-darwin.macho re-implementation, especially for MacOS <= 10.8.x (Mountain Lion)

[i386 will not be supported by new MacOS beginning fall 2019.]
https://github.com/upx/upx/issues/246
	modified:   p_mach.cpp
	modified:   stub/i386-darwin.macho-entry.h
	modified:   stub/i386-darwin.macho-fold.h
	modified:   stub/i386-darwin.macho-upxmain.exe
	modified:   stub/i386-darwin.macho-upxmain.h
	new file:   stub/src/arch/i386/bxx.S
	new file:   stub/src/arch/i386/nrv2b_d32-easy.S
	new file:   stub/src/arch/i386/nrv2d_d32-easy.S
	new file:   stub/src/arch/i386/nrv2e_d32-easy.S
	modified:   stub/src/i386-darwin.macho-entry.S
	modified:   stub/src/i386-darwin.macho-fold.S
	modified:   stub/src/i386-darwin.macho-main.c
	modified:   stub/src/i386-darwin.macho-upxmain.c
	modified:   stub/tmp/i386-darwin.macho-entry.bin.dump
	modified:   stub/tmp/i386-darwin.macho-fold.map
This commit is contained in:
John Reiser 2019-03-02 15:39:30 -08:00
parent d4e2d7e8a8
commit 3de0008543
15 changed files with 2063 additions and 3750 deletions

View File

@ -269,84 +269,22 @@ PackMachBase<T>::addStubEntrySections(Filter const *)
addLoader("ELFMAINY,IDENTSTR,+40,ELFMAINZ,FOLDEXEC", NULL);
}
void PackMachI386::addStubEntrySections(Filter const *ft)
void PackMachI386::addStubEntrySections(Filter const * /*ft*/)
{
int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf?
if (Mach_header::MH_EXECUTE == my_filetype) {
addLoader("I386BXX0", NULL); // .word offset to f_exp
addLoader("MACHMAINX", NULL); // different for MY_DYLIB vs MH_EXECUTE
if (my_filetype==Mach_header::MH_EXECUTE) {
addLoader("MACH_UNC", NULL);
}
else {
addLoader("LEXEC000", NULL); // entry to stub
}
if (ft->id) { // decompr, unfilter are separate
if (Mach_header::MH_EXECUTE != my_filetype) {
addLoader("LXUNF000", NULL); // 2-byte jump to f_exp
}
addLoader("LXUNF002", NULL); // entry to f_unf
// prolog to f_unf
if (0x80==(ft->id & 0xF0)) {
if (256==n_mru) {
addLoader("MRUBYTE0", NULL);
}
else if (n_mru) {
addLoader("LXMRU005", NULL);
}
if (n_mru) {
addLoader("LXMRU006", NULL);
}
else {
addLoader("LXMRU007", NULL);
}
}
else {
if (0x40==(ft->id & 0xF0)) {
addLoader("LXUNF008", NULL);
}
}
if (Mach_header::MH_EXECUTE == my_filetype) {
addFilter32(ft->id); // f_unf body
if (0x80==(ft->id & 0xF0)) {
if (0==n_mru) {
addLoader("LXMRU058", NULL);
}
}
addLoader("LXUNF035", NULL); // epilog to f_unf
}
else { // MH_DYLIB
addLoader("LXUNF010", NULL); // jmp32 lxunf0 # to rest of f_unf
if (n_mru) {
addLoader("LEXEC009", NULL); // empty (unify source with other cases)
}
}
}
if (Mach_header::MH_EXECUTE == my_filetype) {
addLoader("I386BXX1", NULL);
}
addLoader("LEXEC010", NULL); // prolog to f_exp
addLoader(getDecompressorSections(), NULL);
addLoader("LEXEC015", NULL); // epilog to f_exp
if (ft->id) {
if (Mach_header::MH_EXECUTE != my_filetype) {
if (0x80!=(ft->id & 0xF0)) {
addLoader("LXUNF042", NULL); // lxunf0:
}
addFilter32(ft->id); // body of f_unf
if (0x80==(ft->id & 0xF0)) {
if (0==n_mru) {
addLoader("LXMRU058", NULL);
}
}
addLoader("LXUNF035", NULL); // epilog to f_unf
}
}
else {
addLoader("LEXEC017", NULL); // epilog to f_exp
}
addLoader("IDENTSTR", NULL);
addLoader("LEXEC020", NULL);
addLoader("FOLDEXEC", NULL);
//addLoader(getDecompressorSections(), NULL);
addLoader(
( M_IS_NRV2E(ph.method) ? "NRV_HEAD,NRV2E,NRV_TAIL"
: M_IS_NRV2D(ph.method) ? "NRV_HEAD,NRV2D,NRV_TAIL"
: M_IS_NRV2B(ph.method) ? "NRV_HEAD,NRV2B,NRV_TAIL"
: M_IS_LZMA(ph.method) ? "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30"
: NULL), NULL);
if (hasLoaderSection("CFLUSH"))
addLoader("CFLUSH");
addLoader("MACHMAINY,IDENTSTR,+40,MACHMAINZ,FOLDEXEC", NULL);
}
void PackMachAMD64::addStubEntrySections(Filter const * /*ft*/)
@ -593,8 +531,6 @@ void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft) // append PackHeader
mhp->cpusubtype = my_cpusubtype;
mhp->flags = mhdro.flags;
char *tail = (char *)(1+ mhp);
Mach_section_command *sectxt = 0; // in temp for output
unsigned txt_addr = 0;
char *const lcp_end = mhdro.sizeofcmds + tail;
Mach_command *lcp = (Mach_command *)(1+ mhp);
Mach_command *lcp_next;
@ -615,8 +551,6 @@ void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft) // append PackHeader
segptr->vmsize = pagezero_vmsize;
}
if (!strcmp("__TEXT", segptr->segname)) {
sectxt = (Mach_section_command *)(1+ segptr);
txt_addr = sectxt->addr;
sz_cmd = (segTEXT.nsects * sizeof(secTEXT)) + sizeof(segTEXT);
mhp->sizeofcmds += sizeof(secTEXT) * (1 - segptr->nsects);
memcpy(tail, &segTEXT, sz_cmd); tail += sz_cmd;
@ -627,6 +561,16 @@ void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft) // append PackHeader
delta = offLINK - segptr->fileoff; // relocation constant
sz_cmd = sizeof(segLINK);
if (Mach_header::CPU_TYPE_I386==mhdri.cputype
&& Mach_header::MH_EXECUTE==mhdri.filetype) {
segLINK.maxprot = 0
| Mach_command::VM_PROT_EXECUTE
| Mach_command::VM_PROT_WRITE
| Mach_command::VM_PROT_READ;
segLINK.initprot = 0
| Mach_command::VM_PROT_WRITE
| Mach_command::VM_PROT_READ;
}
memcpy(tail, &segLINK, sz_cmd); tail += sz_cmd;
goto next;
}
@ -677,8 +621,6 @@ void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft) // append PackHeader
skip = 1;
} break;
case Mach_command::LC_UNIXTHREAD: { // pre-LC_MAIN
threado_setPC(secTEXT.addr +
(threadc_getPC(lcp) - txt_addr));
skip = 1;
} break;
case Mach_command::LC_LOAD_DYLIB: {

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* i386-darwin.macho-fold.h
created from i386-darwin.macho-fold.bin, 1135 (0x46f) bytes
created from i386-darwin.macho-fold.bin, 1457 (0x5b1) bytes
This file is part of the UPX executable compressor.
@ -31,80 +31,101 @@
*/
#define STUB_I386_DARWIN_MACHO_FOLD_SIZE 1135
#define STUB_I386_DARWIN_MACHO_FOLD_ADLER32 0x768a14b0
#define STUB_I386_DARWIN_MACHO_FOLD_CRC32 0x8d0be2e9
#define STUB_I386_DARWIN_MACHO_FOLD_SIZE 1457
#define STUB_I386_DARWIN_MACHO_FOLD_ADLER32 0x0e3ea459
#define STUB_I386_DARWIN_MACHO_FOLD_CRC32 0x4f83c5ec
unsigned char stub_i386_darwin_macho_fold[1135] = {
/* 0x0000 */ 106, 0,137,231,141,117, 2,139, 19,137,217, 41,209,139, 89, 24,
/* 0x0010 */ 184, 0, 8, 0, 0, 57,216,118, 2,137,195, 41,220, 96,232, 30,
/* 0x0020 */ 3, 0, 0,139, 76, 36, 16,141,100, 12, 32,255, 96, 40,139, 68,
/* 0x0030 */ 36, 4,139, 76, 36, 8,139, 16, 15,202,137, 16,131,233, 4,141,
/* 0x0040 */ 64, 4,115,242,195, 90, 15, 52,176, 4,235, 2,176, 1,235, 2,
/* 0x0050 */ 176, 74,235, 2,176, 73,235, 2,176,153,235, 2,176, 6,235, 2,
/* 0x0060 */ 176, 5,235, 2,176,197,235, 2,176, 3, 15,182,192,137,225,232,
/* 0x0070 */ 209,255,255,255,115, 3,131,200,255,195,144,144, 85,137,229, 87,
/* 0x0080 */ 86,139,125, 8, 83,137,195, 57, 56,139,112, 4,115, 7,106,127,
/* 0x0090 */ 232,183,255,255,255,133,255,116, 10,137,249,138, 6, 70,136, 2,
/* 0x00a0 */ 66,226,248, 1,123, 4, 41, 59,141,101,244, 91, 94, 95,201,195,
/* 0x00b0 */ 85,137,229, 87, 86,137,198, 83,137,211,131,236, 24,139, 69, 8,
/* 0x00c0 */ 139,125, 12,137, 69,220,131, 58, 0, 15,132,172, 0, 0, 0,141,
/* 0x00d0 */ 85,228,137,240,106, 12,232,161,255,255,255,139, 69,228, 90,133,
/* 0x00e0 */ 192,139, 77,232,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62,
/* 0x00f0 */ 0, 15,132,132, 0, 0, 0,235, 4,133,201,117, 7,106,127,232,
/* 0x0100 */ 72,255,255,255, 57,193,119,245, 59, 3,119,241, 57,193,115, 76,
/* 0x0110 */ 137, 69,224, 15,182, 69,236, 80,141, 69,224, 80,255,115, 4, 81,
/* 0x0120 */ 255,118, 4,255, 85,220,131,196, 20,133,192,117,208,139, 85,224,
/* 0x0130 */ 59, 85,228,117,200,138, 69,237,132,192,116, 22,133,255,116, 18,
/* 0x0140 */ 15,182,192, 80, 15,182, 69,238, 80, 82,255,115, 4,255,215,131,
/* 0x0150 */ 196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 12,139, 83, 4, 81,
/* 0x0160 */ 137,240,232, 21,255,255,255, 88,139, 85,228,139, 3, 1, 83, 4,
/* 0x0170 */ 41,208,133,192,137, 3,233, 78,255,255,255,141,101,244, 91, 94,
/* 0x0180 */ 95,201,195, 85,137,229, 87, 86, 83,131,236, 56,137, 69,232,139,
/* 0x0190 */ 69, 8,137, 85,228,139, 85, 12,199, 69,208, 0, 0, 0, 0,137,
/* 0x01a0 */ 69,224,139, 69, 20,137, 85,220,139, 85, 24,137, 69,216,139,117,
/* 0x01b0 */ 232,139, 69,232,137, 85,212, 49,210,131,198, 28,199, 69,204, 0,
/* 0x01c0 */ 0, 0, 0, 59, 80, 16, 15,131,106, 1, 0, 0,139, 6,131,248,
/* 0x01d0 */ 1, 15,133, 49, 1, 0, 0,139, 94, 28,133,219, 15,132, 38, 1,
/* 0x01e0 */ 0, 0,139, 86, 24,139, 78, 36,141, 28, 26,137,208, 37,255, 15,
/* 0x01f0 */ 0, 0,137,207,137, 93,200,137,211, 41,195, 1,199,137, 77,236,
/* 0x0200 */ 137, 85,240,116, 76,131,125,224, 0,137,125,196,116, 8,141, 71,
/* 0x0210 */ 3,137, 69,196,235, 11,133,201,199, 69,192, 18, 0, 0, 0,117,
/* 0x0220 */ 7,199, 69,192, 18, 16, 0, 0,133,201,139, 85,220,117, 3,131,
/* 0x0230 */ 202,255,139, 69,228, 3, 70, 32,106, 0, 80, 82,255,117,192,106,
/* 0x0240 */ 3,255,117,196, 83,232, 26,254,255,255,131,196, 28, 57,195,117,
/* 0x0250 */ 94,131,125,224, 0,116, 42,131,126, 36, 0,116, 36,131,126, 32,
/* 0x0260 */ 0,117, 11,131,125, 16, 0,116, 5,139, 85, 16,137, 26,255,117,
/* 0x0270 */ 212,255,117,216,141, 85,236,139, 69,224,232, 49,254,255,255, 88,
/* 0x0280 */ 90,137,248,141, 20, 59,247,216, 37,255, 15, 0, 0,137, 69,188,
/* 0x0290 */ 116, 8,137,193,198, 2, 0, 66,226,250,133,255,116, 24,255,118,
/* 0x02a0 */ 44, 87, 83,232,168,253,255,255,131,196, 12,133,192,116, 7,106,
/* 0x02b0 */ 127,232,150,253,255,255,139, 85,188,141, 4, 23, 1,195, 59, 93,
/* 0x02c0 */ 200,115, 39,133,219,116, 91,106, 0,106, 0,106,255,104, 18, 16,
/* 0x02d0 */ 0, 0,255,118, 44, 41, 93,200,255,117,200, 83,232,131,253,255,
/* 0x02e0 */ 255,131,196, 28, 57,195,116, 58,235,197,131,125,224, 0,116, 50,
/* 0x02f0 */ 141, 71, 3, 37,255, 15, 0, 0,131,248, 3,119, 37, 80, 83,232,
/* 0x0300 */ 80,253,255,255, 89, 91,235, 26,131,232, 4,131,248, 1,119, 18,
/* 0x0310 */ 131,126, 8, 1,117, 12,131,126, 12, 16,117, 6,141, 70, 16,137,
/* 0x0320 */ 69,208,255, 69,204,139, 85,232,139, 69,204, 3,118, 4, 59, 66,
/* 0x0330 */ 16,233,144,254,255,255,139, 69,208,141,101,244, 91, 94, 95,201,
/* 0x0340 */ 195, 85,137,229, 87, 86, 83,131,236, 32,199, 69,212, 0, 0, 0,
/* 0x0350 */ 0,139, 85, 32,139, 69, 24,139, 93, 16,137, 69,216,139,117, 20,
/* 0x0360 */ 141, 66, 24,137,117,232,137, 69,240,139, 69, 28,131,232, 24,137,
/* 0x0370 */ 69,236,139, 66, 24,139, 85,240,106, 0,137, 69,228,139, 69,236,
/* 0x0380 */ 137, 85,224,137, 69,220,141, 85,228,141, 69,236, 83,232, 30,253,
/* 0x0390 */ 255,255,255,117, 12, 83, 49,210,255,117, 8,141, 69,220,106,255,
/* 0x03a0 */ 80,137,240,232,219,253,255,255, 49,210,137,195,141, 70, 28,131,
/* 0x03b0 */ 196, 28,139, 78, 16, 57,202, 15,131,168, 0, 0, 0,131, 56, 14,
/* 0x03c0 */ 15,133,150, 0, 0, 0, 3, 64, 8,106, 0,106, 0, 80,232,141,
/* 0x03d0 */ 252,255,255,131,196, 12,133,192,137,199,120, 23,106, 0,255,117,
/* 0x03e0 */ 212,255,117,216, 86, 87,232,109,252,255,255,131,196, 20, 57, 69,
/* 0x03f0 */ 216,116, 15,106,127,232, 82,252,255,255,139, 91, 8,137, 93,212,
/* 0x0400 */ 235,218,139, 6, 61,202,254,186,190,116, 7, 61,190,186,254,202,
/* 0x0410 */ 117, 42, 15,182, 70, 7,141, 94, 8,107,192, 20,131,192, 8, 80,
/* 0x0420 */ 86,232, 8,252,255,255, 89, 90, 49,192,139, 86, 4, 57,208,115,
/* 0x0430 */ 11,131, 59, 7,116,196, 64,131,195, 20,235,241,106, 0,139, 85,
/* 0x0440 */ 212,106, 0,137,240,106, 0, 87,106, 0,232, 52,253,255,255, 87,
/* 0x0450 */ 137,195,232, 5,252,255,255,131,196, 24,235, 9, 3, 64, 4, 66,
/* 0x0460 */ 233, 80,255,255,255,141,101,244,137,216, 91, 94, 95,201,195
unsigned char stub_i386_darwin_macho_fold[1457] = {
/* 0x0000 */ 88, 90, 89,139, 89, 24,190, 0, 8, 0, 0, 57,243,119, 2,137,
/* 0x0010 */ 243, 94,106, 0,137,231, 41,220, 96,232,103, 4, 0, 0,139,124,
/* 0x0020 */ 36, 20,139,116, 36, 28, 80, 87, 86,232, 59, 0, 0, 0, 88, 88,
/* 0x0030 */ 88,139, 76, 36, 16,141,100, 12, 32,255,224,139, 68, 36, 4,139,
/* 0x0040 */ 76, 36, 8,139, 16, 15,202,137, 16,131,233, 4,141, 64, 4,119,
/* 0x0050 */ 242,195,243,144,233,249,255,255,255,195, 90, 15, 52,176, 4,235,
/* 0x0060 */ 2,176, 1,235, 2,176, 74,235, 2,176, 73,235, 2,176,153,235,
/* 0x0070 */ 2,176, 6,235, 2,176, 5,235, 2,176,197,235, 2,176, 3, 15,
/* 0x0080 */ 182,192,137,225,232,209,255,255,255,115, 3,131,200,255,195,144,
/* 0x0090 */ 85,137,229, 87, 86,139,125, 8, 83,137,195, 57, 56,139,112, 4,
/* 0x00a0 */ 115, 7,106,127,232,184,255,255,255,133,255,116, 10,137,249,138,
/* 0x00b0 */ 6, 70,136, 2, 66,226,248, 1,123, 4, 41, 59,141,101,244, 91,
/* 0x00c0 */ 94, 95,201,195, 85,137,229, 87, 86,137,198, 83,137,211,131,236,
/* 0x00d0 */ 24,139, 69, 8,139,125, 12,137, 69,220,131, 58, 0, 15,132,172,
/* 0x00e0 */ 0, 0, 0,141, 85,228,137,240,106, 12,232,161,255,255,255,139,
/* 0x00f0 */ 69,228, 90,133,192,139, 77,232,117, 19,129,249, 85, 80, 88, 33,
/* 0x0100 */ 117, 15,131, 62, 0, 15,132,132, 0, 0, 0,235, 4,133,201,117,
/* 0x0110 */ 7,106,127,232, 73,255,255,255, 57,193,119,245, 59, 3,119,241,
/* 0x0120 */ 57,193,115, 76,137, 69,224, 15,182, 69,236, 80,141, 69,224, 80,
/* 0x0130 */ 255,115, 4, 81,255,118, 4,255, 85,220,131,196, 20,133,192,117,
/* 0x0140 */ 208,139, 85,224, 59, 85,228,117,200,138, 69,237,132,192,116, 22,
/* 0x0150 */ 133,255,116, 18, 15,182,192, 80, 15,182, 69,238, 80, 82,255,115,
/* 0x0160 */ 4,255,215,131,196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 12,
/* 0x0170 */ 139, 83, 4, 81,137,240,232, 21,255,255,255, 88,139, 85,228,139,
/* 0x0180 */ 3, 1, 83, 4, 41,208,133,192,137, 3,233, 78,255,255,255,141,
/* 0x0190 */ 101,244, 91, 94, 95,201,195, 85,137,229, 87, 86,131,206,255, 83,
/* 0x01a0 */ 131,236, 88,199, 69,192, 0, 0, 0, 0,139, 69, 8,199, 69,188,
/* 0x01b0 */ 0, 0, 0, 0,139, 85, 12,199, 69,180, 0, 0, 0, 0,137, 69,
/* 0x01c0 */ 216,139, 69, 20,139,125,216,137, 85,212,137, 69,204,139, 69,216,
/* 0x01d0 */ 139, 93, 16,131,199, 28,131,120, 12, 7,139, 85, 28,137, 93,208,
/* 0x01e0 */ 139, 93, 32,137, 85,200,139, 72, 16,137, 93,196,137,250,116, 14,
/* 0x01f0 */ 139, 93,216,184, 16, 0, 0, 0,246, 67, 26, 32,116, 2, 49,192,
/* 0x0200 */ 5, 2, 16, 0, 0,133,201,137, 69,164,126, 77,131, 58, 1,117,
/* 0x0210 */ 62,139, 66, 28,133,192,137, 69,156,116, 52,139, 66, 24,133,192,
/* 0x0220 */ 117, 6,246, 69,164, 16,117, 39,139, 93,216,131,123, 12, 7,117,
/* 0x0230 */ 13,131,254,255,117, 8,133,192,116, 4,131, 77,164, 16, 57,198,
/* 0x0240 */ 118, 2,137,198, 3, 69,156, 57, 69,180,115, 3,137, 69,180,139,
/* 0x0250 */ 66, 4,131,224,252, 1,194,226,179,129,230, 0,240,255,255, 41,
/* 0x0260 */ 117,180,139, 93,180,129,195,255, 15, 0, 0,129,227, 0,240,255,
/* 0x0270 */ 255,246, 69,164, 16,116, 12, 83, 86,137,117,188,232,232,253,255,
/* 0x0280 */ 255, 88, 90,106, 0,106, 0,106,255,255,117,164,106, 0, 83,255,
/* 0x0290 */ 117,188,232,226,253,255,255,131,196, 28, 41,240,199, 69,176, 0,
/* 0x02a0 */ 0, 0, 0,137, 69,184, 49,210,139, 69,216, 59, 80, 16, 15,131,
/* 0x02b0 */ 198, 1, 0, 0,131, 63, 1,117, 29,131,127, 28, 0,117, 23,139,
/* 0x02c0 */ 69,208,141, 85,228,106, 12,232,196,253,255,255,139, 93,208,139,
/* 0x02d0 */ 69,232, 1, 67, 4, 89,139, 7,131,248, 1, 15,133,111, 1, 0,
/* 0x02e0 */ 0,139, 95, 28,133,219, 15,132,100, 1, 0, 0,139, 79, 36,139,
/* 0x02f0 */ 85,184,137, 77,220,137,206, 3, 87, 24, 1,211,137,208, 37,255,
/* 0x0300 */ 15, 0, 0,137, 93,172,137,211,137, 85,224, 41,195, 1,198,116,
/* 0x0310 */ 89,131,125,208, 0,117, 11,133,201,199, 69,168, 18, 0, 0, 0,
/* 0x0320 */ 117, 13,131,125,208, 0,199, 69,168, 18, 16, 0, 0,117, 7,133,
/* 0x0330 */ 201,139, 85,204,117, 3,131,202,255,139, 69,212, 3, 71, 32,106,
/* 0x0340 */ 0, 80, 82,255,117,168,106, 3, 86, 83,232, 42,253,255,255,131,
/* 0x0350 */ 196, 28, 57,216, 15,133,157, 0, 0, 0,131,125, 24, 0,116, 10,
/* 0x0360 */ 139, 69, 24,131, 56, 0,117, 2,137, 24,131,125,208, 0,116, 89,
/* 0x0370 */ 131,127, 36, 0,116, 30,131,127, 32, 0,117, 5,139, 85, 24,137,
/* 0x0380 */ 26,255,117,196,255,117,200,141, 85,220,139, 69,208,232, 50,253,
/* 0x0390 */ 255,255, 88, 90,131,125,208, 0,116, 47,133,246,116, 43,131,127,
/* 0x03a0 */ 32, 0,117, 37,131,127, 48, 0,116, 31,137,248, 43, 69,216,131,
/* 0x03b0 */ 224,252,139, 68, 3, 96,131,224,252,141, 4, 3,199, 64,248,144,
/* 0x03c0 */ 15, 5,195,131,232, 8,137, 69,192,137,240,141, 20, 30,247,216,
/* 0x03d0 */ 37,255, 15, 0, 0,137, 69,160,116, 8,137,193,198, 2, 0, 66,
/* 0x03e0 */ 226,250,133,246,116, 24,255,119, 44, 86, 83,232,117,252,255,255,
/* 0x03f0 */ 131,196, 12,133,192,116, 7,106,127,232, 99,252,255,255,139, 85,
/* 0x0400 */ 160,141, 4, 22, 1,195, 59, 93,172,115, 39,133,219,116, 88,106,
/* 0x0410 */ 0,106, 0,106,255,104, 18, 16, 0, 0,255,119, 44, 41, 93,172,
/* 0x0420 */ 255,117,172, 83,232, 80,252,255,255,131,196, 28, 57,195,116, 55,
/* 0x0430 */ 235,197,131,125,208, 0,116, 47,141, 70, 3, 37,255, 15, 0, 0,
/* 0x0440 */ 131,248, 3,119, 34, 80, 83,232, 29,252,255,255, 89, 91,235, 23,
/* 0x0450 */ 131,125,208, 0,117, 17,131,232, 4,131,248, 1,119, 9,139, 93,
/* 0x0460 */ 184, 3, 95, 56,137, 93,192,139, 71, 4,255, 69,176,131,224,252,
/* 0x0470 */ 139, 85,176, 1,199,233, 46,254,255,255,139, 69,192,141,101,244,
/* 0x0480 */ 91, 94, 95,201,195, 85,137,229, 87, 86, 83,131,236, 32,199, 69,
/* 0x0490 */ 212, 0, 0, 0, 0,139, 85, 32,139, 69, 24,139, 93, 16,137, 69,
/* 0x04a0 */ 216,139,125, 20,141, 66, 24,137,125,232,137, 69,240,139, 69, 28,
/* 0x04b0 */ 131,232, 24,137, 69,236,139, 66, 24,139, 85,240,106, 0,137, 69,
/* 0x04c0 */ 228,139, 69,236,137, 85,224,137, 69,220,141, 85,228,141, 69,236,
/* 0x04d0 */ 83,232,238,251,255,255,255,117, 12, 83,255,117, 8,141, 69,220,
/* 0x04e0 */ 106,255, 80,106, 0, 87,232,172,252,255,255, 49,210,137,195,141,
/* 0x04f0 */ 71, 28,131,196, 36,139, 79, 16, 57,202, 15,131,167, 0, 0, 0,
/* 0x0500 */ 131, 56, 14, 15,133,149, 0, 0, 0, 3, 64, 8,106, 0,106, 0,
/* 0x0510 */ 80,232, 95,251,255,255,131,196, 12,133,192,137,198,120, 23,106,
/* 0x0520 */ 0,255,117,212,255,117,216, 87, 86,232, 63,251,255,255,131,196,
/* 0x0530 */ 20, 57, 69,216,116, 15,106,127,232, 36,251,255,255,139, 91, 8,
/* 0x0540 */ 137, 93,212,235,218,139, 7, 61,202,254,186,190,116, 7, 61,190,
/* 0x0550 */ 186,254,202,117, 42, 15,182, 71, 7,141, 95, 8,107,192, 20,131,
/* 0x0560 */ 192, 8, 80, 87,232,210,250,255,255, 89, 90, 49,192,139, 87, 4,
/* 0x0570 */ 57,208,115, 11,131, 59, 7,116,196, 64,131,195, 20,235,241,106,
/* 0x0580 */ 0,106, 0,106, 0, 86,106, 0,255,117,212, 87,232, 6,252,255,
/* 0x0590 */ 255, 86,137,195,232,216,250,255,255,131,196, 32,235, 9, 3, 64,
/* 0x05a0 */ 4, 66,233, 81,255,255,255,141,101,244,137,216, 91, 94, 95,201,
/* 0x05b0 */ 195
};

View File

@ -1,5 +1,5 @@
/* i386-darwin.macho-upxmain.h
created from i386-darwin.macho-upxmain.exe, 4936 (0x1348) bytes
created from i386-darwin.macho-upxmain.exe, 4688 (0x1250) bytes
This file is part of the UPX executable compressor.
@ -31,13 +31,13 @@
*/
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_SIZE 4936
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_ADLER32 0x8952e687
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_CRC32 0x20b8b848
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_SIZE 4688
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_ADLER32 0x8f7d68d7
#define STUB_I386_DARWIN_MACHO_UPXMAIN_EXE_CRC32 0x20172ebf
unsigned char stub_i386_darwin_macho_upxmain_exe[4936] = {
unsigned char stub_i386_darwin_macho_upxmain_exe[4688] = {
/* 0x0000 */ 206,250,237,254, 7, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0,
/* 0x0010 */ 13, 0, 0, 0,152, 2, 0, 0,133, 0, 0, 1, 1, 0, 0, 0,
/* 0x0010 */ 9, 0, 0, 0,104, 2, 0, 0,141, 0, 0, 0, 1, 0, 0, 0,
/* 0x0020 */ 56, 0, 0, 0, 95, 95, 80, 65, 71, 69, 90, 69, 82, 79, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -46,39 +46,39 @@ unsigned char stub_i386_darwin_macho_upxmain_exe[4936] = {
/* 0x0070 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 7, 0, 0, 0,
/* 0x0080 */ 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 95, 95,116,101,
/* 0x0090 */ 120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 84, 69,
/* 0x00a0 */ 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 25, 0, 0,
/* 0x00b0 */ 151, 6, 0, 0, 33, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00a0 */ 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 25, 0, 0,
/* 0x00b0 */ 74, 6, 0, 0,100, 9, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x00c0 */ 0, 0, 0, 0, 0, 4, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00d0 */ 95, 95,117,110,119,105,110,100, 95,105,110,102,111, 0, 0, 0,
/* 0x00e0 */ 95, 95, 84, 69, 88, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00f0 */ 184, 31, 0, 0, 72, 0, 0, 0,184, 15, 0, 0, 2, 0, 0, 0,
/* 0x00f0 */ 176, 31, 0, 0, 72, 0, 0, 0,176, 15, 0, 0, 4, 0, 0, 0,
/* 0x0100 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0110 */ 0, 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 95, 95, 68, 65,
/* 0x0120 */ 84, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
/* 0x0130 */ 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
/* 0x0140 */ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
/* 0x0150 */ 56, 0, 0, 0, 95, 95, 76, 73, 78, 75, 69, 68, 73, 84, 0, 0,
/* 0x0160 */ 0, 0, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
/* 0x0170 */ 72, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
/* 0x0180 */ 0, 0, 0, 0, 34, 0, 0,128, 48, 0, 0, 0, 0, 0, 0, 0,
/* 0x0190 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x01a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
/* 0x01b0 */ 224, 0, 0, 0, 2, 0, 0, 0, 24, 0, 0, 0,224, 16, 0, 0,
/* 0x01c0 */ 29, 0, 0, 0, 60, 18, 0, 0, 12, 1, 0, 0, 11, 0, 0, 0,
/* 0x01d0 */ 80, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,
/* 0x01e0 */ 15, 0, 0, 0, 28, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
/* 0x01f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0200 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0210 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,
/* 0x0220 */ 28, 0, 0, 0, 12, 0, 0, 0, 47,117,115,114, 47,108,105, 98,
/* 0x0230 */ 47,100,121,108,100, 0, 0, 0, 36, 0, 0, 0, 16, 0, 0, 0,
/* 0x0240 */ 0, 12, 10, 0, 0, 12, 10, 0, 42, 0, 0, 0, 16, 0, 0, 0,
/* 0x0250 */ 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0,128, 24, 0, 0, 0,
/* 0x0260 */ 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0270 */ 12, 0, 0, 0, 52, 0, 0, 0, 24, 0, 0, 0, 2, 0, 0, 0,
/* 0x0280 */ 0, 0,214, 4, 0, 0, 1, 0, 47,117,115,114, 47,108,105, 98,
/* 0x0290 */ 47,108,105, 98, 83,121,115,116,101,109, 46, 66, 46,100,121,108,
/* 0x02a0 */ 105, 98, 0, 0, 41, 0, 0, 0, 16, 0, 0, 0,224, 16, 0, 0,
/* 0x0110 */ 0, 0, 0, 0, 1, 0, 0, 0, 56, 0, 0, 0, 95, 95, 76, 73,
/* 0x0120 */ 78, 75, 69, 68, 73, 84, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
/* 0x0130 */ 80, 2, 0, 0, 0, 16, 0, 0, 80, 2, 0, 0, 7, 0, 0, 0,
/* 0x0140 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0,128,
/* 0x0150 */ 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0160 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0170 */ 0, 0, 0, 0, 0, 16, 0, 0,236, 0, 0, 0, 2, 0, 0, 0,
/* 0x0180 */ 24, 0, 0, 0,236, 16, 0, 0, 17, 0, 0, 0,184, 17, 0, 0,
/* 0x0190 */ 152, 0, 0, 0, 11, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
/* 0x01a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,
/* 0x01b0 */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x01c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x01d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x01e0 */ 0, 0, 0, 0, 14, 0, 0, 0, 28, 0, 0, 0, 12, 0, 0, 0,
/* 0x01f0 */ 47,117,115,114, 47,108,105, 98, 47,100,121,108,100, 0, 0, 0,
/* 0x0200 */ 5, 0, 0, 0, 80, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0,
/* 0x0210 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0220 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0230 */ 0, 0, 0, 0, 0, 0, 0, 0,100, 25, 0, 0, 0, 0, 0, 0,
/* 0x0240 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0250 */ 12, 0, 0, 0, 52, 0, 0, 0, 24, 0, 0, 0, 2, 0, 0, 0,
/* 0x0260 */ 11, 2,125, 0, 0, 0, 1, 0, 47,117,115,114, 47,108,105, 98,
/* 0x0270 */ 47,108,105, 98, 83,121,115,116,101,109, 46, 66, 46,100,121,108,
/* 0x0280 */ 105, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0290 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x02a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x02b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x02c0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x02d0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -182,167 +182,151 @@ unsigned char stub_i386_darwin_macho_upxmain_exe[4936] = {
/* 0x08f0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0900 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0910 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0920 */ 0, 85,137,229, 83, 87, 86,131,236, 44,139,117, 16,139, 93, 24,
/* 0x0930 */ 139, 69, 8,139, 77, 12,137, 77,240,141, 72, 24,137, 77,236,139,
/* 0x0940 */ 77,240,131,193,232,137, 77,232,137,117,228,139, 64, 24,137, 69,
/* 0x0950 */ 224,242, 15, 16, 69,232,242, 15, 17, 69,216,131,236, 8, 49,255,
/* 0x0960 */ 141, 77,232,141, 85,224, 87, 83,232, 21, 1, 0, 0,131,196, 16,
/* 0x0970 */ 131,236, 8,141, 69,216, 49,210,137,241,255,117, 28, 83,255,117,
/* 0x0980 */ 32,106,255, 80, 87,232,236, 1, 0, 0,137,242,131,196, 32,137,
/* 0x0990 */ 195,139, 74, 16,133,201, 15,132,220, 0, 0, 0,139,117, 20,141,
/* 0x09a0 */ 66, 28,131, 56, 14,116, 13, 71, 3, 64, 4, 57,207,114,243,233,
/* 0x09b0 */ 196, 0, 0, 0, 3, 64, 8,131,236, 4, 49,219, 83, 83, 80,232,
/* 0x09c0 */ 213, 5, 0, 0,131,196, 16,137, 69,212,133,192,120,119,139, 69,
/* 0x09d0 */ 16,141, 64, 16,137, 69,208, 49,255,131,236, 12, 83, 87, 86,255,
/* 0x09e0 */ 117, 16,255,117,212,232,167, 5, 0, 0,131,196, 32, 57,240,117,
/* 0x09f0 */ 84,139, 77, 16,139, 1, 61,190,186,254,202,116, 7, 61,202,254,
/* 0x0a00 */ 186,190,117, 78, 15,182, 65, 7,141, 4,128,141, 4,133, 8, 0,
/* 0x0a10 */ 0, 0,131,236, 8, 80, 81,137,207,232, 59, 5, 0, 0,131,196,
/* 0x0a20 */ 16,139, 71, 4, 49,201,133,192,139, 85,208,116, 24,131,122,248,
/* 0x0a30 */ 7,116, 10, 65,131,194, 20, 57,193,114,242,235, 8,139, 58, 49,
/* 0x0a40 */ 219,133,255,117,148,131,236, 12,106,127,232, 54, 5, 0, 0,131,
/* 0x0a50 */ 196, 16,131,236, 8, 49,192,137,250, 80, 80, 80,139,117,212, 86,
/* 0x0a60 */ 80, 83,232, 15, 1, 0, 0,131,196, 32,137,195,131,236, 12, 86,
/* 0x0a70 */ 232, 32, 5, 0, 0,131,196, 16,137,216,131,196, 44, 94, 95, 91,
/* 0x0a80 */ 93,195, 85,137,229, 83, 87, 86,131,236, 28,137,215,137, 77,224,
/* 0x0a90 */ 131, 63, 0, 15,132,200, 0, 0, 0,131,236, 12,139, 77,224,141,
/* 0x0aa0 */ 85,232,106, 12,232,102, 4, 0, 0,131,196, 16,139, 93,232,139,
/* 0x0ab0 */ 117,236,133,219, 15,132,151, 0, 0, 0,141, 70,255, 57,216, 15,
/* 0x0ac0 */ 131,164, 0, 0, 0, 59, 31, 15,135,156, 0, 0, 0, 57,222,115,
/* 0x0ad0 */ 93,137, 93,228,139, 69,240,137, 69,220, 15,182,192,131,236, 12,
/* 0x0ae0 */ 80,141, 69,228, 80,255,119, 4, 86,139, 69,224,255,112, 4,255,
/* 0x0af0 */ 85, 8,131,196, 32,133,192,117,112, 57, 93,228,117,107,131,125,
/* 0x0b00 */ 12, 0,139, 77,220,116, 29, 15,182,197,102,133,192,116, 21,193,
/* 0x0b10 */ 233, 16, 15,183,192, 15,182,201, 80, 81, 83,255,119, 4,255, 85,
/* 0x0b20 */ 12,131,196, 16,139, 69,224, 1,112, 4, 41, 48,235, 18,139, 87,
/* 0x0b30 */ 4,131,236, 12,139, 77,224, 86,232,210, 3, 0, 0,131,196, 16,
/* 0x0b40 */ 1, 95, 4,139, 7, 41,216,137, 7, 15,133, 74,255,255,255,235,
/* 0x0b50 */ 16,129,254, 85, 80, 88, 33,117, 16,139, 69,224,131, 56, 0,117,
/* 0x0b60 */ 8,131,196, 28, 94, 95, 91, 93,195,131,236, 12,106,127,232, 18,
/* 0x0b70 */ 4, 0, 0,131,196, 16, 85,137,229, 83, 87, 86,131,236, 76,137,
/* 0x0b80 */ 85,188,137, 77,200,139, 73, 16,137, 77,224, 49,192,133,201, 15,
/* 0x0b90 */ 132, 85, 2, 0, 0,131,125, 12, 0, 15,149,193, 15,182,201,141,
/* 0x0ba0 */ 12, 73,137, 77,184,139, 77,200,141, 89, 28, 49,210, 49,192, 49,
/* 0x0bb0 */ 201, 49,246,137,117,228,137,215,137,206,139, 11,141, 81,252,131,
/* 0x0bc0 */ 250, 2, 15,130,213, 0, 0, 0,129,249, 40, 0, 0,128, 15,132,
/* 0x0bd0 */ 234, 0, 0, 0,131,249, 1,137,250, 15,133, 10, 1, 0, 0,139,
/* 0x0be0 */ 123, 28,133,255,137,241, 15,132,238, 1, 0, 0,137,125,208,137,
/* 0x0bf0 */ 85,216,137, 69,204,139, 67, 36,137, 69,232,139,123, 24, 1,207,
/* 0x0c00 */ 137,125,212,137,125,236,137,254,129,230,255, 15, 0, 0,137,242,
/* 0x0c10 */ 41,215, 1,194, 15,132,214, 0, 0, 0,137, 77,220,139, 77,184,
/* 0x0c20 */ 141, 12, 10,137, 77,196,133,255,137, 85,224,186, 2, 0, 0, 0,
/* 0x0c30 */ 185, 18, 0, 0, 0, 15, 69,209,133,192, 15,148,193, 15,182,201,
/* 0x0c40 */ 193,225, 12,131,125, 12, 0,190, 0, 16, 0, 0, 15, 69,206, 9,
/* 0x0c50 */ 209,131,248, 1, 25,192, 11, 69, 16,137, 69,192,139, 83, 32, 3,
/* 0x0c60 */ 85,188,139, 69, 8,190, 0, 0, 0, 0, 17,240,131,236, 4, 80,
/* 0x0c70 */ 82,255,117,192, 81,106, 3,255,117,196, 87,232, 29, 3, 0, 0,
/* 0x0c80 */ 139, 85,224,131,196, 32,133,255,139, 77,220, 15, 68,200,137, 77,
/* 0x0c90 */ 220,131,248,255,137,199,117, 91,233, 85, 1, 0, 0,131,123, 8,
/* 0x0ca0 */ 1,137,241,117, 61,131,123, 12, 16,137,250,139,117,228, 15,133,
/* 0x0cb0 */ 41, 1, 0, 0,139, 67, 56, 1,200,233, 31, 1, 0, 0,139, 67,
/* 0x0cc0 */ 8,137,250, 57, 66, 32,137,241, 15,135, 12, 1, 0, 0, 59, 66,
/* 0x0cd0 */ 36,139,117,228, 15,131, 3, 1, 0, 0, 3, 66, 24,233,251, 0,
/* 0x0ce0 */ 0, 0,137,250,233,241, 0, 0, 0,137,241,233,234, 0, 0, 0,
/* 0x0cf0 */ 137, 77,220,131,125, 12, 0,116, 47,131,123, 36, 0,116, 41,137,
/* 0x0d00 */ 214,131,123, 32, 0,117, 8,139, 69, 20,137, 56,137, 93,216,131,
/* 0x0d10 */ 236, 8,139, 77, 12,141, 85,232,255,117, 28,255,117, 24,232, 95,
/* 0x0d20 */ 253,255,255,131,196, 16,137,242,137,214,247,222,129,230,255, 15,
/* 0x0d30 */ 0, 0,116, 22,141, 4, 23,131,236, 8, 86, 80,137, 85,224,232,
/* 0x0d40 */ 44, 2, 0, 0,139, 85,224,131,196, 16,133,210,116, 30,131,236,
/* 0x0d50 */ 4,255,115, 44, 82, 87,137, 85,224,232, 43, 2, 0, 0,139, 85,
/* 0x0d60 */ 224,131,196, 16,133,192, 15,133,134, 0, 0, 0,139, 69,212, 3,
/* 0x0d70 */ 69,208, 1,214, 1,247, 57,199,115, 41,133,255,116, 74,137,193,
/* 0x0d80 */ 41,249,131,236, 4, 49,192, 80, 80,106,255,104, 18, 16, 0, 0,
/* 0x0d90 */ 255,115, 44, 81, 87,232, 3, 2, 0, 0,131,196, 32, 57,199,116,
/* 0x0da0 */ 39,235, 79,131,125, 12, 0,116, 31,131,194, 3,129,226,255, 15,
/* 0x0db0 */ 0, 0,184, 3, 0, 0, 0, 57,194,119, 13,131,236, 8, 82, 87,
/* 0x0dc0 */ 232,200, 1, 0, 0,131,196, 16,139, 69,200,139, 64, 16,137, 69,
/* 0x0dd0 */ 224,139, 69,204,139, 77,220,139, 85,216,139,117,228, 70, 3, 91,
/* 0x0de0 */ 4, 59,117,224, 15,130,201,253,255,255,131,196, 76, 94, 95, 91,
/* 0x0df0 */ 93,195,131,236, 12,106,127,232,137, 1, 0, 0,131,196, 16, 85,
/* 0x0e00 */ 137,229, 83, 87, 86,129,236, 28, 64, 0, 0,232, 0, 0, 0, 0,
/* 0x0e10 */ 88,139,117, 4,141, 77, 8,141,128,239,255,255,255, 37, 0,240,
/* 0x0e20 */ 255,255,139, 80, 16,133,210,116, 68,137,181,228,191,255,255,137,
/* 0x0e30 */ 141,232,191,255,255,131,200, 28, 49,246,185, 76, 73, 78, 75,131,
/* 0x0e40 */ 56, 1,117, 19,139,120, 14,187, 69, 68, 73, 84, 49,223,139, 88,
/* 0x0e50 */ 10, 49,203, 9,251,116, 48, 70, 3, 64, 4, 57,214,137,189,240,
/* 0x0e60 */ 191,255,255,137,189,236,191,255,255,114,212,235, 61,137,181,228,
/* 0x0e70 */ 191,255,255,137,141,232,191,255,255,137,133,240,191,255,255,137,
/* 0x0e80 */ 133,236,191,255,255,235, 35,139, 88, 24, 15,183, 3, 1,216,141,
/* 0x0e90 */ 75, 2,139,123,252,131,195,252,133,255,116,246, 41,251,137,133,
/* 0x0ea0 */ 236,191,255,255,137,141,240,191,255,255,139,181,232,191,255,255,
/* 0x0eb0 */ 137,240,131,192,248,131,236, 4,141,141,244,191,255,255, 80,255,
/* 0x0ec0 */ 181,240,191,255,255,255,181,236,191,255,255,104, 0, 64, 0, 0,
/* 0x0ed0 */ 81, 87, 83,232, 73,250,255,255,131,196, 32,137,133,240,191,255,
/* 0x0ee0 */ 255,131,236, 8, 87, 83,232,162, 0, 0, 0,131,196, 16,139,133,
/* 0x0ef0 */ 228,191,255,255,137, 70,252,139,133,240,191,255,255,141,102,248,
/* 0x0f00 */ 255,224, 49,192,129,196, 28, 64, 0, 0, 94, 95, 91, 93,195, 85,
/* 0x0f10 */ 137,229, 83, 87, 86,131,236, 12,139, 69, 8,139, 57, 57,199,114,
/* 0x0f20 */ 44,139,113, 4,133,192,116, 20,137,199, 79,138, 30,141,118, 1,
/* 0x0f30 */ 136, 26,141, 82, 1,117,243,139, 57,139,113, 4, 1,198,137,113,
/* 0x0f40 */ 4, 41,199,137, 57,131,196, 12, 94, 95, 91, 93,195,199, 4, 36,
/* 0x0f50 */ 127, 0, 0, 0,232, 44, 0, 0, 0,139, 84, 36, 4,139, 76, 36,
/* 0x0f60 */ 8,139, 2, 15,200,137, 2,131,233, 4,141, 82, 4,119,242,195,
/* 0x0f70 */ 90, 88, 89, 81, 80, 82, 87,151, 49,192,243,170, 95,195, 90, 15,
/* 0x0f80 */ 52,176, 4,235, 2,176, 1,235, 2,176, 74,235, 2,176, 73,235,
/* 0x0f90 */ 2,176,153,235, 2,176, 6,235, 2,176, 5,235, 2,176,197,235,
/* 0x0fa0 */ 2,176, 3, 15,182,192,137,225, 13, 0, 0, 12, 0,232,204,255,
/* 0x0fb0 */ 255,255,115, 3,131,200,255,195, 1, 0, 0, 0, 28, 0, 0, 0,
/* 0x0fc0 */ 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0,
/* 0x0fd0 */ 2, 0, 0, 0, 33, 9, 0, 0, 52, 0, 0, 0, 52, 0, 0, 0,
/* 0x0fe0 */ 185, 15, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 3, 0, 0, 0,
/* 0x0ff0 */ 12, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x1000 */ 0, 1, 95, 0, 5, 0, 10, 95, 0, 72,117,112,120, 95,109, 97,
/* 0x1010 */ 105,110, 0,106,109, 0,111, 98, 0,148, 1,119,114,105,116,101,
/* 0x1020 */ 0,179, 1,101,120,105,116, 0,184, 1,112,114,101, 97,100, 0,
/* 0x1030 */ 199, 1, 99,108,111,115,101, 0,204, 1,111,112,101,110, 0,209,
/* 0x1040 */ 1,114,101, 97,100, 0,219, 1, 0, 2,109,104, 95,101,120,101,
/* 0x1050 */ 99,117,116,101, 95,104,101, 97,100,101,114, 0,102, 95, 98,122,
/* 0x1060 */ 101,114,111, 0,169, 1, 2, 0, 0, 0, 3, 0,161, 18, 0, 0,
/* 0x1070 */ 4, 97,105,110, 0,143, 1,112,114,111,116,101, 99,116, 0,189,
/* 0x1080 */ 1,117,110,109, 97,112, 0,194, 1,109, 97,112, 0,214, 1, 3,
/* 0x1090 */ 0,255, 27, 0, 0, 2,115,119, 97,112, 0,164, 1,122,101,114,
/* 0x10a0 */ 111, 0,174, 1, 3, 0,217, 30, 0, 3, 0,240, 30, 0, 3, 0,
/* 0x10b0 */ 240, 30, 0, 3, 0,129, 31, 0, 3, 0,133, 31, 0, 3, 0,137,
/* 0x10c0 */ 31, 0, 3, 0,141, 31, 0, 3, 0,145, 31, 0, 3, 0,149, 31,
/* 0x10d0 */ 0, 3, 0,153, 31, 0, 3, 0,157, 31, 0, 3, 0,161, 31, 0,
/* 0x10e0 */ 141, 0, 0, 0, 14, 1, 0, 0,130, 26, 0, 0,155, 0, 0, 0,
/* 0x10f0 */ 14, 1, 0, 0,118, 27, 0, 0,164, 0, 0, 0, 14, 1, 0, 0,
/* 0x1100 */ 15, 31, 0, 0,171, 0, 0, 0, 14, 1, 0, 0,126, 31, 0, 0,
/* 0x1110 */ 177, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,186, 0, 0, 0,
/* 0x1120 */ 2, 0, 0, 0, 3, 0, 0, 0,195, 0, 0, 0, 2, 0, 0, 0,
/* 0x1130 */ 4, 0, 0, 0,205, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0,
/* 0x1140 */ 214, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0,224, 0, 0, 0,
/* 0x1150 */ 2, 0, 0, 0, 73, 0, 0, 0,235, 0, 0, 0, 2, 0, 0, 0,
/* 0x1160 */ 74, 0, 0, 0,248, 0, 0, 0, 2, 0, 0, 0,153, 0, 0, 0,
/* 0x1170 */ 2, 1, 0, 0, 2, 0, 0, 0,197, 0, 0, 0, 2, 0, 0, 0,
/* 0x1180 */ 15, 1, 0, 0,112, 31, 0, 0, 11, 0, 0, 0, 3, 1, 16, 0,
/* 0x1190 */ 0, 16, 0, 0, 31, 0, 0, 0, 15, 1, 0, 0, 89, 31, 0, 0,
/* 0x11a0 */ 38, 0, 0, 0, 15, 1, 0, 0,112, 31, 0, 0, 45, 0, 0, 0,
/* 0x11b0 */ 15, 1, 0, 0,149, 31, 0, 0, 52, 0, 0, 0, 15, 1, 0, 0,
/* 0x11c0 */ 133, 31, 0, 0, 58, 0, 0, 0, 15, 1, 0, 0,255, 29, 0, 0,
/* 0x11d0 */ 64, 0, 0, 0, 15, 1, 0, 0,157, 31, 0, 0, 70, 0, 0, 0,
/* 0x11e0 */ 15, 1, 0, 0,137, 31, 0, 0, 80, 0, 0, 0, 15, 1, 0, 0,
/* 0x11f0 */ 141, 31, 0, 0, 88, 0, 0, 0, 15, 1, 0, 0,153, 31, 0, 0,
/* 0x1200 */ 94, 0, 0, 0, 15, 1, 0, 0,145, 31, 0, 0,101, 0, 0, 0,
/* 0x1210 */ 15, 1, 0, 0,161, 31, 0, 0,107, 0, 0, 0, 15, 1, 0, 0,
/* 0x1220 */ 33, 25, 0, 0,117, 0, 0, 0, 15, 1, 0, 0,129, 31, 0, 0,
/* 0x1230 */ 124, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 32, 0, 95, 95,
/* 0x1240 */ 95, 98,122,101,114,111, 0, 95, 95,109,104, 95,101,120,101, 99,
/* 0x1250 */ 117,116,101, 95,104,101, 97,100,101,114, 0, 95, 98,115,119, 97,
/* 0x1260 */ 112, 0, 95, 98,122,101,114,111, 0, 95, 99,108,111,115,101, 0,
/* 0x1270 */ 95,101,120,105,116, 0, 95,109, 97,105,110, 0, 95,109,109, 97,
/* 0x1280 */ 112, 0, 95,109,112,114,111,116,101, 99,116, 0, 95,109,117,110,
/* 0x1290 */ 109, 97,112, 0, 95,111,112,101,110, 0, 95,112,114,101, 97,100,
/* 0x12a0 */ 0, 95,114,101, 97,100, 0, 95,117,112,120, 95,109, 97,105,110,
/* 0x12b0 */ 0, 95,119,114,105,116,101, 0,100,121,108,100, 95,115,116,117,
/* 0x12c0 */ 98, 95, 98,105,110,100,101,114, 0, 95,117,110,112, 97, 99,107,
/* 0x12d0 */ 69,120,116,101,110,116, 0, 95,100,111, 95,120,109, 97,112, 0,
/* 0x12e0 */ 95,120,114,101, 97,100, 0,115,121,115,103,111, 0, 83, 89, 83,
/* 0x12f0 */ 95,101,120,105,116, 0, 83, 89, 83, 95,114,101, 97,100, 0, 83,
/* 0x1300 */ 89, 83, 95,119,114,105,116,101, 0, 83, 89, 83, 95,111,112,101,
/* 0x1310 */ 110, 0, 83, 89, 83, 95, 99,108,111,115,101, 0, 83, 89, 83, 95,
/* 0x1320 */ 109,117,110,109, 97,112, 0, 83, 89, 83, 95,109,112,114,111,116,
/* 0x1330 */ 101, 99,116, 0, 83, 89, 83, 95,112,114,101, 97,100, 0, 83, 89,
/* 0x1340 */ 83, 95,109,109, 97,112, 0, 0
/* 0x0920 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0930 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0940 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0950 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0960 */ 0, 0, 0, 0,204, 85,137,229, 83, 87, 86,131,236, 44,139, 69,
/* 0x0970 */ 8,141,120, 24,141, 77,208,137,121, 4,139, 93, 12,131,195,232,
/* 0x0980 */ 137, 25,139,117, 16,141, 85,216,137,114, 4,139, 64, 24,137, 2,
/* 0x0990 */ 141, 69,224,137,120, 4,137, 24,139, 93, 24,131,236, 8, 49,255,
/* 0x09a0 */ 87, 83,232, 54, 1, 0, 0,131,196, 8, 49,210,137,241,255,117,
/* 0x09b0 */ 28, 83,255,117, 32,106,255,141, 69,224, 80, 87,232, 1, 2, 0,
/* 0x09c0 */ 0,131,196, 32,137,195,139, 78, 16,133,201, 15,132, 2, 1, 0,
/* 0x09d0 */ 0,141, 70, 28,131, 56, 14,116, 13, 71, 3, 64, 4, 57,207,114,
/* 0x09e0 */ 243,233,237, 0, 0, 0, 3, 64, 8,131,236, 4, 49,255, 87, 87,
/* 0x09f0 */ 80,232,153, 5, 0, 0,131,196, 16,137, 69,240,133,192, 15,136,
/* 0x0a00 */ 152, 0, 0, 0,131,236, 12, 87, 87,139, 69, 20,137,199, 87, 86,
/* 0x0a10 */ 255,117,240,232,111, 5, 0, 0,131,196, 32, 57,248,117,125,141,
/* 0x0a20 */ 70, 16,137, 69,232, 49,219,199, 69,236, 0, 0, 0, 0,139, 6,
/* 0x0a30 */ 61,190,186,254,202,116, 7, 61,202,254,186,190,117,107, 15,182,
/* 0x0a40 */ 70, 7,141, 4,128,141, 4,133, 8, 0, 0, 0,131,236, 8, 80,
/* 0x0a50 */ 86,232,249, 4, 0, 0,131,196, 16,139, 70, 4,133,192,116, 60,
/* 0x0a60 */ 49,201,139, 85,232,131,122,248, 7,116, 10, 65,131,194, 20, 57,
/* 0x0a70 */ 193,114,242,235, 39,139, 26,133,219,116, 33,199, 69,236, 0, 0,
/* 0x0a80 */ 0, 0,131,236, 12,106, 0, 83,139,125, 20, 87, 86,255,117,240,
/* 0x0a90 */ 232,242, 4, 0, 0,131,196, 32, 57,248,116,146,131,236, 12,106,
/* 0x0aa0 */ 127,232,213, 4, 0, 0,131,196, 16,131,236, 8, 49,192,137,241,
/* 0x0ab0 */ 137,218, 80, 80, 80,139,117,240, 86, 80,255,117,236,232, 0, 1,
/* 0x0ac0 */ 0, 0,131,196, 32,137,195,131,236, 12, 86,232,187, 4, 0, 0,
/* 0x0ad0 */ 131,196, 16,137,216,131,196, 44, 94, 95, 91, 93,195, 85,137,229,
/* 0x0ae0 */ 83, 87, 86,131,236, 28,137,215,137, 77,240,131, 63, 0, 15,132,
/* 0x0af0 */ 185, 0, 0, 0,131,236, 12,139, 77,240,141, 85,224,106, 12,232,
/* 0x0b00 */ 8, 4, 0, 0,131,196, 16,139, 93,224,139,117,228,133,219, 15,
/* 0x0b10 */ 132,136, 0, 0, 0,141, 70,255, 57,216, 15,131,149, 0, 0, 0,
/* 0x0b20 */ 59, 31, 15,135,141, 0, 0, 0, 57,222,115, 82,137, 93,236, 15,
/* 0x0b30 */ 182, 69,232,131,236, 12, 80,141, 69,236, 80,255,119, 4, 86,139,
/* 0x0b40 */ 69,240,255,112, 4,255, 85, 8,131,196, 32,133,192,117,102, 57,
/* 0x0b50 */ 93,236,117, 97,131,125, 12, 0,116, 26,138, 69,233,132,192,116,
/* 0x0b60 */ 19, 15,182,192, 15,182, 77,234, 80, 81, 83,255,119, 4,255, 85,
/* 0x0b70 */ 12,131,196, 16,139, 69,240, 1,112, 4, 41, 48,235, 18,139, 87,
/* 0x0b80 */ 4,131,236, 12,139, 77,240, 86,232,127, 3, 0, 0,131,196, 16,
/* 0x0b90 */ 1, 95, 4, 41, 31, 15,133, 89,255,255,255,235, 16,129,254, 85,
/* 0x0ba0 */ 80, 88, 33,117, 16,139, 69,240,131, 56, 0,117, 8,131,196, 28,
/* 0x0bb0 */ 94, 95, 91, 93,195,131,236, 12,106,127,232,188, 3, 0, 0,131,
/* 0x0bc0 */ 196, 16, 85,137,229, 83, 87, 86,131,236, 60,137, 85,216,139, 65,
/* 0x0bd0 */ 16,137,198,133,192, 15,132, 76, 2, 0, 0, 49,210,131,125, 12,
/* 0x0be0 */ 0, 15,149,194,141, 20, 82,137, 85,220,137, 77,204,141, 89, 28,
/* 0x0bf0 */ 199, 69,228, 0, 0, 0, 0, 49,192,199, 69,236, 0, 0, 0, 0,
/* 0x0c00 */ 49,255,137,241,137, 69,232,139, 51,141, 86,252,131,250, 2, 15,
/* 0x0c10 */ 130,208, 0, 0, 0,129,254, 40, 0, 0,128, 15,132,230, 0, 0,
/* 0x0c20 */ 0,131,254, 1, 15,133,236, 1, 0, 0,139, 83, 28,133,210,139,
/* 0x0c30 */ 69,232, 15,132,225, 1, 0, 0,137, 85,200,139, 75, 36,137, 77,
/* 0x0c40 */ 184,139, 67, 24, 3, 69,236,137, 69,188,137,198,129,230,255, 15,
/* 0x0c50 */ 0, 0,137, 69,196,137,194, 41,242, 1,206,137,117,224, 15,132,
/* 0x0c60 */ 195, 0, 0, 0,139, 69,220,141, 4, 6,137, 69,208,137,208,137,
/* 0x0c70 */ 69,240, 49,210,133,192, 15,149,194,193,226, 4, 49,192,133,201,
/* 0x0c80 */ 15,148,192,193,224, 12,131,125, 12, 0,190, 0, 16, 0, 0, 15,
/* 0x0c90 */ 69,198,141, 68, 2, 2,137, 69,212,131,249, 1, 25,201, 11, 77,
/* 0x0ca0 */ 16,139, 83, 32, 3, 85,216,139, 69, 8,190, 0, 0, 0, 0, 17,
/* 0x0cb0 */ 240,131,236, 4, 80, 82, 81,255,117,212,106, 3,255,117,208,255,
/* 0x0cc0 */ 117,240,232,204, 2, 0, 0,131,196, 32,131,125,240, 0,139, 77,
/* 0x0cd0 */ 236, 15, 68,200,137,194,131,248,255,137,200,139, 77,228,117, 77,
/* 0x0ce0 */ 233, 76, 1, 0, 0,131,123, 8, 1, 15,133, 39, 1, 0, 0,131,
/* 0x0cf0 */ 123, 12, 16,139, 69,232, 15,133, 29, 1, 0, 0,139, 67, 56, 3,
/* 0x0d00 */ 69,236,233, 18, 1, 0, 0,139, 67, 8,139, 85,228, 57, 66, 32,
/* 0x0d10 */ 15,135, 3, 1, 0, 0, 57, 66, 36, 15,134,250, 0, 0, 0, 3,
/* 0x0d20 */ 66, 24,233,242, 0, 0, 0,139, 69,236,139, 77,228,137, 69,236,
/* 0x0d30 */ 131,125, 12, 0,137, 85,240,116, 49,131,123, 36, 0,116, 43,131,
/* 0x0d40 */ 123, 32, 0,117, 7,139, 69, 20,137, 16,137,217,131,236, 8,137,
/* 0x0d50 */ 206,139, 77, 12,141, 85,184,255,117, 28,255,117, 24,232,123,253,
/* 0x0d60 */ 255,255,139, 85,240,137,241,131,196, 16,137, 77,228,139, 69,224,
/* 0x0d70 */ 137,198,247,222,129,230,255, 15, 0, 0,116, 22,141, 4, 2,131,
/* 0x0d80 */ 236, 8, 86, 80,232,221, 1, 0, 0,139, 69,224,139, 85,240,131,
/* 0x0d90 */ 196, 16,133,192,137,193,116, 26,131,236, 4,255,115, 44, 81, 82,
/* 0x0da0 */ 232,218, 1, 0, 0,139, 77,224,139, 85,240,131,196, 16,133,192,
/* 0x0db0 */ 117,127,139, 69,196, 3, 69,200, 1,206, 1,242, 57,194,115, 43,
/* 0x0dc0 */ 133,210,116, 76,137,193, 41,209,131,236, 4, 49,192, 80, 80,106,
/* 0x0dd0 */ 255,104, 18, 16, 0, 0,255,115, 44, 81, 82,137,214,232,177, 1,
/* 0x0de0 */ 0, 0,131,196, 32, 57,198,116, 39,235, 70,131,125, 12, 0,116,
/* 0x0df0 */ 31,131,193, 3,129,225,255, 15, 0, 0,184, 3, 0, 0, 0, 57,
/* 0x0e00 */ 193,119, 13,131,236, 8, 81, 82,232,118, 1, 0, 0,131,196, 16,
/* 0x0e10 */ 139, 69,204,139, 72, 16,139, 69,232, 71, 3, 91, 4, 57,207, 15,
/* 0x0e20 */ 130,223,253,255,255,235, 2, 49,192,131,196, 60, 94, 95, 91, 93,
/* 0x0e30 */ 195,131,236, 12,106,127,232, 64, 1, 0, 0,131,196, 16, 85,137,
/* 0x0e40 */ 229, 83, 87, 86,129,236, 28, 64, 0, 0,232, 0, 0, 0, 0, 88,
/* 0x0e50 */ 139,117, 4,141, 85, 8,141,128,239,255,255,255, 37, 0,240,255,
/* 0x0e60 */ 255,139, 72, 16,133,201,137, 85,228,137,117,232,116, 44,131,200,
/* 0x0e70 */ 28, 49,246,186, 76, 73, 78, 75,131, 56, 1,117, 19,139,120, 14,
/* 0x0e80 */ 187, 69, 68, 73, 84, 49,223,139, 88, 10, 49,211, 9,251,116, 12,
/* 0x0e90 */ 70, 3, 64, 4, 57,206,114,224,235, 31,235, 29,139, 88, 24, 15,
/* 0x0ea0 */ 183, 3, 1,216,141, 75, 2,139,123,252,131,195,252,133,255,116,
/* 0x0eb0 */ 246, 41,251,137, 69,236,137, 77,240,139,117,228,137,240,131,192,
/* 0x0ec0 */ 248,131,236, 4,141,141,228,191,255,255, 80,255,117,240,255,117,
/* 0x0ed0 */ 236,104, 0, 64, 0, 0, 81, 87, 83,232,135,250,255,255,131,196,
/* 0x0ee0 */ 32,137, 69,240,131,236, 8, 87, 83,232,149, 0, 0, 0,131,196,
/* 0x0ef0 */ 16,139, 69,232,137, 70,252,139, 69,240,141,102,248,255,224, 49,
/* 0x0f00 */ 192,129,196, 28, 64, 0, 0, 94, 95, 91, 93,195, 85,137,229, 83,
/* 0x0f10 */ 87, 86,131,236, 12,139, 69, 8,139, 49, 57,198,114, 37,133,192,
/* 0x0f20 */ 116, 18,139,113, 4, 49,255,138, 28, 62,136, 28, 58, 71, 57,248,
/* 0x0f30 */ 117,245,139, 49, 1, 65, 4, 41,198,137, 49,131,196, 12, 94, 95,
/* 0x0f40 */ 91, 93,195,199, 4, 36,127, 0, 0, 0,232, 44, 0, 0, 0,139,
/* 0x0f50 */ 84, 36, 4,139, 76, 36, 8,139, 2, 15,200,137, 2,131,233, 4,
/* 0x0f60 */ 141, 82, 4,119,242,195, 90, 88, 89, 81, 80, 82, 87,151, 49,192,
/* 0x0f70 */ 243,170, 95,195, 90, 15, 52,176, 4,235, 2,176, 1,235, 2,176,
/* 0x0f80 */ 74,235, 2,176, 73,235, 2,176,153,235, 2,176, 6,235, 2,176,
/* 0x0f90 */ 5,235, 2,176,197,235, 2,176, 3, 15,182,192,137,225, 13, 0,
/* 0x0fa0 */ 0, 12, 0,232,204,255,255,255,115, 3,131,200,255,195, 0, 0,
/* 0x0fb0 */ 1, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0,
/* 0x0fc0 */ 0, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x0fd0 */ 52, 0, 0, 0, 52, 0, 0, 0,249, 15, 0, 0, 0, 0, 0, 0,
/* 0x0fe0 */ 52, 0, 0, 0, 3, 0, 0, 0, 12, 0, 1, 0, 16, 0, 1, 0,
/* 0x0ff0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x1000 */ 0, 2, 95, 0, 12,115,116, 97,114,116, 0,113, 0, 10, 95, 0,
/* 0x1010 */ 79,117,112,120, 95,109, 97,105,110, 0,118,109, 0,123, 98, 0,
/* 0x1020 */ 160, 1,119,114,105,116,101, 0,191, 1,101,120,105,116, 0,196,
/* 0x1030 */ 1,112,114,101, 97,100, 0,211, 1, 99,108,111,115,101, 0,216,
/* 0x1040 */ 1,111,112,101,110, 0,221, 1,114,101, 97,100, 0,231, 1, 0,
/* 0x1050 */ 2,109,104, 95,101,120,101, 99,117,116,101, 95,104,101, 97,100,
/* 0x1060 */ 101,114, 0,109, 95, 98,122,101,114,111, 0,181, 1, 2, 0, 0,
/* 0x1070 */ 0, 3, 0,228, 18, 0, 3, 0,229, 18, 0, 0, 4, 97,105,110,
/* 0x1080 */ 0,155, 1,112,114,111,116,101, 99,116, 0,201, 1,117,110,109,
/* 0x1090 */ 97,112, 0,206, 1,109, 97,112, 0,226, 1, 3, 0,190, 28, 0,
/* 0x10a0 */ 0, 2,115,119, 97,112, 0,176, 1,122,101,114,111, 0,186, 1,
/* 0x10b0 */ 3, 0,207, 30, 0, 3, 0,230, 30, 0, 3, 0,230, 30, 0, 3,
/* 0x10c0 */ 0,247, 30, 0, 3, 0,251, 30, 0, 3, 0,255, 30, 0, 3, 0,
/* 0x10d0 */ 131, 31, 0, 3, 0,135, 31, 0, 3, 0,139, 31, 0, 3, 0,143,
/* 0x10e0 */ 31, 0, 3, 0,147, 31, 0, 3, 0,151, 31, 0, 4, 0, 0, 0,
/* 0x10f0 */ 15, 1, 0, 0,102, 31, 0, 0, 13, 0, 0, 0, 3, 0, 16, 0,
/* 0x1100 */ 0, 16, 0, 0, 33, 0, 0, 0, 15, 1, 0, 0, 79, 31, 0, 0,
/* 0x1110 */ 40, 0, 0, 0, 15, 1, 0, 0,102, 31, 0, 0, 47, 0, 0, 0,
/* 0x1120 */ 15, 1, 0, 0,139, 31, 0, 0, 54, 0, 0, 0, 15, 1, 0, 0,
/* 0x1130 */ 123, 31, 0, 0, 60, 0, 0, 0, 15, 1, 0, 0, 62, 30, 0, 0,
/* 0x1140 */ 66, 0, 0, 0, 15, 1, 0, 0,147, 31, 0, 0, 72, 0, 0, 0,
/* 0x1150 */ 15, 1, 0, 0,127, 31, 0, 0, 82, 0, 0, 0, 15, 1, 0, 0,
/* 0x1160 */ 131, 31, 0, 0, 90, 0, 0, 0, 15, 1, 0, 0,143, 31, 0, 0,
/* 0x1170 */ 96, 0, 0, 0, 15, 1, 0, 0,135, 31, 0, 0,103, 0, 0, 0,
/* 0x1180 */ 15, 1, 0, 0,151, 31, 0, 0,109, 0, 0, 0, 15, 1, 0, 0,
/* 0x1190 */ 101, 25, 0, 0,119, 0, 0, 0, 15, 1, 0, 0,119, 31, 0, 0,
/* 0x11a0 */ 126, 0, 0, 0, 15, 1, 0, 0,100, 25, 0, 0,132, 0, 0, 0,
/* 0x11b0 */ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 95, 98,
/* 0x11c0 */ 122,101,114,111, 0, 95, 95,109,104, 95,101,120,101, 99,117,116,
/* 0x11d0 */ 101, 95,104,101, 97,100,101,114, 0, 95, 98,115,119, 97,112, 0,
/* 0x11e0 */ 95, 98,122,101,114,111, 0, 95, 99,108,111,115,101, 0, 95,101,
/* 0x11f0 */ 120,105,116, 0, 95,109, 97,105,110, 0, 95,109,109, 97,112, 0,
/* 0x1200 */ 95,109,112,114,111,116,101, 99,116, 0, 95,109,117,110,109, 97,
/* 0x1210 */ 112, 0, 95,111,112,101,110, 0, 95,112,114,101, 97,100, 0, 95,
/* 0x1220 */ 114,101, 97,100, 0, 95,117,112,120, 95,109, 97,105,110, 0, 95,
/* 0x1230 */ 119,114,105,116,101, 0,115,116, 97,114,116, 0,100,121,108,100,
/* 0x1240 */ 95,115,116,117, 98, 95, 98,105,110,100,101,114, 0, 0, 0, 0
};

View File

@ -0,0 +1,76 @@
/* i386_bxx.S -- i386 Call/Branch Trick unfilter
This file is part of the UPX executable compressor.
Copyright (C) 2005-2019 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.
John F. Reiser
<jreiser@users.sourceforge.net>
*/
//#include "regs.h"
i386bxx: # (*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
#ifndef NO_METHOD_CHECK
cmpl $0x49,4*NBPW(%esp); jne ckend0 # filter: JMP, CALL, 6-byte Jxx
#endif
push %ebp; movl %esp,%ebp
push %ebx # C-language saved regs
push %esi
push %edi
movl 2*NBPW(%ebp),%esi // src
movl 3*NBPW(%ebp),%ecx // len
movl 4*NBPW(%ebp),%edx // b_cto8 (%dl)
lea (1- 4)(%esi,%ecx),%ecx # beyond last possible displacement
movl %esi,%ebx // start of buffer
jmp ckstart
ckloop4:
cmpl %ecx,%esi; jae ckend
push %esi # tail merge
ckloop3:
pop %esi; lodsb # next main opcode
cmpb $0x80,%al; jb ckloop2 # lo of 6-byte Jcc
cmpb $0x8F,%al; ja ckloop2 # hi of 6-byte Jcc
cmpb $0x0F,-2(%esi); je ckmark # prefix of 6-byte Jcc
ckloop2:
subb $ 0xE8,%al
cmpb $0xE9-0xE8,%al; ja ckloop4 # not JMP, not CALL
ckmark:
cmpl %ecx,%esi; jae ckend # peek only; not marked ==> do not consume
push %esi; lodsl # (assume) marked, bswapped 32-bit displacement
subb %dl,%al; jne ckloop3 # not marked with cto8
pop %edi
bswap %eax # (0<<24) | d24
subl %edi,%eax # hardware: %esi; software: %edi [ 4==delta ]
addl %ebx,%eax
stosl
ckstart:
cmpl %ecx,%esi; jae ckend
lodsb; jmp ckloop2 # 0x0F prefix would overlap previous displacement
ckend:
pop %edi
pop %esi
pop %ebx
pop %ebp
ckend0:
#ifndef NO_METHOD_CHECK
ret
#endif

View File

@ -0,0 +1,76 @@
/* i386_d_nrv2b-easy.S -- i386 decompressor for NRV2B
This file is part of the UPX executable compressor.
Copyright (C) 1996-2019 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2019 Laszlo Molnar
Copyright (C) 2000-2019 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>
*/
#ifndef NO_METHOD_CHECK
cmpb $ M_NRV2B_LE32,methb; jne not_n2b
#endif
jmp top_n2b
lit_n2b:
incl %esi; movb %dl,(%edi)
incl %edi
top_n2b:
movb (%esi),%dl # speculate: literal, or bottom 8 bits of offset
jnextb1yp lit_n2b
push $1; pop off
offmore_n2b:
getnextbp(off)
jnextb0np offmore_n2b
subl $ 3,off; jc len_n2b # use previous offset
shll $ 8,off; movzbl %dl,%edx
orl %edx,off; incl %esi
xorl $~0,off; jz eof
movl off,disp
len_n2b:
push $1; pop off
getnextb(len); getnextb(len) # two bits; cc set on result
jnz gotlen_n2b # raw 1,2,3 ==> 2,3,4
movl off,len # len= 1, the msb
addl $3-1,off # raw 2.. ==> 5..
lenmore_n2b:
getnextb(len)
jnextb0n lenmore_n2b
gotlen_n2b:
cmpl $-0xd00,disp
adcl off,len # len += off + (disp < -0xd00)
call copy
bot_n2b: # In: 0==len
jmp top_n2b
#ifndef NO_METHOD_CHECK
not_n2b:
# fall into 'eof'
#endif
/*
vi:ts=8:et:nowrap
*/

View File

@ -0,0 +1,84 @@
/* nrv2d_d-easy.S -- i386 decompressor for NRV2D
This file is part of the UPX executable compressor.
Copyright (C) 1996-2019 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2019 Laszlo Molnar
Copyright (C) 2000-2019 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>
*/
#ifndef NO_METHOD_CHECK
cmpb $ M_NRV2D_LE32,methb; jne not_n2d
#endif
jmp top_n2d
lit_n2d:
incl %esi; movb %dl,(%edi)
incl %edi
top_n2d:
movb (%esi),%dl // speculate: literal, or bottom 8 bits of offset
jnextb1yp lit_n2d
push $1; pop off
jmp getoff_n2d
off_n2d:
dec off
getnextbp(off)
getoff_n2d:
getnextbp(off)
jnextb0np off_n2d
subl $ 3,off; jc offprev_n2d
shll $ 8,off; movzbl %dl,%edx
orl %edx,off; incl %esi
xorl $~0,off; jz eof
sarl off // Carry= original low bit
movl off,disp // XXX: 2GB
jmp len_n2d-2 // CHEAT: assume tail of getnextb is "adcl len,len"
offprev_n2d:
getnextb(len)
len_n2d:
getnextb(len); jne gotlen_n2d
inc len // len= 1
lenmore_n2d:
getnextb(len)
jnextb0n lenmore_n2d
addl $2,len
gotlen_n2d:
cmpl $-0x500,disp
adcl $1,len // len += 1+ (disp < -0x500);
call copy
bot_n2d: // In: 0==len
jmp top_n2d
#ifndef NO_METHOD_CHECK
not_n2d:
push %edi; pop %esi # src = arg1
#endif
/*
vi:ts=8:et:nowrap
*/

View File

@ -0,0 +1,90 @@
/* nrv2e_d-easy.S -- i386 decompressor for NRV2E
This file is part of the UPX executable compressor.
Copyright (C) 1996-2019 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2019 Laszlo Molnar
Copyright (C) 2000-2019 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>
*/
#ifndef NO_METHOD_CHECK
cmpb $ M_NRV2E_LE32,methb; jne not_n2e
#endif
jmp top_n2e
lit_n2e:
incl %esi; movb %dl,(%edi)
incl %edi
top_n2e:
movb (%esi),%dl # speculate: literal, or bottom 8 bits of offset
jnextb1yp lit_n2e
push $1; pop off
jmp getoff_n2e
off_n2e:
dec off
getnextbp(off)
getoff_n2e:
getnextbp(off)
jnextb0np off_n2e
subl $ 3,off; jc offprev_n2e
shll $ 8,off; movzbl %dl,%edx
orl %edx,off; incl %esi
xorl $~0,off; jz eof
sarl off # Carry= original low bit
movl off,disp # XXX: 2GB
jc lenlast_n2e
jmp lenmore_n2e
offprev_n2e:
jnextb1y lenlast_n2e
lenmore_n2e:
incl len # len= 1
jnextb1y lenlast_n2e
len_n2e:
getnextb(len)
jnextb0n len_n2e
addl $6-2-2,len
jmp gotlen_n2e
lenlast_n2e:
getnextb(len) # 0,1,2,3
gotlen_n2e:
cmpl $-0x500,disp
adcl $2,len # len += 2+ (disp < -0x500);
call copy
bot_n2e: # In: 0==len
jmp top_n2e
#ifndef NO_METHOD_CHECK
not_n2e:
push %edi; pop %esi # src = arg1
#endif
/*
vi:ts=8:et:nowrap
*/

View File

@ -31,110 +31,255 @@
;
*/
#include "arch/i386/macros.S"
NBPW= 4
section I386BXX0
0: .word end_filter // - 0b // sizeof unfilter
//#include "arch/i386/macros.S"
.altmacro
.att_syntax
.code32
.macro section name
.section \name
.code32
.endm
section I386BXX1
ret // in case no filter
end_filter:
// 2-byte bramches, even when destination is not known yet
.macro jmps target
.byte 0xeb, \target - . - 1
.endm
.macro jzs target
.byte 0x74, \target - . - 1
.endm
.macro jnzs target
.byte 0x75, \target - . - 1
.endm
.macro jcs target
.byte 0x72, \target - . - 1
.endm
.macro jncs target
.byte 0x73, \target - . - 1
.endm
.macro jnas target
.byte 0x76, \target - . - 1
.endm
#define jbes jnas
mlc_cmd = 0
LC_SEGMENT= 0x01
mlc_cmdsize = 4
sz_Mach_header= 7*4
mhdr_ncmds= 4*4
mhdr_flags= 6*4
MH_PIE=0x200000
sz_Mach_segment= 2*NBPW + 16 + 4*NBPW + 4*4
mseg_segname= 2*NBPW
mseg_vmaddr= 2*NBPW + 16
mseg_vmsize= 2*NBPW + 16 + NBPW
mseg_initprot= 2*NBPW + 16 + (4*NBPW) + 4
msec_addr= 2*16
msec_size= 2*16 + NBPW
/*************************************************************************
// program entry point
// see glibc/sysdeps/i386/elf/start.S
// see glibc/sysdeps/amd64/elf/start.S
**************************************************************************/
section LEXEC000
MAP_FIXED = 0x10
MAP_PRIVATE = 0x02
MAP_ANON = 0x1000
PROT_NONE = 0
PROT_READ = 1
PROT_WRITE = 2
PROT_EXEC = 4
MAP_ANON_FD = -1
SYSBASE= 0 // at runtime: 0xC0000
SYS_mmap =0xc5 + SYSBASE
SYS_mprotect =0x4a + SYSBASE
SYS_munmap =0x49 + SYSBASE
SYS_write = 4 + SYSBASE
#define __c4(a,b,c,d) (((a)<<(0*8)) | ((b)<<(1*8)) | ((c)<<(2*8)) | ((d)<<(3*8)))
#define __c8(a,b,c,d,e,f,g,h) (__c4(a,b,c,d) | (__c4(e,f,g,h) << 32))
// FYI: Following the env[] vector there is another vector apple[] of strings.
// Contents from one actual instance on MacOS 10.13 HighSierra:
// "executable_path=<rooted_path>"
// "pfz=0x7ffffff84000"
// "stack_guard=0x850795b0f36900c2"
// "malloc_entropy=0x94a87434eb9e2c1,0xf6814219485392e8"
// "main_stack=0x7ffeefc00000,0x800000,0x7ffeebc00000,0x4000000"
// "executable_file=0x1000008,0x2209ce"
// when %rsp was 0x7ffeefbffaf0.
// Notes:
// Command-line debugger from Xcode: lldb foo; "process launch -s"
//0: .word -0b + &Mach_header
//0: .word -0b + l_info
section MACHMAINX
_start: .globl _start
//// int3
/*
;; How to debug this code: Uncomment the 'int3' breakpoint instruction above.
;; Build the stubs and upx. Compress a testcase, such as a copy of /bin/date.
;; Invoke gdb, and give a 'run' command. Define a single-step macro such as
;; define g
;; stepi
;; x/i $pc
;; end
;; and a step-over macro such as
;; define h
;; x/2i $pc
;; tbreak *$_
;; continue
;; x/i $pc
;; end
;; Step through the code; remember that <Enter> repeats the previous command.
;;
*/
call main // push address of decompress subroutine
decompress:
// int3
call main // push &f_exp
_start_end:
section MACH_UNC
/* Returns 0 on success; non-zero on failure. */
decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
/* Arguments according to calling convention */
#define src %esi
#define lsrc INS
#define dst %edi
#define ldst OUTS /* Out: actually a reference: &len_dst */
#define meth PARM
#define methb PARM
// /*************************************************************************
// // C callable decompressor
// **************************************************************************/
// /* Offsets to parameters, allowing for {pusha + call} */
#define O_INP (8*4 +1*4)
#define O_INS (8*4 +2*4)
#define O_OUTP (8*4 +3*4)
#define O_OUTS (8*4 +4*4)
#define O_PARAM (8*4 +5*4)
#define O_INP NBPW*(8+1)
#define O_INS NBPW*(8+2)
#define O_OUTP NBPW*(8+3)
#define O_OUTS NBPW*(8+4)
#define O_PARAM NBPW*(8+5)
#define INP dword ptr [esp+O_INP]
#define INS dword ptr [esp+O_INS]
#define OUTP dword ptr [esp+O_OUTP]
#define OUTS dword ptr [esp+O_OUTS]
#define PARM dword ptr [esp+O_PARAM]
#define INP O_INP(%esp)
#define INS O_INS(%esp)
#define OUTP O_OUTP(%esp)
#define OUTS O_OUTS(%esp)
#define PARM O_PARAM(%esp)
section LEXEC009
//; empty section for commonality with l_lx_exec86.asm
section LEXEC010
pusha
// cld
M_NRV2B_LE32=2 // ../conf.h
M_NRV2D_LE32=5
M_NRV2E_LE32=8
mov esi, INP
mov edi, OUTP
section NRV_HEAD
or ebp, -1
//;; align 8
0: .word 9f - 0b
#include "arch/i386/bxx.S"
9:
#include "arch/i386/nrv2b_d32.S"
#include "arch/i386/nrv2d_d32.S"
#include "arch/i386/nrv2e_d32.S"
/* Working registers */
#define off %eax /* XXX: 2GB */
#define len %ecx /* XXX: 2GB */
#define bits %ebx
#define disp %ebp
pusha
movl INP,%esi // hardware src for movsb, lodsb
movl INS,%ecx // srclen
add %esi,%ecx; mov %ecx,INP // src EOF
movl OUTP,%edi // hardware dst for movsb
xorl bits,bits // empty; force refill
xorl len,len // create loop invariant
orl $(~0),disp // -1: initial displacement
jmp setup
/* AMD64 branch prediction is much worse if there are more than 3 branches
per 16-byte block. The jnextb would suffer unless inlined. getnextb is OK
using closed subroutine to save space, and should be OK on cycles because
CALL+RET should be predicted. getnextb could partially expand, using closed
subroutine only for refill.
*/
/* jump on next bit {0,1} with prediction {y==>likely, n==>unlikely} */
/* Prediction omitted for now. */
/* On refill: prefetch next byte, for latency reduction on literals and offsets. */
#define jnextb0np jnextb0yp
#define jnextb0yp GETBITp; jnc
#define jnextb1np jnextb1yp
#define jnextb1yp GETBITp; jc
#define GETBITp \
addl bits,bits; jnz 0f; \
movl (%esi),bits; subl $-4,%esi; \
adcl bits,bits; movb (%esi),%dl; \
0:
/* Same, but without prefetch (not useful for length of match.) */
#define jnextb0n jnextb0y
#define jnextb0y GETBIT; jnc
#define jnextb1n jnextb1y
#define jnextb1y GETBIT; jc
#define GETBIT \
addl bits,bits; jnz 0f; \
movl (%esi),bits; subl $-4,%esi; \
adcl bits,bits; \
0:
/* rotate next bit into bottom bit of reg */
#define getnextbp(reg) GETBITp; adcl reg,reg
#define getnextb(reg) getnextbp(reg)
getbit:
addl bits,bits; jz refill // Carry= next bit
rep; ret
refill:
movl (%esi),bits; subl $-4,%esi // next 32 bits; set Carry
adcl bits,bits // LSB= 1 (CarryIn); CarryOut= next bit
movb (%esi),%dl // speculate: literal, or bottom 8 bits of offset
rep; ret
copy: // In: len, %edi, disp; Out: 0==len, %edi, disp; trashes %eax, %edx
leal (%edi,disp),%eax; cmpl $5,len // <=3 is forced
movb (%eax),%dl; jbe copy1 // <=5 for better branch predict
cmpl $-4,disp; ja copy1 // 4-byte chunks would overlap
subl $4,len // adjust for termination cases
copy4:
movl (%eax),%edx; addl $4, %eax; subl $4,len
movl %edx,(%edi); leal 4(%edi),%edi; jnc copy4
addl $4,len; movb (%eax),%dl; jz copy0
copy1:
incl %eax; movb %dl,(%edi); decl len
movb (%eax),%dl
leal 1(%edi),%edi; jnz copy1
copy0:
rep; ret
setup:
cld
section NRV2E
#include "arch/i386/nrv2e_d32-easy.S"
section NRV2D
#include "arch/i386/nrv2d_d32-easy.S"
section NRV2B
#include "arch/i386/nrv2b_d32-easy.S"
/* lzma has its own 'section's */
.intel_syntax noprefix
#include "arch/i386/lzma_d.S"
.att_syntax
section LEXEC015
// eax is 0 from decompressor code
//xor eax, eax ; return code
section NRV_TAIL
/* NRV_TAIL is empty */
// check compressed size
mov edx, INP
add edx, INS
cmp esi, edx
jz .ok
dec eax
.ok:
section MACHMAINY
eof:
subl OUTP,dst // dst -= original dst
movl OUTS,%ecx; movl dst,(%ecx) // actual length used at dst XXX: 4GB
subl INP,src // src -= eof; // return 0: good; else: bad
movl src,7*NBPW(%esp) // %eax in 'popa'
popa
ret
// write back the uncompressed size
sub edi, OUTP
mov edx, OUTS
mov [edx], edi
end_decompress: .globl end_decompress
mov [7*4 + esp], eax
popa
ret
/* IDENTSTR goes here */
ctojr32
ctok32 edi, dl
cit32 edi
section LEXEC017
popa
ret
section LEXEC020
#define PAGE_SIZE ( 1<<12)
section MACHMAINZ
PAGE_SIZE= ( 1<<12)
PAGE_MASK= -PAGE_SIZE
GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp
NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp
@ -144,40 +289,125 @@ sz_b_info= 12
sz_cpr= 4
b_method= 8
#define r_MHDR edi
main:
pop %ebp // &_start_end
lea -2*NBPW + (_start - _start_end)(%ebp),%esi
movzwl 0(%ebp),%eax // displ to f_exp
lea 2(%ebp),%ecx; push %ecx // FUNF
add %eax,%ebp // &f_exp
movl %esi,%edx
movl %esi,%edi; lodsl; subl %eax,%r_MHDR
movl %esi,%ecx; lodsl; subl %eax,%ecx // ADRX= &{l_info; p_info; b_info}
// For the benefit of 'fold':
push %ecx // ADRX
subl %ecx,%edx; push %edx // LENX
push %edi // MHDR
jmp unfold0
// Decompress the rest of this loader, and jump to it.
unfold:
pop esi; lodsd; // push %eax // O_BINFO
push esi; pop ebx // &{ b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_data...}
mov ecx,[sz_cpr + ebx]
lea esi,[ -1+ sz_b_info + ecx + ebx] // &hi_byte folded original
mov edi,[sz_unc + ebx]
lea edi,[GAP + NO_LAP -1+ sz_b_info + edi + ebx] // &hi_byte folded copy
std; rep movsb // copy descending
pop %ebx // &{ b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_fold...}
// Find __LINKEDIT
lea sz_Mach_header(%r_MHDR),%esi
sub %ecx,%ecx
L100:
add %ecx,%esi // next command
movl mlc_cmdsize(%esi),%ecx
cmpl $LC_SEGMENT,(%esi); jne L100
cmpl $__c4('L','I','N','K'),2+mseg_segname(%esi); jne L100
cmpl $__c4('E','D','I','T'),6+mseg_segname(%esi); jne L100
movl mseg_vmaddr(%esi),%ecx // arg1 for mprotect; dst= new unfold
lea edx,[GAP + ebx] // &unfolded
mov esi,ebx // &b_info
lea ebx,[1+ edi] // &lo_byte folded copy
push edx // &unfolded code
cld
lodsd
push eax // sz_uncompressed (maximum dstlen for lzma)
mov ecx,esp // save &dstlen
push eax // space for 5th param
push ecx // &dstlen
push edx // &dst
lodsd
push eax // sz_compressed (srclen)
lodsd
mov [4*3 + esp],eax // last 4 bytes of b_info
push ebx // &copied_compressed_data
call ebp // decompress(&src, srclen, &dst, &dstlen, b_info.misc)
add esp, (5+1)*4 // (5+1) args to decompress
lea ebx,[-4+ _start - decompress + ebp] // &total_length
ret // &destination
main:
pop ebp // &decompress
// Unfold
movl %ebx,%esi
push $PROT_READ|PROT_EXEC // arg3 for mprotect
lodsl; push %eax // arg2 for mprotect; .sz_unc == dstlen
movl %esp,%edx // remember &dstlen
push %ecx // arg1 for mprotect; dst= new unfold
push NBPW(%esi) // arg5 b_method (.b_method - .sz_cpr)
push %edx // arg4 &dstlen
push %ecx // arg3 dst
lodsl; push %eax // arg2 .sz_cpr
lodsl; push %esi // arg1 src
call *%ebp // decompress
addl $NBPW*5,%esp // 5 params to FEXP()
// PROT_EXEC
pop %edi // arg1 dst= new unfold
push %edi
push %edi // retaddr: dst is tail !!
// Use the copy.
// FIXME: ADRX, LENX
// rsp/ fd,ADRU,LENU,%entry,&Mach_header
// FALL THROUGH to mprotect
mprotect:
movb $SYS_mprotect,%al
L200:
movzbl %al,%eax
mov %esp,%ecx // &{user_ra, arg1, arg2, ...}
or $0xC0000,%eax
call sysgo; jnc 0f
or $~0,%eax // mov %eax,errno
0:
ret $3*NBPW // always remove 3 arguments from stack
write:
movb $SYS_write,%al; jmp L200
sysgo:
pop %edx // return address for sysenter
.byte 0x0f,0x34 // sysenter
#define DEBUG 1
#if DEBUG /*{*/
TRACE_BUFLEN=0x78
FD_STDERR=2
trace: // push $__c4(...); call trace
pusha; movl %esp,%esi // input
movl NBPW*(8+1)(%esp),%eax // annotation
subl $TRACE_BUFLEN,%esp
movl %esp,%edi // output
pushl %eax; movb $'\n',%al; stosb; popl %eax
0: // print annotation
stosb; shr $8,%eax; jnz 0b
pushl $8 // words per row
popl %eax
L610: // each word
pushl %eax // count
movb $' ',%al; call trace_hex // next word
popl %eax; decl %eax; jnz L610
movb $'\n',%al; stosb
xchg %edi,%eax
subl %esp,%eax // count
movl %esp,%ecx // buf
pushl %eax; pushl %ecx; push $FD_STDERR
call write
addl $TRACE_BUFLEN,%esp
popa
ret $NBPW // remove annotation
trace_hex:
stosb // punctuation
lodsl // datum
call 0f; .ascii "0123456789abcdef"; 0: pop %ebx
push $8; pop %ecx // iterations
1:
rol $4,%eax; mov %eax,%edx
andl $0xf,%eax; xlat; stosb; xchg %eax,%edx
dec %ecx; jnz 1b
ret
#endif /*}*/
unfold0:
call unfold
.long 0 // O_BINFO
FOLD:
// compressed fold_elf86 follows
/* vim:set ts=8 sw=8 et: */

View File

@ -29,7 +29,8 @@
* <jreiser@users.sourceforge.net>
*/
#include "arch/i386/macros.S"
.att_syntax // opcode src,dst
NBPW= 4
sz_b_info= 12
sz_unc= 0
@ -40,54 +41,48 @@ sz_p_info= 12
_start: .globl _start # ignored, but silence "cannot find entry symbol _start" from ld
i386_ts_eax = 0*4
i386_ts_ebx = 1*4
i386_ts_ecx = 2*4
i386_ts_edx = 3*4
i386_ts_edi = 4*4
i386_ts_esi = 5*4
i386_ts_ebp = 6*4
i386_ts_esp = 7*4
i386_ts_ss = 8*4
i386_ts_eflags = 9*4
i386_ts_eip = 10*4
i386_ts_cs = 11*4
i386_ts_ds = 12*4
i386_ts_es = 13*4
i386_ts_fs = 14*4
i386_ts_gs = 15*4
//In:
// %ebp= f_exp
// %esp/ MHDR, LENX, ADRX, FUNF, argc, argv, 0, envp, 0, apple, 0, strings
fold_begin: // In: ebx= &total_length
//// int3
push 0 # default value for mhdrp
mov edi,esp # &mhdrp
lea esi,[ 2+ ebp] # &f_unfilter
mov edx,[ebx] # sz_total
mov ecx,ebx
sub ecx,edx # src= &{l_info; p_info; b_info}
mov ebx,[sz_unc + sz_p_info + sz_l_info + ecx] # sz_mach_headers
mov eax,2048 # allow for /usr/lib/dyld
cmp eax,ebx
jbe 0f
mov ebx,eax
fold_begin:
// int3
pop %eax // MHDR
pop %edx // LENX
pop %ecx // ADRX &{l_info; p_info; b_info}
mov sz_unc + sz_p_info + sz_l_info(%ecx),%ebx # sz_mach_headers
movl $2048,%esi
cmp %esi,%ebx # allow for /usr/lib/dyld: 1564==sizeofcmds (MacOS 10.6.8)
ja 0f
mov %esi,%ebx
0:
sub esp,ebx # alloca
pusha # (mhdrpp, f_unfilter, f_decompress, mhdr, sz_mhdr, sz_total, src, junk)
call upx_main # Out: eax= &Mach_i386_thread_state of dyld
mov ecx,[4*4 + esp] # sz_mhdr
lea esp,[8*4 + 1*ecx + esp] # un_pusha, un_alloca; keep mhdrp
jmp [i386_ts_eip + eax] # esp: mhdrp, argc, argv...
pop %esi // FUNF
push $0 # default value for mhdrp
mov %esp,%edi # &mhdrp
sub %ebx,%esp # alloca
pusha # (mhdrpp, f_unfilter, f_decompress, mhdr, sz_mhdr, sz_total, src, MHDR)
call upx_main # Out: %eax= entry
movl 5*NBPW(%esp),%edi # sz_total
movl 7*NBPW(%esp),%esi # MHDR
push %eax; push %edi; push %esi; call munmap
pop %eax; pop %eax; pop %eax # %eax= entry
mov 4*NBPW(%esp),%ecx # sz_mhdr
lea 8*NBPW(%esp,%ecx),%esp # un_pusha, un_alloca; keep mhdrp
jmp *%eax # esp: mhdrp, argc, argv...
bswap: .globl bswap
mov eax,[4+ esp] # ptr
mov ecx,[8+ esp] # len
mov 1*NBPW(%esp),%eax # ptr
mov 2*NBPW(%esp),%ecx # len
0:
mov edx,[eax]
mov (%eax),%edx
.byte 0x0f,0xc8+2 // bswap edx
mov [eax],edx
sub ecx,4
lea eax,[4+ eax]
jae 0b
mov %edx,(%eax)
sub $NBPW,%ecx
lea NBPW(%eax),%eax
ja 0b
ret
SYS_exit =1
@ -102,36 +97,40 @@ SYS_mmap =197
SYS_munmap = 73
SYS_mprotect= 74
spin: .globl spin
rep; nop; jmp spin
ret
sysgo:
pop edx # return address for sysenter
pop %edx # return address for sysenter
.byte 0x0f, 0x34 # sysenter
// lazy jmps enable compression of this code
write: .globl write
mov al,SYS_write; jmps 2+ 0f; 0:
mov $SYS_write,%al; 0:jmp 0f
exit: .globl exit
mov al,SYS_exit; jmps 2+ 0f; 0:
mov $SYS_exit,%al; 0:jmp 0f
mprotect: .globl mprotect
mov al,SYS_mprotect; jmps 2+ 0f; 0:
mov $SYS_mprotect,%al; 0:jmp 0f
munmap: .globl munmap
mov al,SYS_munmap; jmps 2+ 0f; 0:
mov $SYS_munmap,%al; 0:jmp 0f
pread: .globl pread
mov al,SYS_pread; jmps 2+ 0f; 0:
mov $SYS_pread,%al; 0:jmp 0f
close: .globl close
mov al,SYS_close; jmps 2+ 0f; 0:
mov $SYS_close,%al; 0:jmp 0f
open: .globl open
mov al,SYS_open; jmps 2+ 0f; 0:
mov $SYS_open,%al; 0:jmp 0f
mmap: .globl mmap
mov al,SYS_mmap; jmps 2+ 0f; 0:
mov $SYS_mmap,%al; 0:jmp 0f
read: .globl read
mov al,SYS_read
mov $SYS_read,%al; 0:
movzbl eax,al # SYS_nnnnn
mov ecx,esp # &{user_ret_addr, arg1, arg2, ...}
movzbl %al,%eax # SYS_nnnnn
mov %esp,%ecx # &{user_ret_addr, arg1, arg2, ...}
call sysgo
jncs 0f
//mov errno,eax
or eax,~0
jnc 0f
//mov errno,%eax
or $~0,%eax
0:
ret

View File

@ -46,65 +46,25 @@
// static data, and no string constants.
#if !DEBUG /*{*/
#define DPRINTF(a) /* empty: no debug drivel */
#define DEBUG_STRCON(name, value) /* empty */
#define DPRINTF(a ...) /* empty: no debug drivel */
#else /*}{ DEBUG */
extern int write(int, void const *, size_t);
#if 0
#include "stdarg.h"
#else
#define DPRINTF(fmt, args...) ({ \
char const *r_fmt; \
asm("call 0f; .asciz \"" fmt "\"; 0: pop %0" \
/*out*/ : "=r"(r_fmt) ); \
dprintf(r_fmt, args); \
})
#define va_arg __builtin_va_arg
#define va_end __builtin_va_end
#define va_list __builtin_va_list
#define va_start __builtin_va_start
#endif
#if defined(__i386__) || defined(__x86_64__) /*{*/
#define PIC_STRING(value, var) \
__asm__ __volatile__ ( \
"call 0f; .asciz \"" value "\"; \
0: pop %0;" : "=r"(var) : \
)
#elif defined(__arm__) /*}{*/
#define PIC_STRING(value, var) \
__asm__ __volatile__ ( \
"mov %0,pc; b 0f; \
.asciz \"" value "\"; .balign 4; \
0: " : "=r"(var) \
)
#elif defined(__mips__) /*}{*/
#define PIC_STRING(value, var) \
__asm__ __volatile__ ( \
".set noreorder; bal 0f; move %0,$31; .set reorder; \
.asciz \"" value "\"; .balign 4; \
0: " \
: "=r"(var) : : "ra" \
)
#endif /*}*/
#define DEBUG_STRCON(name, strcon) \
static char const *name(void) { \
register char const *rv; PIC_STRING(strcon, rv); \
return rv; \
}
#ifdef __arm__ /*{*/
extern unsigned div10(unsigned);
#else /*}{*/
static unsigned
div10(unsigned x)
{
return x / 10u;
}
#endif /*}*/
static int
unsimal(unsigned x, char *ptr, int n)
{
if (10<=x) {
unsigned const q = div10(x);
unsigned const q = x / 10;
x -= 10 * q;
n = unsimal(q, ptr, n);
}
@ -122,54 +82,80 @@ decimal(int x, char *ptr, int n)
return unsimal(x, ptr, n);
}
DEBUG_STRCON(STR_hex, "0123456789abcdef");
static int
heximal(unsigned long x, char *ptr, int n)
{
if (16<=x) {
n = heximal(x>>4, ptr, n);
x &= 0xf;
unsigned j = -1+ 2*sizeof(unsigned long);
unsigned long m = 0xful << (4 * j);
for (; j; --j, m >>= 4) { // omit leading 0 digits
if (m & x) break;
}
ptr[n] = STR_hex()[x];
return 1+ n;
for (; m; --j, m >>= 4) {
unsigned d = 0xf & (x >> (4 * j));
ptr[n++] = ((10<=d) ? ('a' - 10) : '0') + d;
}
return n;
}
#define DPRINTF(a) dprintf a
static int
dprintf(char const *fmt, ...)
{
char c;
int n= 0;
char *ptr;
char buf[20];
char const *literal = 0; // NULL
char buf[24]; // ~0ull == 18446744073709551615 ==> 20 chars
va_list va; va_start(va, fmt);
ptr= &buf[0];
while (0!=(c= *fmt++)) if ('%'!=c) goto literal;
else switch (c= *fmt++) {
default: {
literal:
n+= write(2, fmt-1, 1);
} break;
case 0: goto done; /* early */
case 'u': {
n+= write(2, buf, unsimal(va_arg(va, unsigned), buf, 0));
} break;
case 'd': {
n+= write(2, buf, decimal(va_arg(va, int), buf, 0));
} break;
case 'p': {
buf[0] = '0';
buf[1] = 'x';
n+= write(2, buf, heximal((unsigned long)va_arg(va, void *), buf, 2));
} break;
case 'x': {
buf[0] = '0';
buf[1] = 'x';
n+= write(2, buf, heximal(va_arg(va, int), buf, 2));
} break;
for (;;) {
char c = *fmt++;
if (!c) { // end of fmt
if (literal) {
goto finish;
}
break; // goto done
}
if ('%'!=c) {
if (!literal) {
literal = fmt; // 1 beyond start of literal
}
continue;
}
// '%' == c
if (literal) {
finish:
n += write(2, -1+ literal, fmt - literal);
literal = 0; // NULL
if (!c) { // fmt already ended
break; // goto done
}
}
switch (c= *fmt++) { // deficiency: does not handle _long_
default: { // un-implemented conversion
n+= write(2, -1+ fmt, 1);
} break;
case 0: { // fmt ends with "%\0" ==> ignore
goto done;
} break;
case 'u': {
n+= write(2, buf, unsimal(va_arg(va, unsigned), buf, 0));
} break;
case 'd': {
n+= write(2, buf, decimal(va_arg(va, int), buf, 0));
} break;
case 'p': {
buf[0] = '0';
buf[1] = 'x';
n+= write(2, buf, heximal((unsigned long)va_arg(va, void *), buf, 2));
} break;
case 'x': {
buf[0] = '0';
buf[1] = 'x';
n+= write(2, buf, heximal(va_arg(va, unsigned int), buf, 2));
} break;
case 's': {
char *s0= (char *)va_arg(va, unsigned char *), *s= s0;
if (s) while (*s) ++s;
n+= write(2, s0, s - s0);
} break;
} // 'switch'
}
done:
va_end(va);
@ -177,6 +163,7 @@ done:
}
#endif /*}*/
extern int spin(int);
/*************************************************************************
// "file" util
@ -187,17 +174,16 @@ typedef struct {
void *buf;
} Extent;
DEBUG_STRCON(STR_xread, "xread %%p(%%x %%p) %%p %%x\\n")
DEBUG_STRCON(STR_xreadfail, "xreadfail %%p(%%x %%p) %%p %%x\\n")
static void
xread(Extent *x, void *buf, size_t count)
{
unsigned char *p=x->buf, *q=buf;
size_t j;
DPRINTF((STR_xread(), x, x->size, x->buf, buf, count));
DPRINTF("xread %%p(%%x %%p) %%p %%x\\n",
x, x->size, x->buf, buf, count);
if (x->size < count) {
DPRINTF((STR_xreadfail(), x, x->size, x->buf, buf, count));
DPRINTF("xreadfail %%p(%%x %%p) %%p %%x\\n",
x, x->size, x->buf, buf, count);
exit(127);
}
for (j = count; 0!=j--; ++p, ++q) {
@ -217,7 +203,6 @@ xread(Extent *x, void *buf, size_t count)
#define err_exit(a) goto error
#else //}{ save debugging time
#define ERR_LAB /*empty*/
DEBUG_STRCON(STR_exit, "err_exit %%x\\n");
static void
err_exit(int a)
@ -265,10 +250,6 @@ typedef int f_expand(
const nrv_byte *, nrv_uint,
nrv_byte *, nrv_uint *, unsigned );
DEBUG_STRCON(STR_unpackExtent,
"unpackExtent in=%%p(%%x %%p) out=%%p(%%x %%p) %%p %%p\\n");
DEBUG_STRCON(STR_err5, "sz_cpr=%%x sz_unc=%%x xo->size=%%x\\n");
static void
unpackExtent(
Extent *const xi, // input
@ -277,8 +258,8 @@ unpackExtent(
f_unfilter *f_unf
)
{
DPRINTF((STR_unpackExtent(),
xi, xi->size, xi->buf, xo, xo->size, xo->buf, f_decompress, f_unf));
DPRINTF("unpackExtent in=%%p(%%x %%p) out=%%p(%%x %%p) %%p %%p\\n",
xi, xi->size, xi->buf, xo, xo->size, xo->buf, f_decompress, f_unf);
while (xo->size) {
struct b_info h;
// Note: if h.sz_unc == h.sz_cpr then the block was not
@ -286,6 +267,8 @@ unpackExtent(
// Read and check block sizes.
xread(xi, (unsigned char *)&h, sizeof(h));
DPRINTF(" sz_unc=%%x sz_cpr=%%x param=%%x\\n",
h.sz_unc, h.sz_cpr, *(int *)&h.b_method);
if (h.sz_unc == 0) { // uncompressed size 0 -> EOF
if (h.sz_cpr != UPX_MAGIC_LE32) // h.sz_cpr must be h->magic
err_exit(2);
@ -299,7 +282,8 @@ ERR_LAB
}
if (h.sz_cpr > h.sz_unc
|| h.sz_unc > xo->size ) {
DPRINTF((STR_err5(), h.sz_cpr, h.sz_unc, xo->size));
DPRINTF("sz_cpr=%%x sz_unc=%%x xo->size=%%x\\n",
h.sz_cpr, h.sz_unc, xo->size);
err_exit(5);
}
// Now we have:
@ -313,7 +297,10 @@ ERR_LAB
xo->buf, &out_len, h.b_method);
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
DPRINTF(" b_ftid=%%x f_unf=%%p\\n", h.b_ftid, f_unf);
if (h.b_ftid!=0 && f_unf) { // have filter
DPRINTF(" unfiltering f_unf=%%p buf=%%p len=%%x cto=%%x ftid=%%x\\n",
f_unf, xo->buf, out_len, h.b_cto8, h.b_ftid);
(*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
}
xi->buf += h.sz_cpr;
@ -349,6 +336,8 @@ upx_bzero(unsigned char *p, size_t len)
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
typedef size_t Addr;
typedef struct {
unsigned magic;
unsigned nfat_arch;
@ -408,8 +397,8 @@ typedef struct {
unsigned cmd;
unsigned cmdsize;
char segname[16];
unsigned vmaddr;
unsigned vmsize;
Addr vmaddr;
Addr vmsize;
unsigned fileoff;
unsigned filesize;
unsigned maxprot;
@ -418,11 +407,26 @@ typedef struct {
unsigned flags;
} Mach_segment_command;
enum e5 {
VM_PROT_NONE = 0,
VM_PROT_READ = 1,
VM_PROT_WRITE = 2,
VM_PROT_EXECUTE = 4
};
typedef struct {
char sectname[16];
char segname[16];
Addr addr; /* memory address */
Addr size; /* size in bytes */
unsigned offset; /* file offset */
unsigned align; /* power of 2 */
unsigned reloff; /* file offset of relocation entries */
unsigned nreloc; /* number of relocation entries */
unsigned flags; /* section type and attributes */
unsigned reserved1; /* for offset or index */
unsigned reserved2; /* for count or sizeof */
} Mach_section_command;
typedef struct {
unsigned eax, ebx, ecx, edx;
unsigned edi, esi, ebp;
@ -465,102 +469,235 @@ extern void *mmap(void *, size_t, unsigned, unsigned, int, off_t_upx_stub, unsig
extern ssize_t pread(int, void *, size_t, off_t_upx_stub, unsigned);
extern void bswap(void *, unsigned);
DEBUG_STRCON(STR_mmap,
"mmap addr=%%p len=%%p prot=%%x flags=%%x fd=%%d off=%%p\\n");
DEBUG_STRCON(STR_do_xmap,
"do_xmap fdi=%%x mhdr=%%p xi=%%p(%%x %%p) f_unf=%%p\\n")
enum {
MH_DYLINKER= 7, /* /usr/bin/dyld */
MH_PIE = 0x200000 // ASLR
static Mach_i386_thread_state const *
do_xmap(
};
// Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD),
// and mmap that much, to be sure that a kernel using exec-shield-randomize
// won't place the first piece in a way that leaves no room for the rest.
static Addr // returns relocation constant
xfind_pages(
Mach_header const *const mhdr,
Mach_segment_command const *sc,
int const ncmds,
Addr addr
)
{
Addr lo= ~(Addr)0, hi= 0;
int j;
unsigned mflags = ((mhdr->filetype == MH_DYLINKER || mhdr->flags & MH_PIE) ? 0 : MAP_FIXED);
mflags += MAP_PRIVATE | MAP_ANON; // '+' can optimize better than '|'
DPRINTF("xfind_pages mhdr=%%p sc=%%p ncmds=%%d addr=%%p mflags=%%x\\n",
mhdr, sc, ncmds, addr, mflags);
for (j=0; j < ncmds; ++j,
(sc = (Mach_segment_command const *)((sc->cmdsize>>2) + (unsigned const *)sc))
) if (LC_SEGMENT==sc->cmd) {
DPRINTF(" #%%d cmd=%%x cmdsize=%%x vmaddr=%%p vmsize==%%p lo=%%p mflags=%%x\\n",
j, sc->cmd, sc->cmdsize, sc->vmaddr, sc->vmsize, lo, mflags);
if (sc->vmsize // theoretically occupies address space
&& !(sc->vmaddr==0 && (MAP_FIXED & mflags)) // but ignore PAGEZERO when MAP_FIXED
) {
if (mhdr->filetype == MH_DYLINKER // /usr/lib/dyld
&& 0==(1+ lo) // 1st LC_SEGMENT
&& sc->vmaddr != 0 // non-floating address
) {
// "pre-linked" dyld on MacOS 10.11.x El Capitan
mflags |= MAP_FIXED;
}
if (lo > sc->vmaddr) {
lo = sc->vmaddr;
}
if (hi < (sc->vmsize + sc->vmaddr)) {
hi = sc->vmsize + sc->vmaddr;
}
}
}
lo -= ~PAGE_MASK & lo; // round down to page boundary
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
DPRINTF(" addr=%%p lo=%%p len=%%p mflags=%%x\\n", addr, lo, hi, mflags);
if (MAP_FIXED & mflags) {
addr = lo;
int rv = munmap((void *)addr, hi);
if (rv) {
DPRINTF("munmap addr=%%p len=%%p, rv=%%x\\n", addr, hi, rv);
}
}
addr = (Addr)mmap((void *)addr, hi, VM_PROT_NONE, mflags, MAP_ANON_FD, 0, 0);
DPRINTF(" addr=%%p\\n", addr);
if (~PAGE_MASK & addr) {
//err_exit(6);
}
return (Addr)(addr - lo);
}
Addr // entry: &hatch if main; Mach_thread_state->eip if dyld
do_xmap(
Mach_header *const mhdr,
off_t_upx_stub const fat_offset,
Extent *const xi,
int const fdi,
Mach_header **mhdrpp,
f_expand *const f_decompress,
f_expand *const f_exp,
f_unfilter *const f_unf
)
{
Mach_segment_command const *sc = (Mach_segment_command const *)(1+ mhdr);
Mach_i386_thread_state const *entry = 0;
DPRINTF("do_xmap fdi=%%x mhdr=%%p *mhdrpp=%%p xi=%%p(%%x %%p) f_unf=%%p\\n",
fdi, mhdr, (mhdrpp ? *mhdrpp : 0), xi, (xi? xi->size: 0), (xi? xi->buf: 0), f_unf);
Addr rv = 0;
Mach_segment_command *sc = (Mach_segment_command *)(1+ mhdr);
Addr const reloc = xfind_pages(mhdr, sc, mhdr->ncmds, 0);
DPRINTF("do_xmap reloc=%%p\\n", reloc);
unsigned j;
DPRINTF((STR_do_xmap(),
fdi, mhdr, xi, (xi? xi->size: 0), (xi? xi->buf: 0), f_unf));
for ( j=0; j < mhdr->ncmds; ++j,
(sc = (Mach_segment_command const *)(sc->cmdsize + (void const *)sc))
) if (LC_SEGMENT==sc->cmd && sc->vmsize!=0) {
Extent xo;
size_t mlen = xo.size = sc->filesize;
unsigned char *addr = xo.buf = (unsigned char *)sc->vmaddr;
unsigned char *haddr = sc->vmsize + addr;
size_t frag = (int)addr &~ PAGE_MASK;
addr -= frag;
mlen += frag;
(sc = (Mach_segment_command *)((sc->cmdsize>>2) + (unsigned *)sc))
) {
DPRINTF(" #%%d cmd=%%x cmdsize=%%x vmsize=%%x\\n",
j, sc->cmd, sc->cmdsize, sc->vmsize);
if (LC_SEGMENT==sc->cmd && !sc->vmsize) {
// Typical __DWARF info segment for 'rust'
struct b_info h;
xread(xi, (unsigned char *)&h, sizeof(h));
DPRINTF(" 0==.vmsize; skipping %%x\\n", h.sz_cpr);
xi->buf += h.sz_cpr;
}
if (LC_SEGMENT==sc->cmd && sc->vmsize) {
Extent xo;
size_t mlen = xo.size = sc->filesize;
xo.buf = (void *)(reloc + sc->vmaddr);
Addr addr = (Addr)xo.buf;
Addr haddr = sc->vmsize + addr;
size_t frag = addr &~ PAGE_MASK;
addr -= frag;
mlen += frag;
if (0!=mlen) {
// Decompressor can overrun the destination by 3 bytes. [x86 only]
size_t const mlen3 = mlen + (xi ? 3 : 0);
unsigned const prot = VM_PROT_READ | VM_PROT_WRITE;
unsigned const flags = MAP_FIXED | MAP_PRIVATE |
((xi || 0==sc->filesize) ? MAP_ANON : 0);
int const fdm = ((0==sc->filesize) ? MAP_ANON_FD : fdi);
off_t_upx_stub const offset = sc->fileoff + fat_offset;
DPRINTF(" mlen=%%p frag=%%p addr=%%p\\n", mlen, frag, addr);
if (0!=mlen) { // In particular, omitted for __PAGEZERO
size_t const mlen3 = mlen
#if defined(__x86_64__) //{
// Decompressor can overrun the destination by 3 bytes. [x86 only]
+ (xi ? 3 : 0)
#endif //}
;
unsigned const prot = VM_PROT_READ | VM_PROT_WRITE;
// MAP_FIXED: xfind_pages() reserved them, so use them!
unsigned const flags = MAP_FIXED | MAP_PRIVATE |
((xi || 0==sc->filesize) ? MAP_ANON : 0);
int const fdm = ((xi || 0==sc->filesize) ? MAP_ANON_FD : fdi);
off_t_upx_stub const offset = sc->fileoff + fat_offset;
DPRINTF((STR_mmap(), addr, mlen3, prot, flags, fdm, offset));
if (addr != mmap(addr, mlen3, prot, flags, fdm, offset, 0)) {
err_exit(8);
DPRINTF("mmap addr=%%p len=%%p prot=%%x flags=%%x fd=%%d off=%%p reloc=%%p\\n",
addr, mlen3, prot, flags, fdm, offset, reloc);
{
Addr maddr = (Addr)mmap((void *)addr, mlen3, prot, flags, fdm, offset, 0);
DPRINTF("maddr=%%p\\n", maddr);
if (maddr != addr) {
err_exit(8);
}
addr = maddr;
}
if (mhdrpp && !*mhdrpp) { // MH_DYLINKER
*mhdrpp = (Mach_header*)addr;
}
}
if (xi && 0!=sc->filesize) {
if (0==sc->fileoff /*&& 0!=mhdrpp*/) {
*mhdrpp = (Mach_header *)(void *)addr;
}
unpackExtent(xi, &xo, f_exp, f_unf);
}
DPRINTF("xi=%%p mlen=%%p fileoff=%%p nsects=%%d\\n",
xi, mlen, sc->fileoff, sc->nsects);
if (xi && mlen && !sc->fileoff && sc->nsects) {
// main target __TEXT segment at beginning of file with sections (__text)
// Use upto 2 words of header padding for the escape hatch.
// fold.S could do this easier, except PROT_WRITE is missing then.
union {
unsigned char *p0;
unsigned short *p1;
unsigned int *p2;
unsigned long *p3;
} u;
u.p0 = (unsigned char *)addr;
Mach_segment_command *segp = (Mach_segment_command *)((((char *)sc - (char *)mhdr)>>2) + u.p2);
Mach_section_command *const secp = (Mach_section_command *)(1+ segp);
unsigned *hatch= -2+ (secp->offset>>2) + u.p2;
DPRINTF("hatch=%%p segp=%%p secp=%%p secp->offset=%%p mhdr=%%p\\n", hatch, segp, secp, secp->offset, addr);
#if defined(__aarch64__) //{
hatch[0] = 0xd4000001; // svc #0 // syscall
hatch[1] = 0xd65f03c0; // ret
#elif defined(__arm__) //}{
hatch[0] = 0xef000000; // svc 0x0 // syscall
hatch[1] = 0xe12fff1e; // bx lr
#elif defined(__x86_64__) //}{
hatch[0] = 0xc3050f90; // nop; syscall; ret
#elif defined(__i386__) //}{
hatch[0] = 0xc3050f90; // nop; syscall; ret
#endif //}
rv = (Addr)hatch;
}
/*bzero(addr, frag);*/ // fragment at lo end
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
bzero((void *)(mlen+addr), frag); // fragment at hi end
if (0!=mlen && 0!=mprotect((void *)addr, mlen, sc->initprot)) {
err_exit(10);
ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (
#if SIMULATE_ON_LINUX_EABI4 /*{*/
0!=addr &&
#endif /*}*/
addr < haddr) { // need pages for .bss
if (0!=addr && addr != (Addr)mmap((void *)addr, haddr - addr, sc->initprot,
MAP_FIXED | MAP_PRIVATE | MAP_ANON, MAP_ANON_FD, 0, 0) ) {
err_exit(9);
}
}
else if (xi) { // cleanup if decompressor overrun crosses page boundary
mlen = ~PAGE_MASK & (3+ mlen);
if (mlen<=3) { // page fragment was overrun buffer only
DPRINTF("munmap %%x %%x\\n", addr, mlen);
munmap((char *)addr, mlen);
}
}
}
if (xi && 0!=sc->filesize) {
if (0==sc->fileoff && 0!=mhdrpp) {
*mhdrpp = (Mach_header *)addr;
}
unpackExtent(xi, &xo, f_decompress, f_unf);
}
/*bzero(addr, frag);*/ // fragment at lo end
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
bzero(mlen+addr, frag); // fragment at hi end
if (0!=mlen && 0!=mprotect(addr, mlen, sc->initprot)) {
err_exit(10);
ERR_LAB
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (0!=addr && addr != mmap(addr, haddr - addr, sc->initprot,
MAP_FIXED | MAP_PRIVATE | MAP_ANON, MAP_ANON_FD, 0, 0 ) ) {
err_exit(9);
}
}
else if (xi) { // cleanup if decompressor overrun crosses page boundary
mlen = ~PAGE_MASK & (3+ mlen);
if (mlen<=3) { // page fragment was overrun buffer only
munmap(addr, mlen);
else if (!xi // dyld
&& (LC_UNIXTHREAD==sc->cmd || LC_THREAD==sc->cmd)) {
Mach_thread_command *const thrc = (Mach_thread_command *)sc;
DPRINTF("thread_command= %%p\\n", sc);
if (1
// FIXME THREAD_STATE ==thrc->flavor
// && THREAD_STATE_COUNT==thrc->count
) {
DPRINTF("thread_state= %%p flavor=%%d count=%%x reloc=%%p\\n",
&thrc->state, thrc->flavor, thrc->count, reloc);
#if defined(__aarch64__) //{
rv = reloc + thrc->state.pc;
#elif defined(__arm__) //}{
rv = reloc + thrc->state.pc;
#elif defined(__x86_64__) //}{
rv = reloc + thrc->state.rip;
#elif defined(__i386__) //}{
rv = reloc + thrc->state.eip;
#else //}{
#error do_xmap rv $ARCH
#endif //}
}
}
}
else if (LC_UNIXTHREAD==sc->cmd || LC_THREAD==sc->cmd) {
Mach_thread_command const *const thrc = (Mach_thread_command const *)sc;
if (i386_THREAD_STATE ==thrc->flavor
&& i386_THREAD_STATE_COUNT==thrc->count ) {
entry = &thrc->state;
}
}
return entry;
DPRINTF("do_xmap= %%p\\n", rv);
return rv;
}
/*************************************************************************
// upx_main - called by our entry code
//
**************************************************************************/
DEBUG_STRCON(STR_upx_main,
"upx_main szc=%%x f_dec=%%p f_unf=%%p "
" xo=%%p(%%x %%p) xi=%%p(%%x %%p) mhdrpp=%%p\\n")
Mach_i386_thread_state const *
Addr
upx_main(
Mach_header **const mhdrpp, // Out: *mhdrpp= &real Mach_header
f_unfilter *const f_unf,
@ -571,7 +708,7 @@ upx_main(
struct l_info const *const li
)
{
Mach_i386_thread_state const *entry;
Addr entry;
off_t_upx_stub fat_offset = 0;
Extent xi, xo, xi0;
xi.buf = CONST_CAST(unsigned char *, 1+ (struct p_info const *)(1+ li)); // &b_info
@ -580,9 +717,11 @@ upx_main(
xo.size = ((struct b_info const *)(void const *)xi.buf)->sz_unc;
xi0 = xi;
DPRINTF((STR_upx_main(),
sz_compressed, f_decompress, f_unf, &xo, xo.size, xo.buf,
&xi, xi.size, xi.buf, mhdrpp));
DPRINTF("upx_main szc=%%x f_dec=%%p f_unf=%%p "
" xo=%%p(%%x %%p) xi=%%p(%%x %%p) mhdrpp=%%p\\n",
sz_compressed, f_decompress, f_unf,
&xo, xo.size, xo.buf,
&xi, xi.size, xi.buf, mhdrpp);
// Uncompress Macho headers
unpackExtent(&xi, &xo, f_decompress, 0); // never filtered?

View File

@ -710,6 +710,44 @@ typedef struct {
//# -Wl,-unexported_symbols_list unexport-upxload.txt \
//# strip -u -r i386-darwin.macho-upxmain.exe
// Makefile:
//# Compile i386-darwin.macho-upxmain.c on MacOS 10.9 (Mavericks) or later,
//# to get smaller code. Then copy i386-darwin.macho-upxmain.o to MacOS 10.6.x,
//# and static link, to get runtime conventions straight [??]
//#\tgcc -m32 -c -I $PWD \
//#\t -Os -fPIC -fno-stack-protector -fno-unwind-tables \
//#\t i386-darwin.macho-upxmain.c
//
//i386-darwin.macho-upxmain.exe: Makefile
//i386-darwin.macho-upxmain.exe: start.S
//i386-darwin.macho-upxmain.exe: i386-darwin.macho-upxsubr.S
//i386-darwin.macho-upxmain.exe: i386-darwin.macho-upxmain.o
//\tgcc -c start.S i386-darwin.macho-upxsubr.S
//\tgcc -o $@ -I $PWD \
//\t -O -nostartfiles -fno-stack-protector -fno-unwind-tables \
//\t start.o \
//\t i386-darwin.macho-upxmain.o \
//\t i386-darwin.macho-upxsubr.o \
//\t -Wl,-pagezero_size,0x1000 \
//\t -Wl,-no_uuid \
//\t -Wl,-bind_at_load \
//\t -Wl,-headerpad,0x400
//\tstrip -u -r -S -x $@
//\totool -hl $@ >upxmain-new.otool
// History: Originally this file i386-darwin.macho-upxmain.c was the entry point
// of the compressed program. The output i386-darwin.macho-upxmain.exe was used
// as a prototype for LC_* commands. The start address was in LC_UNIXTHREAD.
// The decompressor upx_main() i386-darwin.macho-main.c itself was not compressed.
//
// Then MacOS 10.7 ("Lion") supported 64-bit x86_64, and things began to change.
// The start address (for anything except the dynamic linker) is in LC_MAIN.
// We still use LC_UNIXTHREAD because we are "dynamic linker".
// Because no program on MacOS uses brk(0), then the compressed program and stub
// could above the space for un-compressed program, saving a copy-and-relocate.
// The run-time decompression could be more like on Linux, using: macho-entry.S,
// macho-fold.S, macho-main.c
int
main(int argc, char *argv[])
{

View File

@ -2,521 +2,60 @@ file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 I386BXX0 00000002 00000000 00000000 00000034 2**0 CONTENTS, RELOC, READONLY
1 I386BXX1 00000001 00000000 00000000 00000036 2**0 CONTENTS, READONLY
2 LEXEC000 00000005 00000000 00000000 00000037 2**0 CONTENTS, RELOC, READONLY
3 LEXEC009 00000000 00000000 00000000 0000003c 2**0 CONTENTS, READONLY
4 LEXEC010 0000000c 00000000 00000000 0000003c 2**0 CONTENTS, READONLY
5 N2BSMA10 00000003 00000000 00000000 00000048 2**0 CONTENTS, RELOC, READONLY
6 N2BFAS10 00000002 00000000 00000000 0000004b 2**0 CONTENTS, RELOC, READONLY
7 N2BFAS11 00000006 00000000 00000000 0000004d 2**0 CONTENTS, READONLY
8 N2BDEC10 0000000b 00000000 00000000 00000053 2**0 CONTENTS, READONLY
9 N2BSMA20 00000005 00000000 00000000 0000005e 2**0 CONTENTS, RELOC, READONLY
10 N2BFAS20 00000009 00000000 00000000 00000063 2**0 CONTENTS, RELOC, READONLY
11 N2BDEC20 0000000d 00000000 00000000 0000006c 2**0 CONTENTS, READONLY
12 N2BSMA30 0000000d 00000000 00000000 00000079 2**0 CONTENTS, RELOC, READONLY
13 N2BFAS30 0000000f 00000000 00000000 00000086 2**0 CONTENTS, RELOC, READONLY
14 N2BDEC30 0000003e 00000000 00000000 00000095 2**0 CONTENTS, RELOC, READONLY
15 N2BSMA40 0000000d 00000000 00000000 000000d3 2**0 CONTENTS, RELOC, READONLY
16 N2BFAS40 0000000f 00000000 00000000 000000e0 2**0 CONTENTS, RELOC, READONLY
17 N2BSMA50 00000002 00000000 00000000 000000ef 2**0 CONTENTS, READONLY
18 N2BFAS50 00000003 00000000 00000000 000000f1 2**0 CONTENTS, READONLY
19 N2BDEC50 00000009 00000000 00000000 000000f4 2**0 CONTENTS, READONLY
20 N2BSMA60 0000000c 00000000 00000000 000000fd 2**0 CONTENTS, RELOC, READONLY
21 N2BFAS60 00000019 00000000 00000000 00000109 2**0 CONTENTS, RELOC, READONLY
22 N2BFAS61 00000016 00000000 00000000 00000122 2**0 CONTENTS, RELOC, READONLY
23 N2BDEC60 00000000 00000000 00000000 00000138 2**0 CONTENTS, READONLY
24 N2DSMA10 00000003 00000000 00000000 00000138 2**0 CONTENTS, RELOC, READONLY
25 N2DFAS10 00000002 00000000 00000000 0000013b 2**0 CONTENTS, RELOC, READONLY
26 N2DFAS11 00000006 00000000 00000000 0000013d 2**0 CONTENTS, READONLY
27 N2DDEC10 0000000b 00000000 00000000 00000143 2**0 CONTENTS, READONLY
28 N2DSMA20 00000005 00000000 00000000 0000014e 2**0 CONTENTS, RELOC, READONLY
29 N2DFAS20 00000009 00000000 00000000 00000153 2**0 CONTENTS, RELOC, READONLY
30 N2DDEC20 0000000d 00000000 00000000 0000015c 2**0 CONTENTS, READONLY
31 N2DSMA30 0000000d 00000000 00000000 00000169 2**0 CONTENTS, RELOC, READONLY
32 N2DFAS30 0000000f 00000000 00000000 00000176 2**0 CONTENTS, RELOC, READONLY
33 N2DDEC30 00000052 00000000 00000000 00000185 2**0 CONTENTS, RELOC, READONLY
34 N2DSMA40 0000000d 00000000 00000000 000001d7 2**0 CONTENTS, RELOC, READONLY
35 N2DFAS40 0000000f 00000000 00000000 000001e4 2**0 CONTENTS, RELOC, READONLY
36 N2DSMA50 00000002 00000000 00000000 000001f3 2**0 CONTENTS, READONLY
37 N2DFAS50 00000003 00000000 00000000 000001f5 2**0 CONTENTS, READONLY
38 N2DDEC50 00000009 00000000 00000000 000001f8 2**0 CONTENTS, READONLY
39 N2DSMA60 0000000c 00000000 00000000 00000201 2**0 CONTENTS, RELOC, READONLY
40 N2DFAS60 00000019 00000000 00000000 0000020d 2**0 CONTENTS, RELOC, READONLY
41 N2DFAS61 00000016 00000000 00000000 00000226 2**0 CONTENTS, RELOC, READONLY
42 N2DDEC60 00000000 00000000 00000000 0000023c 2**0 CONTENTS, READONLY
43 N2ESMA10 00000003 00000000 00000000 0000023c 2**0 CONTENTS, RELOC, READONLY
44 N2EFAS10 00000002 00000000 00000000 0000023f 2**0 CONTENTS, RELOC, READONLY
45 N2EFAS11 00000006 00000000 00000000 00000241 2**0 CONTENTS, READONLY
46 N2EDEC10 0000000b 00000000 00000000 00000247 2**0 CONTENTS, READONLY
47 N2ESMA20 00000005 00000000 00000000 00000252 2**0 CONTENTS, RELOC, READONLY
48 N2EFAS20 00000009 00000000 00000000 00000257 2**0 CONTENTS, RELOC, READONLY
49 N2EDEC20 0000000d 00000000 00000000 00000260 2**0 CONTENTS, READONLY
50 N2ESMA30 0000000d 00000000 00000000 0000026d 2**0 CONTENTS, RELOC, READONLY
51 N2EFAS30 0000000f 00000000 00000000 0000027a 2**0 CONTENTS, RELOC, READONLY
52 N2EDEC30 0000005f 00000000 00000000 00000289 2**0 CONTENTS, RELOC, READONLY
53 N2ESMA40 0000000d 00000000 00000000 000002e8 2**0 CONTENTS, RELOC, READONLY
54 N2EFAS40 0000000f 00000000 00000000 000002f5 2**0 CONTENTS, RELOC, READONLY
55 N2ESMA50 00000002 00000000 00000000 00000304 2**0 CONTENTS, READONLY
56 N2EFAS50 00000003 00000000 00000000 00000306 2**0 CONTENTS, READONLY
57 N2EDEC50 00000009 00000000 00000000 00000309 2**0 CONTENTS, READONLY
58 N2ESMA60 0000000c 00000000 00000000 00000312 2**0 CONTENTS, RELOC, READONLY
59 N2EFAS60 00000019 00000000 00000000 0000031e 2**0 CONTENTS, RELOC, READONLY
60 N2EFAS61 00000016 00000000 00000000 00000337 2**0 CONTENTS, RELOC, READONLY
61 N2EDEC60 00000000 00000000 00000000 0000034d 2**0 CONTENTS, READONLY
62 LZMA_DEC00 0000002e 00000000 00000000 0000034d 2**0 CONTENTS, RELOC, READONLY
63 LZMA_ELF00 00000048 00000000 00000000 0000037b 2**0 CONTENTS, READONLY
64 LZMA_DEC10 00000a86 00000000 00000000 000003c3 2**0 CONTENTS, READONLY
65 LZMA_DEC20 00000a86 00000000 00000000 00000e49 2**0 CONTENTS, READONLY
66 LZMA_DEC30 0000001a 00000000 00000000 000018cf 2**0 CONTENTS, READONLY
67 LEXEC015 0000001d 00000000 00000000 000018e9 2**0 CONTENTS, READONLY
68 LXUNF000 00000002 00000000 00000000 00001906 2**0 CONTENTS, RELOC, READONLY
69 LXUNF002 00000005 00000000 00000000 00001908 2**0 CONTENTS, READONLY
70 MRUBYTE0 00000002 00000000 00000000 0000190d 2**0 CONTENTS, READONLY
71 LXMRU005 00000005 00000000 00000000 0000190f 2**0 CONTENTS, RELOC, READONLY
72 LXMRU006 00000007 00000000 00000000 00001914 2**0 CONTENTS, READONLY
73 LXMRU007 00000007 00000000 00000000 0000191b 2**0 CONTENTS, READONLY
74 LXUNF008 00000004 00000000 00000000 00001922 2**0 CONTENTS, READONLY
75 LXUNF010 00000005 00000000 00000000 00001926 2**0 CONTENTS, RELOC, READONLY
76 LXJCC010 00000003 00000000 00000000 0000192b 2**0 CONTENTS, READONLY
77 LXMRU045 00000003 00000000 00000000 0000192e 2**0 CONTENTS, READONLY
78 LXMRU046 00000002 00000000 00000000 00001931 2**0 CONTENTS, READONLY
79 LXJCC020 00000002 00000000 00000000 00001933 2**0 CONTENTS, RELOC, READONLY
80 LXJCC021 00000005 00000000 00000000 00001935 2**0 CONTENTS, RELOC, READONLY
81 LXJCC023 00000007 00000000 00000000 0000193a 2**0 CONTENTS, READONLY
82 LXUNF037 00000002 00000000 00000000 00001941 2**0 CONTENTS, READONLY
83 LXUNF386 00000001 00000000 00000000 00001943 2**0 CONTENTS, READONLY
84 LXUNF387 00000009 00000000 00000000 00001944 2**0 CONTENTS, READONLY
85 LXUNF388 00000003 00000000 00000000 0000194d 2**0 CONTENTS, RELOC, READONLY
86 LXUNF486 00000004 00000000 00000000 00001950 2**0 CONTENTS, READONLY
87 LXUNF487 00000002 00000000 00000000 00001954 2**0 CONTENTS, RELOC, READONLY
88 LXMRU065 00000005 00000000 00000000 00001956 2**0 CONTENTS, RELOC, READONLY
89 MRUBYTE3 00000002 00000000 00000000 0000195b 2**0 CONTENTS, READONLY
90 MRUARB30 00000001 00000000 00000000 0000195d 2**0 CONTENTS, READONLY
91 MRUBITS3 00000002 00000000 00000000 0000195e 2**0 CONTENTS, READONLY
92 MRUARB40 00000004 00000000 00000000 00001960 2**0 CONTENTS, READONLY
93 LXMRU070 00000008 00000000 00000000 00001964 2**0 CONTENTS, RELOC, READONLY
94 MRUBYTE4 00000003 00000000 00000000 0000196c 2**0 CONTENTS, READONLY
95 MRUBITS4 00000002 00000000 00000000 0000196f 2**0 CONTENTS, READONLY
96 MRUARB50 00000006 00000000 00000000 00001971 2**0 CONTENTS, READONLY
97 LXMRU080 00000003 00000000 00000000 00001977 2**0 CONTENTS, READONLY
98 MRUBYTE5 00000002 00000000 00000000 0000197a 2**0 CONTENTS, READONLY
99 MRUARB60 00000001 00000000 00000000 0000197c 2**0 CONTENTS, READONLY
100 MRUBITS5 00000002 00000000 00000000 0000197d 2**0 CONTENTS, READONLY
101 MRUARB70 00000004 00000000 00000000 0000197f 2**0 CONTENTS, READONLY
102 LXMRU090 0000000b 00000000 00000000 00001983 2**0 CONTENTS, RELOC, READONLY
103 MRUBYTE6 00000002 00000000 00000000 0000198e 2**0 CONTENTS, READONLY
104 MRUARB80 00000001 00000000 00000000 00001990 2**0 CONTENTS, READONLY
105 MRUBITS6 00000002 00000000 00000000 00001991 2**0 CONTENTS, READONLY
106 MRUARB90 00000004 00000000 00000000 00001993 2**0 CONTENTS, READONLY
107 LXMRU100 00000010 00000000 00000000 00001997 2**0 CONTENTS, READONLY
108 LXUNF040 00000005 00000000 00000000 000019a7 2**0 CONTENTS, READONLY
109 LXMRU110 00000003 00000000 00000000 000019ac 2**0 CONTENTS, READONLY
110 LXMRU111 00000002 00000000 00000000 000019af 2**0 CONTENTS, READONLY
111 LXUNF041 00000007 00000000 00000000 000019b1 2**0 CONTENTS, RELOC, READONLY
112 LXUNF042 00000000 00000000 00000000 000019b8 2**0 CONTENTS, READONLY
113 LEXEC016 00000005 00000000 00000000 000019b8 2**0 CONTENTS, RELOC, READONLY
114 LXMRU010 00000001 00000000 00000000 000019bd 2**0 CONTENTS, READONLY
115 LXJMPA00 00000002 00000000 00000000 000019be 2**0 CONTENTS, READONLY
116 LXCALLB0 00000002 00000000 00000000 000019c0 2**0 CONTENTS, READONLY
117 LXUNF021 00000006 00000000 00000000 000019c2 2**0 CONTENTS, READONLY
118 LXMRU022 00000003 00000000 00000000 000019c8 2**0 CONTENTS, READONLY
119 LXJMPA01 00000002 00000000 00000000 000019cb 2**0 CONTENTS, READONLY
120 LXCALLB1 00000002 00000000 00000000 000019cd 2**0 CONTENTS, READONLY
121 MRUBITS1 00000001 00000000 00000000 000019cf 2**0 CONTENTS, READONLY
122 LXMRU030 00000002 00000000 00000000 000019d0 2**0 CONTENTS, READONLY
123 MRUBYTE1 00000002 00000000 00000000 000019d2 2**0 CONTENTS, READONLY
124 MRUARB10 00000001 00000000 00000000 000019d4 2**0 CONTENTS, READONLY
125 LXMRU040 00000002 00000000 00000000 000019d5 2**0 CONTENTS, RELOC, READONLY
126 LXUNF030 00000006 00000000 00000000 000019d7 2**0 CONTENTS, READONLY
127 LXJCC000 00000008 00000000 00000000 000019dd 2**0 CONTENTS, RELOC, READONLY
128 LXCJ0MRU 00000002 00000000 00000000 000019e5 2**0 CONTENTS, READONLY
129 LXCJ1MRU 00000003 00000000 00000000 000019e7 2**0 CONTENTS, READONLY
130 LXCALJMP 00000003 00000000 00000000 000019ea 2**0 CONTENTS, READONLY
131 LXCALL00 00000002 00000000 00000000 000019ed 2**0 CONTENTS, RELOC, READONLY
132 LXCALL01 00000003 00000000 00000000 000019ef 2**0 CONTENTS, READONLY
133 LXCJ2MRU 00000002 00000000 00000000 000019f2 2**0 CONTENTS, RELOC, READONLY
134 LXCJ4MRU 00000002 00000000 00000000 000019f4 2**0 CONTENTS, RELOC, READONLY
135 LXCJ6MRU 00000002 00000000 00000000 000019f6 2**0 CONTENTS, RELOC, READONLY
136 LXCJ7MRU 00000002 00000000 00000000 000019f8 2**0 CONTENTS, RELOC, READONLY
137 LXCJ8MRU 00000003 00000000 00000000 000019fa 2**0 CONTENTS, RELOC, READONLY
138 LXUNF034 00000005 00000000 00000000 000019fd 2**0 CONTENTS, RELOC, READONLY
139 LXMRU055 00000002 00000000 00000000 00001a02 2**0 CONTENTS, READONLY
140 MRUBYTE2 00000005 00000000 00000000 00001a04 2**0 CONTENTS, READONLY
141 MRUBITS2 00000005 00000000 00000000 00001a09 2**0 CONTENTS, READONLY
142 MRUARB20 00000005 00000000 00000000 00001a0e 2**0 CONTENTS, READONLY
143 LXMRU057 00000006 00000000 00000000 00001a13 2**0 CONTENTS, READONLY
144 LXMRU058 00000001 00000000 00000000 00001a19 2**0 CONTENTS, READONLY
145 LXUNF035 00000006 00000000 00000000 00001a1a 2**0 CONTENTS, READONLY
146 ctok32.00 00000007 00000000 00000000 00001a20 2**0 CONTENTS, RELOC, READONLY
147 ctok32.10 0000000e 00000000 00000000 00001a27 2**0 CONTENTS, RELOC, READONLY
148 ctok32.20 00000020 00000000 00000000 00001a35 2**0 CONTENTS, RELOC, READONLY
149 ctok32.30 0000000a 00000000 00000000 00001a55 2**0 CONTENTS, RELOC, READONLY
150 ctok32.40 00000005 00000000 00000000 00001a5f 2**0 CONTENTS, RELOC, READONLY
151 CALLTR00 00000010 00000000 00000000 00001a64 2**0 CONTENTS, RELOC, READONLY
152 CTCLEVE1 00000005 00000000 00000000 00001a74 2**0 CONTENTS, RELOC, READONLY
153 CALLTR01 00000005 00000000 00000000 00001a79 2**0 CONTENTS, READONLY
154 CTBSHR01 00000004 00000000 00000000 00001a7e 2**0 CONTENTS, READONLY
155 CTBROR01 00000002 00000000 00000000 00001a82 2**0 CONTENTS, READONLY
156 CTBSWA01 00000005 00000000 00000000 00001a84 2**0 CONTENTS, READONLY
157 CALLTR02 00000010 00000000 00000000 00001a89 2**0 CONTENTS, RELOC, READONLY
158 CALLTR10 00000005 00000000 00000000 00001a99 2**0 CONTENTS, RELOC, READONLY
159 CALLTRE8 00000002 00000000 00000000 00001a9e 2**0 CONTENTS, READONLY
160 CALLTRE9 00000002 00000000 00000000 00001aa0 2**0 CONTENTS, READONLY
161 CALLTR11 00000004 00000000 00000000 00001aa2 2**0 CONTENTS, RELOC, READONLY
162 CTCLEVE2 00000005 00000000 00000000 00001aa6 2**0 CONTENTS, RELOC, READONLY
163 CALLTR12 00000002 00000000 00000000 00001aab 2**0 CONTENTS, READONLY
164 CTBSHR11 00000004 00000000 00000000 00001aad 2**0 CONTENTS, READONLY
165 CTBROR11 00000002 00000000 00000000 00001ab1 2**0 CONTENTS, READONLY
166 CTBSWA11 00000005 00000000 00000000 00001ab3 2**0 CONTENTS, READONLY
167 CALLTR13 00000007 00000000 00000000 00001ab8 2**0 CONTENTS, RELOC, READONLY
168 LEXEC017 00000002 00000000 00000000 00001abf 2**0 CONTENTS, READONLY
169 LEXEC020 00000046 00000000 00000000 00001ac1 2**0 CONTENTS, READONLY
0 MACHMAINX 00000005 00000000 00000000 00000034 2**0 CONTENTS, RELOC, READONLY
1 MACH_UNC 00000000 00000000 00000000 00000039 2**0 CONTENTS, READONLY
2 NRV_HEAD 000000bc 00000000 00000000 00000039 2**0 CONTENTS, READONLY
3 NRV2E 000000d4 00000000 00000000 000000f5 2**0 CONTENTS, RELOC, READONLY
4 NRV2D 000000c7 00000000 00000000 000001c9 2**0 CONTENTS, RELOC, READONLY
5 NRV2B 000000b2 00000000 00000000 00000290 2**0 CONTENTS, RELOC, READONLY
6 LZMA_DEC00 0000002e 00000000 00000000 00000342 2**0 CONTENTS, RELOC, READONLY
7 LZMA_ELF00 00000048 00000000 00000000 00000370 2**0 CONTENTS, READONLY
8 LZMA_DEC10 00000a86 00000000 00000000 000003b8 2**0 CONTENTS, READONLY
9 LZMA_DEC20 00000a86 00000000 00000000 00000e3e 2**0 CONTENTS, READONLY
10 LZMA_DEC30 0000001a 00000000 00000000 000018c4 2**0 CONTENTS, READONLY
11 NRV_TAIL 00000000 00000000 00000000 000018de 2**0 CONTENTS, READONLY
12 MACHMAINY 00000014 00000000 00000000 000018de 2**0 CONTENTS, READONLY
13 MACHMAINZ 000000f0 00000000 00000000 000018f2 2**0 CONTENTS, READONLY
SYMBOL TABLE:
00000000 l d I386BXX1 00000000 I386BXX1
00000000 l d N2BSMA10 00000000 N2BSMA10
00000000 l d N2BFAS11 00000000 N2BFAS11
00000000 l d N2BDEC10 00000000 N2BDEC10
00000000 l d N2BDEC20 00000000 N2BDEC20
00000000 l d N2BDEC30 00000000 N2BDEC30
00000000 l d N2BDEC50 00000000 N2BDEC50
00000000 l d N2BFAS61 00000000 N2BFAS61
00000000 l d N2BDEC60 00000000 N2BDEC60
00000000 l d N2DSMA10 00000000 N2DSMA10
00000000 l d N2DFAS11 00000000 N2DFAS11
00000000 l d N2DDEC10 00000000 N2DDEC10
00000000 l d N2DDEC20 00000000 N2DDEC20
00000000 l d N2DDEC30 00000000 N2DDEC30
00000000 l d N2DDEC50 00000000 N2DDEC50
00000000 l d N2DFAS61 00000000 N2DFAS61
00000000 l d N2DDEC60 00000000 N2DDEC60
00000000 l d N2ESMA10 00000000 N2ESMA10
00000000 l d N2EFAS11 00000000 N2EFAS11
00000000 l d N2EDEC10 00000000 N2EDEC10
00000000 l d N2EDEC20 00000000 N2EDEC20
00000000 l d N2EDEC30 00000000 N2EDEC30
00000000 l d N2EDEC50 00000000 N2EDEC50
00000000 l d N2EFAS61 00000000 N2EFAS61
00000000 l d N2EDEC60 00000000 N2EDEC60
00000000 l d LXUNF010 00000000 LXUNF010
00000000 l d LXJCC010 00000000 LXJCC010
00000000 l d LXUNF037 00000000 LXUNF037
00000000 l d LXMRU070 00000000 LXMRU070
00000000 l d LXMRU100 00000000 LXMRU100
00000000 l d LXUNF040 00000000 LXUNF040
00000000 l d LXUNF042 00000000 LXUNF042
00000000 l d LXMRU030 00000000 LXMRU030
00000000 l d LXUNF030 00000000 LXUNF030
00000000 l d LXCJ8MRU 00000000 LXCJ8MRU
00000000 l d LXUNF034 00000000 LXUNF034
00000000 l d ctok32.00 00000000 ctok32.00
00000000 l d ctok32.10 00000000 ctok32.10
00000000 l d ctok32.20 00000000 ctok32.20
00000000 l d ctok32.40 00000000 ctok32.40
00000000 l d CALLTR00 00000000 CALLTR00
00000000 l d CALLTR10 00000000 CALLTR10
00000000 l d CALLTR11 00000000 CALLTR11
00000000 l d CALLTR13 00000000 CALLTR13
00000000 l d LEXEC020 00000000 LEXEC020
00000000 l d I386BXX0 00000000 I386BXX0
00000000 l d LEXEC000 00000000 LEXEC000
00000000 l d LEXEC009 00000000 LEXEC009
00000000 l d LEXEC010 00000000 LEXEC010
00000000 l d N2BFAS10 00000000 N2BFAS10
00000000 l d N2BSMA20 00000000 N2BSMA20
00000000 l d N2BFAS20 00000000 N2BFAS20
00000000 l d N2BSMA30 00000000 N2BSMA30
00000000 l d N2BFAS30 00000000 N2BFAS30
00000000 l d N2BSMA40 00000000 N2BSMA40
00000000 l d N2BFAS40 00000000 N2BFAS40
00000000 l d N2BSMA50 00000000 N2BSMA50
00000000 l d N2BFAS50 00000000 N2BFAS50
00000000 l d N2BSMA60 00000000 N2BSMA60
00000000 l d N2BFAS60 00000000 N2BFAS60
00000000 l d N2DFAS10 00000000 N2DFAS10
00000000 l d N2DSMA20 00000000 N2DSMA20
00000000 l d N2DFAS20 00000000 N2DFAS20
00000000 l d N2DSMA30 00000000 N2DSMA30
00000000 l d N2DFAS30 00000000 N2DFAS30
00000000 l d N2DSMA40 00000000 N2DSMA40
00000000 l d N2DFAS40 00000000 N2DFAS40
00000000 l d N2DSMA50 00000000 N2DSMA50
00000000 l d N2DFAS50 00000000 N2DFAS50
00000000 l d N2DSMA60 00000000 N2DSMA60
00000000 l d N2DFAS60 00000000 N2DFAS60
00000000 l d N2EFAS10 00000000 N2EFAS10
00000000 l d N2ESMA20 00000000 N2ESMA20
00000000 l d N2EFAS20 00000000 N2EFAS20
00000000 l d N2ESMA30 00000000 N2ESMA30
00000000 l d N2EFAS30 00000000 N2EFAS30
00000000 l d N2ESMA40 00000000 N2ESMA40
00000000 l d N2EFAS40 00000000 N2EFAS40
00000000 l d N2ESMA50 00000000 N2ESMA50
00000000 l d N2EFAS50 00000000 N2EFAS50
00000000 l d N2ESMA60 00000000 N2ESMA60
00000000 l d N2EFAS60 00000000 N2EFAS60
00000000 l d NRV_HEAD 00000000 NRV_HEAD
00000000 l d MACHMAINY 00000000 MACHMAINY
00000000 l d MACHMAINZ 00000000 MACHMAINZ
00000000 l d MACHMAINX 00000000 MACHMAINX
00000000 l d MACH_UNC 00000000 MACH_UNC
00000000 l d NRV2E 00000000 NRV2E
00000000 l d NRV2D 00000000 NRV2D
00000000 l d NRV2B 00000000 NRV2B
00000000 l d LZMA_DEC00 00000000 LZMA_DEC00
00000000 l d LZMA_ELF00 00000000 LZMA_ELF00
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
00000000 l d LEXEC015 00000000 LEXEC015
00000000 l d LXUNF000 00000000 LXUNF000
00000000 l d LXUNF002 00000000 LXUNF002
00000000 l d MRUBYTE0 00000000 MRUBYTE0
00000000 l d LXMRU005 00000000 LXMRU005
00000000 l d LXMRU006 00000000 LXMRU006
00000000 l d LXMRU007 00000000 LXMRU007
00000000 l d LXUNF008 00000000 LXUNF008
00000000 l d LXMRU045 00000000 LXMRU045
00000000 l d LXMRU046 00000000 LXMRU046
00000000 l d LXJCC020 00000000 LXJCC020
00000000 l d LXJCC021 00000000 LXJCC021
00000000 l d LXJCC023 00000000 LXJCC023
00000000 l d LXUNF386 00000000 LXUNF386
00000000 l d LXUNF387 00000000 LXUNF387
00000000 l d LXUNF388 00000000 LXUNF388
00000000 l d LXUNF486 00000000 LXUNF486
00000000 l d LXUNF487 00000000 LXUNF487
00000000 l d LXMRU065 00000000 LXMRU065
00000000 l d MRUBYTE3 00000000 MRUBYTE3
00000000 l d MRUARB30 00000000 MRUARB30
00000000 l d MRUBITS3 00000000 MRUBITS3
00000000 l d MRUARB40 00000000 MRUARB40
00000000 l d MRUBYTE4 00000000 MRUBYTE4
00000000 l d MRUBITS4 00000000 MRUBITS4
00000000 l d MRUARB50 00000000 MRUARB50
00000000 l d LXMRU080 00000000 LXMRU080
00000000 l d MRUBYTE5 00000000 MRUBYTE5
00000000 l d MRUARB60 00000000 MRUARB60
00000000 l d MRUBITS5 00000000 MRUBITS5
00000000 l d MRUARB70 00000000 MRUARB70
00000000 l d LXMRU090 00000000 LXMRU090
00000000 l d MRUBYTE6 00000000 MRUBYTE6
00000000 l d MRUARB80 00000000 MRUARB80
00000000 l d MRUBITS6 00000000 MRUBITS6
00000000 l d MRUARB90 00000000 MRUARB90
00000000 l d LXMRU110 00000000 LXMRU110
00000000 l d LXMRU111 00000000 LXMRU111
00000000 l d LXUNF041 00000000 LXUNF041
00000000 l d LEXEC016 00000000 LEXEC016
00000000 l d LXMRU010 00000000 LXMRU010
00000000 l d LXJMPA00 00000000 LXJMPA00
00000000 l d LXCALLB0 00000000 LXCALLB0
00000000 l d LXUNF021 00000000 LXUNF021
00000000 l d LXMRU022 00000000 LXMRU022
00000000 l d LXJMPA01 00000000 LXJMPA01
00000000 l d LXCALLB1 00000000 LXCALLB1
00000000 l d MRUBITS1 00000000 MRUBITS1
00000000 l d MRUBYTE1 00000000 MRUBYTE1
00000000 l d MRUARB10 00000000 MRUARB10
00000000 l d LXMRU040 00000000 LXMRU040
00000000 l d LXJCC000 00000000 LXJCC000
00000000 l d LXCJ0MRU 00000000 LXCJ0MRU
00000000 l d LXCJ1MRU 00000000 LXCJ1MRU
00000000 l d LXCALJMP 00000000 LXCALJMP
00000000 l d LXCALL00 00000000 LXCALL00
00000000 l d LXCALL01 00000000 LXCALL01
00000000 l d LXCJ2MRU 00000000 LXCJ2MRU
00000000 l d LXCJ4MRU 00000000 LXCJ4MRU
00000000 l d LXCJ6MRU 00000000 LXCJ6MRU
00000000 l d LXCJ7MRU 00000000 LXCJ7MRU
00000000 l d LXMRU055 00000000 LXMRU055
00000000 l d MRUBYTE2 00000000 MRUBYTE2
00000000 l d MRUBITS2 00000000 MRUBITS2
00000000 l d MRUARB20 00000000 MRUARB20
00000000 l d LXMRU057 00000000 LXMRU057
00000000 l d LXMRU058 00000000 LXMRU058
00000000 l d LXUNF035 00000000 LXUNF035
00000000 l d ctok32.30 00000000 ctok32.30
00000000 l d CTCLEVE1 00000000 CTCLEVE1
00000000 l d CALLTR01 00000000 CALLTR01
00000000 l d CTBSHR01 00000000 CTBSHR01
00000000 l d CTBROR01 00000000 CTBROR01
00000000 l d CTBSWA01 00000000 CTBSWA01
00000000 l d CALLTR02 00000000 CALLTR02
00000000 l d CALLTRE8 00000000 CALLTRE8
00000000 l d CALLTRE9 00000000 CALLTRE9
00000000 l d CTCLEVE2 00000000 CTCLEVE2
00000000 l d CALLTR12 00000000 CALLTR12
00000000 l d CTBSHR11 00000000 CTBSHR11
00000000 l d CTBROR11 00000000 CTBROR11
00000000 l d CTBSWA11 00000000 CTBSWA11
00000000 l d LEXEC017 00000000 LEXEC017
00000000 g LEXEC000 00000000 _start
00000000 l d NRV_TAIL 00000000 NRV_TAIL
00000000 g MACHMAINX 00000000 _start
00000000 *UND* 00000000 lzma_stack_adjust
00000000 *UND* 00000000 lzma_u_len
00000000 *UND* 00000000 lzma_c_len
00000000 *UND* 00000000 lzma_properties
00000000 *UND* 00000000 NMRU
00000000 *UND* 00000000 filter_length
00000000 *UND* 00000000 filter_cto
00000014 g MACHMAINY 00000000 end_decompress
RELOCATION RECORDS FOR [I386BXX0]:
RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE
00000000 R_386_16 I386BXX1
00000001 R_386_PC32 MACHMAINZ
RELOCATION RECORDS FOR [LEXEC000]:
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
00000001 R_386_PC32 LEXEC020
000000c9 R_386_PC32 NRV_HEAD
00000068 R_386_PC32 MACHMAINY
RELOCATION RECORDS FOR [N2BSMA10]:
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2BDEC10
000000bc R_386_PC32 NRV_HEAD
00000068 R_386_PC32 MACHMAINY
RELOCATION RECORDS FOR [N2BFAS10]:
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2BDEC10
RELOCATION RECORDS FOR [N2BSMA20]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2BSMA10
RELOCATION RECORDS FOR [N2BFAS20]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2BFAS11
RELOCATION RECORDS FOR [N2BSMA30]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2BDEC20
RELOCATION RECORDS FOR [N2BFAS30]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2BDEC20
0000000e R_386_PC8 N2BDEC20
RELOCATION RECORDS FOR [N2BDEC30]:
OFFSET TYPE VALUE
00000011 R_386_PC8 N2BDEC60
0000002f R_386_PC8 N2BDEC50
RELOCATION RECORDS FOR [N2BSMA40]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2BDEC30
RELOCATION RECORDS FOR [N2BFAS40]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2BDEC30
0000000e R_386_PC8 N2BDEC30
RELOCATION RECORDS FOR [N2BSMA60]:
OFFSET TYPE VALUE
00000008 R_386_PC32 N2BDEC10
RELOCATION RECORDS FOR [N2BFAS60]:
OFFSET TYPE VALUE
0000000a R_386_PC8 N2BFAS61
00000015 R_386_PC32 N2BDEC10
RELOCATION RECORDS FOR [N2BFAS61]:
OFFSET TYPE VALUE
00000012 R_386_PC32 N2BDEC10
RELOCATION RECORDS FOR [N2DSMA10]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2DDEC10
RELOCATION RECORDS FOR [N2DFAS10]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2DDEC10
RELOCATION RECORDS FOR [N2DSMA20]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2DSMA10
RELOCATION RECORDS FOR [N2DFAS20]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2DFAS11
RELOCATION RECORDS FOR [N2DSMA30]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2DDEC30
RELOCATION RECORDS FOR [N2DFAS30]:
OFFSET TYPE VALUE
00000005 R_386_PC8 N2DDEC30
0000000e R_386_PC8 N2DDEC30
RELOCATION RECORDS FOR [N2DDEC30]:
OFFSET TYPE VALUE
0000000f R_386_PC8 N2DDEC20
00000021 R_386_PC8 N2DDEC60
00000043 R_386_PC8 N2DDEC50
RELOCATION RECORDS FOR [N2DSMA40]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2DDEC30
RELOCATION RECORDS FOR [N2DFAS40]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2DDEC30
0000000e R_386_PC8 N2DDEC30
RELOCATION RECORDS FOR [N2DSMA60]:
OFFSET TYPE VALUE
00000008 R_386_PC32 N2DDEC10
RELOCATION RECORDS FOR [N2DFAS60]:
OFFSET TYPE VALUE
0000000a R_386_PC8 N2DFAS61
00000015 R_386_PC32 N2DDEC10
RELOCATION RECORDS FOR [N2DFAS61]:
OFFSET TYPE VALUE
00000012 R_386_PC32 N2DDEC10
RELOCATION RECORDS FOR [N2ESMA10]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2EDEC10
RELOCATION RECORDS FOR [N2EFAS10]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2EDEC10
RELOCATION RECORDS FOR [N2ESMA20]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2ESMA10
RELOCATION RECORDS FOR [N2EFAS20]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2EFAS11
RELOCATION RECORDS FOR [N2ESMA30]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2EDEC30
RELOCATION RECORDS FOR [N2EFAS30]:
OFFSET TYPE VALUE
00000005 R_386_PC8 N2EDEC30
0000000e R_386_PC8 N2EDEC30
RELOCATION RECORDS FOR [N2EDEC30]:
OFFSET TYPE VALUE
0000000f R_386_PC8 N2EDEC20
0000001e R_386_PC8 N2EDEC50
00000030 R_386_PC8 N2EDEC60
RELOCATION RECORDS FOR [N2ESMA40]:
OFFSET TYPE VALUE
0000000c R_386_PC8 N2EDEC30
RELOCATION RECORDS FOR [N2EFAS40]:
OFFSET TYPE VALUE
00000003 R_386_PC8 N2EDEC30
0000000e R_386_PC8 N2EDEC30
RELOCATION RECORDS FOR [N2ESMA60]:
OFFSET TYPE VALUE
00000008 R_386_PC32 N2EDEC10
RELOCATION RECORDS FOR [N2EFAS60]:
OFFSET TYPE VALUE
0000000a R_386_PC8 N2EFAS61
00000015 R_386_PC32 N2EDEC10
RELOCATION RECORDS FOR [N2EFAS61]:
OFFSET TYPE VALUE
00000012 R_386_PC32 N2EDEC10
000000a9 R_386_PC32 NRV_HEAD
00000056 R_386_PC32 MACHMAINY
RELOCATION RECORDS FOR [LZMA_DEC00]:
OFFSET TYPE VALUE
@ -524,140 +63,3 @@ OFFSET TYPE VALUE
00000014 R_386_32 lzma_u_len
0000001e R_386_32 lzma_c_len
0000002a R_386_32 lzma_properties
RELOCATION RECORDS FOR [LXUNF000]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF010
RELOCATION RECORDS FOR [LXMRU005]:
OFFSET TYPE VALUE
00000001 R_386_32 NMRU
RELOCATION RECORDS FOR [LXUNF010]:
OFFSET TYPE VALUE
00000001 R_386_PC32 LXUNF042
RELOCATION RECORDS FOR [LXJCC020]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF034
RELOCATION RECORDS FOR [LXJCC021]:
OFFSET TYPE VALUE
00000004 R_386_PC8 LXUNF034
RELOCATION RECORDS FOR [LXUNF388]:
OFFSET TYPE VALUE
00000002 R_386_PC8 LXUNF040
RELOCATION RECORDS FOR [LXUNF487]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF040
RELOCATION RECORDS FOR [LXMRU065]:
OFFSET TYPE VALUE
00000004 R_386_PC8 LXMRU070
RELOCATION RECORDS FOR [LXMRU070]:
OFFSET TYPE VALUE
00000004 R_386_PC8 LXUNF040
RELOCATION RECORDS FOR [LXMRU090]:
OFFSET TYPE VALUE
00000006 R_386_PC8 LXMRU100
RELOCATION RECORDS FOR [LXUNF041]:
OFFSET TYPE VALUE
00000006 R_386_PC8 LXUNF034
RELOCATION RECORDS FOR [LEXEC016]:
OFFSET TYPE VALUE
00000001 R_386_PC32 LXUNF042
RELOCATION RECORDS FOR [LXMRU040]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXMRU030
RELOCATION RECORDS FOR [LXJCC000]:
OFFSET TYPE VALUE
00000007 R_386_PC8 LXJCC010
RELOCATION RECORDS FOR [LXCALL00]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF037
RELOCATION RECORDS FOR [LXCJ2MRU]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF037
RELOCATION RECORDS FOR [LXCJ4MRU]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXUNF034
RELOCATION RECORDS FOR [LXCJ6MRU]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXCJ8MRU
RELOCATION RECORDS FOR [LXCJ7MRU]:
OFFSET TYPE VALUE
00000001 R_386_PC8 LXCJ8MRU
RELOCATION RECORDS FOR [LXCJ8MRU]:
OFFSET TYPE VALUE
00000002 R_386_PC8 LXUNF037
RELOCATION RECORDS FOR [LXUNF034]:
OFFSET TYPE VALUE
00000004 R_386_PC8 LXUNF030
RELOCATION RECORDS FOR [ctok32.00]:
OFFSET TYPE VALUE
00000003 R_386_PC8 ctok32.20
RELOCATION RECORDS FOR [ctok32.10]:
OFFSET TYPE VALUE
0000000d R_386_PC8 ctok32.20
RELOCATION RECORDS FOR [ctok32.20]:
OFFSET TYPE VALUE
00000005 R_386_PC8 ctok32.40
0000000a R_386_PC8 ctok32.40
00000010 R_386_PC8 ctok32.40
RELOCATION RECORDS FOR [ctok32.30]:
OFFSET TYPE VALUE
00000004 R_386_PC8 ctok32.40
00000009 R_386_PC8 ctok32.10
RELOCATION RECORDS FOR [ctok32.40]:
OFFSET TYPE VALUE
00000004 R_386_PC8 ctok32.00
RELOCATION RECORDS FOR [CALLTR00]:
OFFSET TYPE VALUE
00000001 R_386_32 filter_length
RELOCATION RECORDS FOR [CTCLEVE1]:
OFFSET TYPE VALUE
00000002 R_386_8 filter_cto
00000004 R_386_PC8 CALLTR00
RELOCATION RECORDS FOR [CALLTR02]:
OFFSET TYPE VALUE
0000000f R_386_PC8 CALLTR00
RELOCATION RECORDS FOR [CALLTR10]:
OFFSET TYPE VALUE
00000001 R_386_32 filter_length
RELOCATION RECORDS FOR [CALLTR11]:
OFFSET TYPE VALUE
00000003 R_386_PC8 CALLTR13
RELOCATION RECORDS FOR [CTCLEVE2]:
OFFSET TYPE VALUE
00000002 R_386_8 filter_cto
00000004 R_386_PC8 CALLTR11
RELOCATION RECORDS FOR [CALLTR13]:
OFFSET TYPE VALUE
00000006 R_386_PC8 CALLTR10

View File

@ -72,31 +72,32 @@ LOAD tmp/i386-darwin.macho-main.o
.plt
*(.plt)
.text 0x0000000008048000 0x46f
.text 0x0000000008048000 0x5b1
*(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x0000000008048000 0x7a tmp/i386-darwin.macho-fold.o
0x0000000008048054 munmap
0x000000000804802e bswap
0x0000000008048064 mmap
0x0000000008048048 write
.text 0x0000000008048000 0x90 tmp/i386-darwin.macho-fold.o
0x0000000008048069 munmap
0x000000000804803b bswap
0x0000000008048079 mmap
0x000000000804805d write
0x0000000008048000 _start
0x0000000008048068 read
0x0000000008048058 pread
0x000000000804804c exit
0x0000000008048060 open
0x0000000008048050 mprotect
0x000000000804805c close
*fill* 0x000000000804807a 0x2 90909090
.text 0x000000000804807c 0x3f3 tmp/i386-darwin.macho-main.o
0x0000000008048341 upx_main
0x000000000804807d read
0x0000000008048052 spin
0x000000000804806d pread
0x0000000008048061 exit
0x0000000008048075 open
0x0000000008048065 mprotect
0x0000000008048071 close
.text 0x0000000008048090 0x521 tmp/i386-darwin.macho-main.o
0x0000000008048197 do_xmap
0x0000000008048485 upx_main
*(.text.*personality*)
*(.gnu.warning)
.fini
*(.fini)
0x000000000804846f PROVIDE (__etext, .)
0x000000000804846f PROVIDE (_etext, .)
0x000000000804846f PROVIDE (etext, .)
0x00000000080485b1 PROVIDE (__etext, .)
0x00000000080485b1 PROVIDE (_etext, .)
0x00000000080485b1 PROVIDE (etext, .)
.rodata
*(.rodata .rodata.* .gnu.linkonce.r.*)
@ -112,8 +113,8 @@ LOAD tmp/i386-darwin.macho-main.o
.gcc_except_table
*(.gcc_except_table .gcc_except_table.*)
0x000000000804846f . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff))
0x000000000804946f . = (0x1000 DATA_SEGMENT_ALIGN 0x1000)
0x00000000080485b1 . = (ALIGN (0x1000) - ((0x1000 - .) & 0xfff))
0x00000000080495b1 . = (0x1000 DATA_SEGMENT_ALIGN 0x1000)
.eh_frame
*(.eh_frame)
@ -128,22 +129,22 @@ LOAD tmp/i386-darwin.macho-main.o
*(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon)
.preinit_array 0x000000000804946f 0x0
0x000000000804946f PROVIDE (__preinit_array_start, .)
.preinit_array 0x00000000080495b1 0x0
0x00000000080495b1 PROVIDE (__preinit_array_start, .)
*(.preinit_array)
0x000000000804946f PROVIDE (__preinit_array_end, .)
0x00000000080495b1 PROVIDE (__preinit_array_end, .)
.init_array 0x000000000804946f 0x0
0x000000000804946f PROVIDE (__init_array_start, .)
.init_array 0x00000000080495b1 0x0
0x00000000080495b1 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*))
*(.init_array)
0x000000000804946f PROVIDE (__init_array_end, .)
0x00000000080495b1 PROVIDE (__init_array_end, .)
.fini_array 0x000000000804946f 0x0
0x000000000804946f PROVIDE (__fini_array_start, .)
.fini_array 0x00000000080495b1 0x0
0x00000000080495b1 PROVIDE (__fini_array_start, .)
*(.fini_array)
*(SORT(.fini_array.*))
0x000000000804946f PROVIDE (__fini_array_end, .)
0x00000000080495b1 PROVIDE (__fini_array_end, .)
.ctors
*crtbegin*.o(.ctors)
@ -169,35 +170,35 @@ LOAD tmp/i386-darwin.macho-main.o
.got
*(.got)
0x000000000804946f . = (. DATA_SEGMENT_RELRO_END 0xc)
0x00000000080495b1 . = (. DATA_SEGMENT_RELRO_END 0xc)
.got.plt
*(.got.plt)
.data 0x0000000008049470 0x0
.data 0x00000000080495b4 0x0
*(.data .data.* .gnu.linkonce.d.*)
.data 0x0000000008049470 0x0 tmp/i386-darwin.macho-fold.o
.data 0x0000000008049470 0x0 tmp/i386-darwin.macho-main.o
.data 0x00000000080495b4 0x0 tmp/i386-darwin.macho-fold.o
.data 0x00000000080495b4 0x0 tmp/i386-darwin.macho-main.o
*(.gnu.linkonce.d.*personality*)
.data1
*(.data1)
0x0000000008049470 _edata = .
0x0000000008049470 PROVIDE (edata, .)
0x0000000008049470 __bss_start = .
0x00000000080495b4 _edata = .
0x00000000080495b4 PROVIDE (edata, .)
0x00000000080495b4 __bss_start = .
.bss 0x0000000008049470 0x0
.bss 0x00000000080495b4 0x0
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x0000000008049470 0x0 tmp/i386-darwin.macho-fold.o
.bss 0x0000000008049470 0x0 tmp/i386-darwin.macho-main.o
.bss 0x00000000080495b4 0x0 tmp/i386-darwin.macho-fold.o
.bss 0x00000000080495b4 0x0 tmp/i386-darwin.macho-main.o
*(COMMON)
0x0000000008049470 . = ALIGN ((. != 0x0)?0x4:0x1)
0x0000000008049470 . = ALIGN (0x4)
0x0000000008049470 . = ALIGN (0x4)
0x0000000008049470 _end = .
0x0000000008049470 PROVIDE (end, .)
0x0000000008049470 . = DATA_SEGMENT_END (.)
0x00000000080495b4 . = ALIGN ((. != 0x0)?0x4:0x1)
0x00000000080495b4 . = ALIGN (0x4)
0x00000000080495b4 . = ALIGN (0x4)
0x00000000080495b4 _end = .
0x00000000080495b4 PROVIDE (end, .)
0x00000000080495b4 . = DATA_SEGMENT_END (.)
.stab
*(.stab)