1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

UPX_F_MACH_i386 and skeleton stub. (Much of PackMachI386 is incomplete.)

This commit is contained in:
John Reiser 2007-02-02 13:51:51 -08:00
parent 8b1cc28783
commit 2132a28a17
11 changed files with 3995 additions and 9 deletions

View File

@ -455,6 +455,7 @@ private:
#define UPX_F_VMLINUX_AMD64 27
#define UPX_F_VMLINUX_ARM 28
#define UPX_F_MACH_i386 29
#define UPX_F_PLAIN_TEXT 127

View File

@ -254,6 +254,18 @@ unsigned PackMachBase<T>::find_SEGMENT_gap(
return lo - hi;
}
template <class T>
void PackMachBase<T>::pack4(OutputFile *, Filter &)
{
// empty
}
template <class T>
void PackMachBase<T>::pack3(OutputFile *, Filter &)
{
// empty
}
template <class T>
void PackMachBase<T>::pack2(OutputFile *fo, Filter &ft) // append compressed body
{

View File

@ -48,6 +48,7 @@ struct Mach_fat_arch {
/*************************************************************************
// Mach Mach Object executable; all structures are target-endian
// 'otool' is the Mach analog of 'readelf' (convert executable file to ASCII).
**************************************************************************/
namespace N_Mach {
@ -165,10 +166,6 @@ struct Mach_ppc_thread_state
}
__attribute_packed;
} // namespace N_Mach
namespace N_Mach32 {
template <class TMachITypes>
struct Mach_i386_thread_state
{
@ -183,6 +180,23 @@ struct Mach_i386_thread_state
}
__attribute_packed;
template <class TMachITypes>
struct Mach_i386_new_thread_state
{
typedef typename TMachITypes::Word Word;
Word gs, fs, es, ds;
Word edi, esi, ebp, esp;
Word ebx, edx, ecx, eax;
Word eip, cs, efl;
Word uesp, ss;
}
__attribute_packed;
} // namespace N_Mach
namespace N_Mach32 {
} // namespace N_Mach32
namespace N_Mach64 {
@ -230,6 +244,7 @@ struct MachClass_32
typedef N_Mach::Mach_segment_command<MachITypes> Mach_segment_command;
typedef N_Mach::Mach_section_command<MachITypes> Mach_section_command;
typedef N_Mach::Mach_ppc_thread_state<MachITypes> Mach_ppc_thread_state;
typedef N_Mach::Mach_i386_thread_state<MachITypes> Mach_i386_thread_state;
};
template <class TP>
@ -262,6 +277,7 @@ typedef N_Mach::MachClass_64<N_BELE_CTP::LEPolicy> MachClass_LE64;
typedef MachClass_Host32::Mach_segment_command Mach32_segment_command;
typedef MachClass_Host32::Mach_section_command Mach32_section_command;
typedef MachClass_Host32::Mach_ppc_thread_state Mach_ppc_thread_state;
typedef MachClass_Host32::Mach_i386_thread_state Mach_i386_thread_state;
typedef MachClass_Host64::Mach_segment_command Mach64_segment_command;
typedef MachClass_Host64::Mach_section_command Mach64_section_command;
@ -300,7 +316,7 @@ protected:
typedef typename MachClass::Mach_section_command Mach_section_command;
public:
PackMachBase(InputFile *f, unsigned, unsigned, unsigned);
PackMachBase(InputFile *, unsigned t_flavor, unsigned ts_word_cnt, unsigned tc_size);
virtual ~PackMachBase();
virtual int getVersion() const { return 13; }
@ -317,7 +333,6 @@ public:
virtual unsigned find_SEGMENT_gap(unsigned const k);
protected:
virtual Linker* newLinker() const;
virtual void patchLoader();
virtual void patchLoaderChecksum();
virtual void updateLoader(OutputFile *);
@ -354,12 +369,21 @@ class PackMachPPC32 : public PackMachBase<MachClass_BE32>
typedef PackMachBase<MachClass_BE32> super;
public:
PackMachPPC32(InputFile *f) : super(f, Mach_thread_command::PPC_THREAD_STATE,
PackMachPPC32::PackMachPPC32(InputFile *f) : super(f,
Mach_thread_command::PPC_THREAD_STATE,
sizeof(Mach_ppc_thread_state)>>2, sizeof(threado)) { }
virtual ~PackMachPPC32();
virtual int getFormat() const { return UPX_F_MACH_PPC32; }
virtual const char *getName() const { return "Mach/ppc32"; }
virtual const char *getFullName(const options_t *) const { return "powerpc-darwin.macho"; }
virtual acc_uint64l_t get_native64(const void *b) const { return get_be64(b); }
virtual unsigned get_native32(const void *b) const { return get_be32(b); }
virtual unsigned get_native16(const void *b) const { return get_be16(b); }
virtual void set_native64(void *b, acc_uint64l_t v) const { set_be64(b, v); }
virtual void set_native32(void *b, unsigned v) const { set_be32(b, v); }
virtual void set_native16(void *b, unsigned v) const { set_be16(b, v); }
protected:
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
@ -383,6 +407,41 @@ protected:
__attribute_packed;
};
class PackMachI386 : public PackMachBase<MachClass_LE32>
{
typedef PackMachBase<MachClass_LE32> super;
public:
PackMachI386(InputFile *f) : super(f,
(unsigned)Mach_thread_command::i386_THREAD_STATE,
sizeof(Mach_i386_thread_state)>>2, sizeof(threado)) { }
virtual int getFormat() const { return UPX_F_MACH_i386; }
virtual const char *getName() const { return "Mach/i386"; }
virtual const char *getFullName(const options_t *) const { return "i386-darwin.macho"; }
protected:
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
virtual void pack1_setup_threado(OutputFile *const fo);
virtual void pack3(OutputFile *, Filter &); // append loader
virtual void pack4(OutputFile *, Filter &); // append PackHeader
virtual Linker* newLinker() const;
virtual void buildLoader(const Filter *ft);
struct Mach_thread_command
{
LE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
LE32 cmdsize; /* total size of this command */
LE32 flavor;
LE32 count; /* sizeof(following_thread_state)/4 */
Mach_i386_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
} threado
__attribute_packed;
};
#endif /* already included */

View File

@ -96,7 +96,9 @@
#ifdef WANT_MACH_THREAD_ENUM /*{*/
#undef WANT_MACH_THREAD_ENUM
enum { // thread flavor
PPC_THREAD_STATE = 1
PPC_THREAD_STATE = 1,
i386_THREAD_STATE = -1,
i386_NEW_THREAD_STATE = 1,
};
#endif /*}*/

View File

@ -65,6 +65,8 @@ STUBS += i386-bsd.elf-entry.h
STUBS += i386-bsd.elf-fold.h
STUBS += i386-bsd.elf.execve-entry.h
STUBS += i386-bsd.elf.execve-fold.h
STUBS += i386-darwin.macho-entry.h
STUBS += i386-darwin.macho-fold.h
STUBS += i386-openbsd.elf-fold.h
STUBS += i386-dos32.djgpp2.h
STUBS += i386-dos32.djgpp2-stubify.h
@ -508,6 +510,34 @@ tmp/i386-bsd.elf.execve-upx_itoa.o : $(srcdir)/src/$$T.S
$(call tc,f-objstrip,$@)
# /***********************************************************************
# // i386-darwin.macho
# ************************************************************************/
# info: we use the tc settings from i386-linux.elf
i386-darwin.macho%.h : tc_list = i386-linux.elf default
i386-darwin.macho%.h : tc_bfdname = elf32-i386
i386-darwin.macho-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
i386-darwin.macho-fold.h : tmp/$$T.o tmp/i386-darwin.macho-main.o
$(call tc,ld) --no-warn-mismatch --strip-all --oformat binary -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
chmod a-x tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/i386-darwin.macho-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/i386-darwin.macho-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
$(call tc,objdump) -dr $(tc_objdump_disasm_options) $@ | $(RTRIM) > $@.disasm
# /***********************************************************************
# // i386-dos32.djgpp2
# ************************************************************************/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,95 @@
/* i386-darwin.macho-fold.h
created from i386-darwin.macho-fold.bin, 935 (0x3a7) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 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
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*/
#define STUB_I386_DARWIN_MACHO_FOLD_SIZE 935
#define STUB_I386_DARWIN_MACHO_FOLD_ADLER32 0x6747c2dc
#define STUB_I386_DARWIN_MACHO_FOLD_CRC32 0x3a5ab15f
unsigned char stub_i386_darwin_macho_fold[935] = {
204,232,148, 2, 0, 0,255, 96, 40,204,106,153,204,106,197,204, /* 0x 0 */
106, 1,204,106, 3,204,106, 5,106, 6,106, 74, 85,137,229, 87, /* 0x 10 */
86,139,125, 8, 83,137,195, 57, 56,139,112, 4,115, 7,106,127, /* 0x 20 */
232,218,255,255,255,133,255,116, 10,137,249,138, 6, 70,136, 2, /* 0x 30 */
66,226,248, 1,123, 4, 41, 59,141,101,244, 91, 94, 95,201,195, /* 0x 40 */
85,137,229, 87, 86,137,198, 83,137,211,131,236, 24,139, 69, 8, /* 0x 50 */
139,125, 12,137, 69,220,131, 58, 0, 15,132,172, 0, 0, 0,141, /* 0x 60 */
85,228,137,240,106, 12,232,161,255,255,255,139, 69,228, 90,133, /* 0x 70 */
192,139, 77,232,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, /* 0x 80 */
0, 15,132,132, 0, 0, 0,235, 4,133,201,117, 7,106,127,232, /* 0x 90 */
107,255,255,255, 57,193,119,245, 59, 3,119,241, 57,193,115, 76, /* 0x a0 */
137, 69,224, 15,182, 69,236, 80,141, 69,224, 80,255,115, 4, 81, /* 0x b0 */
255,118, 4,255, 85,220,131,196, 20,133,192,117,208,139, 85,224, /* 0x c0 */
59, 85,228,117,200,138, 69,237,132,192,116, 22,133,255,116, 18, /* 0x d0 */
15,182,192, 80, 15,182, 69,238, 80, 82,255,115, 4,255,215,131, /* 0x e0 */
196, 16,139, 69,232, 1, 70, 4, 41, 6,235, 12,139, 83, 4, 81, /* 0x f0 */
137,240,232, 21,255,255,255, 88,139, 85,228,139, 3, 1, 83, 4, /* 0x 100 */
41,208,133,192,137, 3,233, 78,255,255,255,141,101,244, 91, 94, /* 0x 110 */
95,201,195, 85,137,229, 87, 86, 83,131,236, 48,137, 69,232,139, /* 0x 120 */
69, 8,137, 85,228,139, 85, 12,199, 69,208, 0, 0, 0, 0,137, /* 0x 130 */
69,224,139, 69, 20,137, 85,220,139, 85, 24,137, 69,216,139,117, /* 0x 140 */
232,139, 69,232,137, 85,212, 49,210,131,198, 28,199, 69,204, 0, /* 0x 150 */
0, 0, 0, 59, 80, 16, 15,131, 35, 1, 0, 0,139, 6,131,248, /* 0x 160 */
1, 15,133,234, 0, 0, 0,139, 86, 24,139, 70, 28,139, 78, 36, /* 0x 170 */
137,215, 1,208,137, 85,240,137, 69,200,137,208, 37,255, 15, 0, /* 0x 180 */
0,137,203, 41,199, 1,195,137, 77,236,116, 55,139, 69,228, 3, /* 0x 190 */
70, 32,133,201, 80,139, 69,220,117, 3,131,200,255,131,125,224, /* 0x 1a0 */
0, 80,117, 9,133,201,184, 18, 0, 0, 0,117, 5,184, 18, 16, /* 0x 1b0 */
0, 0, 80,106, 3, 83, 87,232, 64,254,255,255,131,196, 24, 57, /* 0x 1c0 */
199,117, 88,131,125,224, 0,116, 36,131,126, 36, 0,116, 30,131, /* 0x 1d0 */
126, 32, 0,117, 5,139, 85, 16,137, 58,255,117,212,255,117,216, /* 0x 1e0 */
139, 69,224,141, 85,236,232, 85,254,255,255, 89, 88,137,216,141, /* 0x 1f0 */
20, 31,247,216, 37,255, 15, 0, 0,137, 69,196,116, 8,137,193, /* 0x 200 */
198, 2, 0, 66,226,250,133,219,116, 24,255,118, 44, 83, 87,232, /* 0x 210 */
246,253,255,255,131,196, 12,133,192,116, 7,106,127,232,221,253, /* 0x 220 */
255,255,139, 85,196,141, 4, 19,141, 28, 7, 59, 93,200,115, 59, /* 0x 230 */
106, 0,106,255,104, 18, 16, 0, 0,255,118, 44, 41, 93,200,255, /* 0x 240 */
117,200, 83,232,180,253,255,255,131,196, 24, 57,195,116, 28,235, /* 0x 250 */
202,131,232, 4,131,248, 1,119, 18,131,126, 8,255,117, 12,131, /* 0x 260 */
126, 12, 16,117, 6,141, 70, 16,137, 69,208,255, 69,204,139, 85, /* 0x 270 */
232,139, 69,204, 3,118, 4, 59, 66, 16,233,215,254,255,255,139, /* 0x 280 */
69,208,141,101,244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83, /* 0x 290 */
131,236, 32,199, 69,212, 0, 0, 0, 0,139, 85, 8,139, 69, 20, /* 0x 2a0 */
139, 93, 24,137, 69,216,139,117, 16,141, 66, 24,137,117,232,137, /* 0x 2b0 */
69,240,139, 69, 12,131,232, 24,137, 69,236,139, 66, 24,139, 85, /* 0x 2c0 */
240,106, 0,137, 69,228,139, 69,236,137, 85,224,137, 69,220,141, /* 0x 2d0 */
85,228,141, 69,236, 83,232,101,253,255,255,255,117, 28, 83, 49, /* 0x 2e0 */
210,255,117, 32,141, 69,220,106,255, 80,137,240,232, 34,254,255, /* 0x 2f0 */
255, 49,210,137,199,141, 70, 28,131,196, 28,139, 78, 16, 57,202, /* 0x 300 */
15,131,135, 0, 0, 0,131, 56, 14,117,121, 3, 64, 8,106, 0, /* 0x 310 */
106, 0, 80,232,237,252,255,255,131,196, 12,133,192,137,195,120, /* 0x 320 */
21,255,117,212,255,117,216, 86, 83,232,203,252,255,255,131,196, /* 0x 330 */
16, 57, 69,216,116, 15,106,127,232,194,252,255,255,139, 64, 8, /* 0x 340 */
137, 69,212,235,220,129, 62,190,186,254,202,117, 23,141, 70, 8, /* 0x 350 */
49,210,139, 78, 4, 57,202,115, 11,131, 56, 7,116,223, 66,131, /* 0x 360 */
192, 20,235,241,106, 0,139, 85,212,106, 0,137,240,106, 0, 83, /* 0x 370 */
106, 0,232,156,253,255,255, 83,137,199,232,137,252,255,255,131, /* 0x 380 */
196, 24,235, 9, 3, 64, 4, 66,233,113,255,255,255,141,101,244, /* 0x 390 */
137,248, 91, 94, 95,201,195 /* 0x 3a0 */
};

View File

@ -0,0 +1,200 @@
/*
; i386-darwin.macho-entry.S -- program entry point & decompressor (i386 Mach-o)
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
; Copyright (C) 1996-2007 Laszlo Molnar
; Copyright (C) 2000-2007 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
; <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
;
; John F. Reiser
; <jreiser@users.sourceforge.net>
;
*/
#include "arch/i386/macros.S"
/*************************************************************************
// program entry point
// see glibc/sysdeps/i386/elf/start.S
**************************************************************************/
section LEXEC000
_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:
// /*************************************************************************
// // C callable decompressor
// **************************************************************************/
// /* Offsets to parameters, allowing for {push + pusha + call} */
#define O_INP (4+ 8*4 +1*4)
#define O_INS (4+ 8*4 +2*4)
#define O_OUTP (4+ 8*4 +3*4)
#define O_OUTS (4+ 8*4 +4*4)
#define O_PARAM (4+ 8*4 +5*4)
#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]
section LEXEC009
// empty section for commonality with l_lx_exec86.asm
section LEXEC010
pusha
// cld
mov esi, INP
mov edi, OUTP
or ebp, -1
// align 8
#include "arch/i386/nrv2b_d32.S"
#include "arch/i386/nrv2d_d32.S"
#include "arch/i386/nrv2e_d32.S"
#include "arch/i386/lzma_d.S"
section LEXEC015
// eax is 0 from decompressor code
//xor eax, eax ; return code
// check compressed size
mov edx, INP
add edx, INS
cmp esi, edx
jz .ok
dec eax
.ok:
// write back the uncompressed size
sub edi, OUTP
mov edx, OUTS
mov [edx], edi
mov [7*4 + esp], eax
popa
ret
ctojr32
ctok32 edi, dl
cit32 edi
section LEXEC017
popa
ret
section LEXEC020
#define PAGE_SIZE ( 1<<12)
#define MAP_FIXED 0x10
#define MAP_PRIVATE 0x02
#define MAP_ANONYMOUS 0x1000
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
#define __NR_mmap 197
#define __NR_syscall 198
#define szElf32_Ehdr 0x34
#define p_memsz 5*4
#define __NR_write 4
#define __NR_exit 1
#define pushsbli .byte 0x6a, /* push sign-extended byte to long immediate */
fail_mmap:
pushsbli L71 - L70
call L71
L70:
.ascii "PROT_EXEC|PROT_WRITE failed.\n"
L71:
push 2 // fd stderr
push eax // fake ret.addr
push __NR_write
pop eax
int 0x80
die:
push 127 // only low 7 bits matter!
push eax // fake ret.addr
push __NR_exit
pop eax // write to stderr could fail, leaving eax as -EBADF etc.
int 0x80
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
// Decompress the rest of this loader, and jump to it.
unfold:
pop esi // &{ b_info:{sz_unc, sz_cpr, 4{byte}}, compressed_data...}
mov eax,[sz_cpr + esi]
lea edx,[sz_b_info + eax + esi]
push edx // &destination
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 esi // &compressed_data
call ebp // decompress(&src, srclen, &dst, &dstlen, b_info.misc)
add esp, (5+1)*4 // (5+1) args to decompress
ret // &destination
main:
pop ebp // &decompress
call unfold
// compressed fold_elf86 follows
/*
vi:ts=8:et:nowrap
*/

View File

@ -0,0 +1,105 @@
/* i386-darwin.macho-fold.S -- linkage to C code to process Mach-o binary
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2007 Laszlo Molnar
* Copyright (C) 2000-2007 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
* <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#include "arch/i386/macros.S"
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
sz_l_info= 12
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
fold_begin:
int3
call upx_main # Out: eax= &Mach_i386_thread_state of dyld
jmp [i386_ts_eip + eax]
SYS_exit =1
SYS_fork =2
SYS_read =3
SYS_write =4
SYS_open =5
SYS_close =6
SYS_pread =153
SYS_mmap =197
SYS_mprotect= 74
/* SYS_mmap takes a 64-bit off_t, but gcc-3.4.1-20040827 passes long long
in wrong registers. So change C interface to use size_t (32-bits) instead
of off_t (64 bits), and convert here.
*/
#define pushbli .byte 0x6a,
pread: .globl pread
int3
pushbli SYS_pread
mmap: .globl mmap
int3
pushbli SYS_mmap
exit: .globl exit
int3
pushbli SYS_exit
read: .globl read
int3
pushbli SYS_read
open: .globl open
int3
pushbli SYS_open
close: .globl close
pushbli SYS_close
mprotect: .globl mprotect
pushbli SYS_mprotect
/*
vi:ts=8:et:nowrap
*/

View File

@ -0,0 +1,447 @@
/* i386-darwin.macho-main.c -- loader stub for Mach-o i386
This file is part of the UPX executable compressor.
Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2007 Laszlo Molnar
Copyright (C) 2000-2007 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
<mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#include "include/darwin.h"
/*************************************************************************
// configuration section
**************************************************************************/
// In order to make it much easier to move this code at runtime and execute
// it at an address different from it load address: there must be no
// static data, and no string constants.
/*************************************************************************
// "file" util
**************************************************************************/
typedef struct {
size_t size; // must be first to match size[0] uncompressed size
char *buf;
} Extent;
static void
xread(Extent *x, char *buf, size_t count)
{
char *p=x->buf, *q=buf;
size_t j;
if (x->size < count) {
exit(127);
}
for (j = count; 0!=j--; ++p, ++q) {
*q = *p;
}
x->buf += count;
x->size -= count;
}
/*************************************************************************
// util
**************************************************************************/
#if 1 //{ save space
#define ERR_LAB error: exit(127);
#define err_exit(a) goto error
#else //}{ save debugging time
#define ERR_LAB
static void
err_exit(int a)
{
(void)a; // debugging convenience
exit(127);
}
#endif //}
/*************************************************************************
// UPX & NRV stuff
**************************************************************************/
struct l_info { // 12-byte trailer for loader (after macho headers)
unsigned l_checksum;
unsigned l_magic; // UPX_MAGIC_LE32
unsigned short l_lsize;
unsigned char l_version;
unsigned char l_format;
};
struct p_info { // 12-byte packed program header
unsigned p_progid;
unsigned p_filesize;
unsigned p_blocksize;
};
struct b_info { // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_unused;
};
typedef void f_unfilter(
nrv_byte *, // also addvalue
nrv_uint,
unsigned cto8, // junk in high 24 bits
unsigned ftid
);
typedef int f_expand(
const nrv_byte *, nrv_uint,
nrv_byte *, nrv_uint *, unsigned );
static void
unpackExtent(
Extent *const xi, // input
Extent *const xo, // output
f_expand *const f_decompress,
f_unfilter *f_unf
)
{
while (xo->size) {
struct b_info h;
// Note: if h.sz_unc == h.sz_cpr then the block was not
// compressible and is stored in its uncompressed form.
// Read and check block sizes.
xread(xi, (char *)&h, sizeof(h));
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);
if (xi->size != 0) // all bytes must be written
err_exit(3);
break;
}
if (h.sz_cpr <= 0) {
err_exit(4);
ERR_LAB
}
if (h.sz_cpr > h.sz_unc
|| h.sz_unc > xo->size ) {
err_exit(5);
}
// Now we have:
// assert(h.sz_cpr <= h.sz_unc);
// assert(h.sz_unc > 0 && h.sz_unc <= blocksize);
// assert(h.sz_cpr > 0 && h.sz_cpr <= blocksize);
if (h.sz_cpr < h.sz_unc) { // Decompress block
nrv_uint out_len = h.sz_unc; // EOF for lzma
int const j = (*f_decompress)(xi->buf, h.sz_cpr,
xo->buf, &out_len, h.b_method);
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
if (h.b_ftid!=0 && f_unf) { // have filter
(*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid);
}
xi->buf += h.sz_cpr;
xi->size -= h.sz_cpr;
}
else { // copy literal block
xread(xi, xo->buf, h.sz_cpr);
}
xo->buf += h.sz_unc;
xo->size -= h.sz_unc;
}
}
static void
upx_bzero(char *p, size_t len)
{
if (len) do {
*p++= 0;
} while (--len);
}
#define bzero upx_bzero
// The PF_* and PROT_* bits are {1,2,4}; the conversion table fits in 32 bits.
#define REP8(x) \
((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28))
#define EXP8(y) \
((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0)
#define PF_TO_PROT(pf) \
((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \
( (REP8(PROT_EXEC ) & EXP8(PF_X)) \
|(REP8(PROT_READ ) & EXP8(PF_R)) \
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
typedef struct {
unsigned magic;
unsigned nfat_arch;
} Fat_header;
typedef struct {
unsigned cputype;
unsigned cpusubtype;
unsigned offset;
unsigned size;
unsigned align; /* shift count; log base 2 */
} Fat_arch;
enum e8 {
FAT_MAGIC = 0xcafebabe
};
enum e9 {
CPU_TYPE_I386 = 7,
CPU_TYPE_POWERPC = 0x00000012,
CPU_TYPE_POWERPC64 = 0x01000012
};
typedef struct {
unsigned magic;
unsigned cputype;
unsigned cpysubtype;
unsigned filetype;
unsigned ncmds;
unsigned sizeofcmds;
unsigned flags;
} Mach_header;
enum e0 {
MH_MAGIC = 0xfeedface
};
enum e2 {
MH_EXECUTE = 2
};
enum e3 {
MH_NOUNDEFS = 1
};
typedef struct {
unsigned cmd;
unsigned cmdsize;
} Mach_load_command;
enum e4 {
LC_SEGMENT = 0x1,
LC_THREAD = 0x4,
LC_UNIXTHREAD = 0x5,
LC_LOAD_DYLINKER = 0xe
};
typedef struct {
unsigned cmd;
unsigned cmdsize;
char segname[16];
unsigned vmaddr;
unsigned vmsize;
unsigned fileoff;
unsigned filesize;
unsigned maxprot;
unsigned initprot;
unsigned nsects;
unsigned flags;
} Mach_segment_command;
enum e5 {
VM_PROT_READ = 1,
VM_PROT_WRITE = 2,
VM_PROT_EXECUTE = 4
};
typedef struct {
unsigned eax, ebx, ecx, edx;
unsigned edi, esi, ebp;
unsigned esp, ss;
unsigned eflags;
unsigned eip, cs;
unsigned ds, es, fs, gs;
} Mach_i386_thread_state;
typedef struct {
unsigned cmd; /* LC_THREAD or LC_UNIXTHREAD */
unsigned cmdsize; /* total size of this command */
unsigned flavor;
unsigned count; /* sizeof(following_thread_state)/4 */
Mach_i386_thread_state state;
} Mach_thread_command;
enum e6 {
i386_THREAD_STATE = (unsigned)-1
};
enum e7 {
i386_THREAD_STATE_COUNT = sizeof(Mach_i386_thread_state)/4
};
typedef union {
unsigned long offset; /* from start of load command to string */
char *ptr;
} Mach_lc_str;
#define MAP_FIXED 0x10
#define MAP_PRIVATE 0x02
#define MAP_ANON 0x1000
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
extern char *mmap(char *, size_t, unsigned, unsigned, int, /*off_t*/size_t);
static Mach_i386_thread_state const *
do_xmap(
Mach_header const *const mhdr,
unsigned const fat_offset,
Extent *const xi,
int const fdi,
Mach_header **mhdrpp,
f_expand *const f_decompress,
f_unfilter *const f_unf
)
{
Mach_segment_command const *sc = (Mach_segment_command const *)(1+ mhdr);
Mach_i386_thread_state const *entry = 0;
unsigned j;
for ( j=0; j < mhdr->ncmds; ++j,
(sc = (Mach_segment_command const *)(sc->cmdsize + (char const *)sc))
) if (LC_SEGMENT==sc->cmd) {
Extent xo;
size_t mlen = xo.size = sc->filesize;
char *addr = xo.buf = (char *)sc->vmaddr;
char *haddr = sc->vmsize + addr;
size_t frag = (int)addr &~ PAGE_MASK;
addr -= frag;
mlen += frag;
if (0!=mlen && addr != mmap(addr, mlen, VM_PROT_READ | VM_PROT_WRITE,
MAP_FIXED | MAP_PRIVATE |
((xi || 0==sc->filesize) ? MAP_ANON : 0),
((0==sc->filesize) ? -1 : fdi), sc->fileoff + fat_offset) ) {
err_exit(8);
}
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 (addr != mmap(addr, haddr - addr, sc->initprot,
MAP_FIXED | MAP_PRIVATE | MAP_ANON, -1, 0 ) ) {
err_exit(9);
}
}
}
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;
}
/*************************************************************************
// upx_main - called by our entry code
//
**************************************************************************/
Mach_i386_thread_state const *
upx_main(
struct l_info const *const li,
size_t volatile sz_compressed, // total length
Mach_header *const mhdr, // temp char[sz_mhdr] for decompressing
size_t const sz_mhdr,
f_expand *const f_decompress,
f_unfilter *const f_unf,
Mach_header **const mhdrpp // Out: *mhdrpp= &real Mach_header
)
{
Mach_i386_thread_state const *entry;
unsigned fat_offset = 0;
Extent xi, xo, xi0;
xi.buf = CONST_CAST(char *, 1+ (struct p_info const *)(1+ li)); // &b_info
xi.size = sz_compressed - (sizeof(struct l_info) + sizeof(struct p_info));
xo.buf = (char *)mhdr;
xo.size = ((struct b_info const *)xi.buf)->sz_unc;
xi0 = xi;
// Uncompress Macho headers
unpackExtent(&xi, &xo, f_decompress, 0); // never filtered?
entry = do_xmap(mhdr, fat_offset, &xi0, -1, mhdrpp, f_decompress, f_unf);
{ // Map dyld dynamic loader
Mach_load_command const *lc = (Mach_load_command const *)(1+ mhdr);
unsigned j;
for (j=0; j < mhdr->ncmds; ++j,
(lc = (Mach_load_command const *)(lc->cmdsize + (char const *)lc))
) if (LC_LOAD_DYLINKER==lc->cmd) {
char const *const dyld_name = ((Mach_lc_str const *)(1+ lc))->offset +
(char const *)lc;
int const fdi = open(dyld_name, O_RDONLY, 0);
if (0 > fdi) {
err_exit(18);
}
fat:
if ((ssize_t)sz_mhdr!=pread(fdi, (void *)mhdr, sz_mhdr, fat_offset)) {
ERR_LAB
err_exit(19);
}
switch (mhdr->magic) {
case MH_MAGIC: break;
case FAT_MAGIC: {
// stupid Apple: waste code and a page fault on EVERY execve
Fat_header const *const fh = (Fat_header const *)mhdr;
Fat_arch const *fa = (Fat_arch const *)(1+ fh);
for (j= 0; j < fh->nfat_arch; ++j, ++fa) {
if (CPU_TYPE_I386==fa->cputype) {
fat_offset= fa->offset;
goto fat;
}
}
} break;
} // switch
entry = do_xmap(mhdr, fat_offset, 0, fdi, 0, 0, 0);
close(fdi);
break;
}
}
return entry;
}
/*
vi:ts=4:et:nowrap
*/

View File

@ -0,0 +1,653 @@
tmp/i386-darwin.macho-entry.bin: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 LEXEC000 00000006 00000000 00000000 00000034 2**0 CONTENTS, RELOC, READONLY
1 LEXEC009 00000000 00000000 00000000 0000003a 2**0 CONTENTS, READONLY
2 LEXEC010 0000000c 00000000 00000000 0000003a 2**0 CONTENTS, READONLY
3 N2BSMA10 00000003 00000000 00000000 00000046 2**0 CONTENTS, RELOC, READONLY
4 N2BFAS10 00000002 00000000 00000000 00000049 2**0 CONTENTS, RELOC, READONLY
5 N2BFAS11 00000006 00000000 00000000 0000004b 2**0 CONTENTS, READONLY
6 N2BDEC10 0000000b 00000000 00000000 00000051 2**0 CONTENTS, READONLY
7 N2BSMA20 00000005 00000000 00000000 0000005c 2**0 CONTENTS, RELOC, READONLY
8 N2BFAS20 00000009 00000000 00000000 00000061 2**0 CONTENTS, RELOC, READONLY
9 N2BDEC20 0000000d 00000000 00000000 0000006a 2**0 CONTENTS, READONLY
10 N2BSMA30 0000000d 00000000 00000000 00000077 2**0 CONTENTS, RELOC, READONLY
11 N2BFAS30 0000000f 00000000 00000000 00000084 2**0 CONTENTS, RELOC, READONLY
12 N2BDEC30 0000003e 00000000 00000000 00000093 2**0 CONTENTS, RELOC, READONLY
13 N2BSMA40 0000000d 00000000 00000000 000000d1 2**0 CONTENTS, RELOC, READONLY
14 N2BFAS40 0000000f 00000000 00000000 000000de 2**0 CONTENTS, RELOC, READONLY
15 N2BSMA50 00000002 00000000 00000000 000000ed 2**0 CONTENTS, READONLY
16 N2BFAS50 00000003 00000000 00000000 000000ef 2**0 CONTENTS, READONLY
17 N2BDEC50 00000009 00000000 00000000 000000f2 2**0 CONTENTS, READONLY
18 N2BSMA60 0000000c 00000000 00000000 000000fb 2**0 CONTENTS, RELOC, READONLY
19 N2BFAS60 00000019 00000000 00000000 00000107 2**0 CONTENTS, RELOC, READONLY
20 N2BFAS61 00000016 00000000 00000000 00000120 2**0 CONTENTS, RELOC, READONLY
21 N2BDEC60 00000000 00000000 00000000 00000136 2**0 CONTENTS, READONLY
22 N2DSMA10 00000003 00000000 00000000 00000136 2**0 CONTENTS, RELOC, READONLY
23 N2DFAS10 00000002 00000000 00000000 00000139 2**0 CONTENTS, RELOC, READONLY
24 N2DFAS11 00000006 00000000 00000000 0000013b 2**0 CONTENTS, READONLY
25 N2DDEC10 0000000b 00000000 00000000 00000141 2**0 CONTENTS, READONLY
26 N2DSMA20 00000005 00000000 00000000 0000014c 2**0 CONTENTS, RELOC, READONLY
27 N2DFAS20 00000009 00000000 00000000 00000151 2**0 CONTENTS, RELOC, READONLY
28 N2DDEC20 0000000d 00000000 00000000 0000015a 2**0 CONTENTS, READONLY
29 N2DSMA30 0000000d 00000000 00000000 00000167 2**0 CONTENTS, RELOC, READONLY
30 N2DFAS30 0000000f 00000000 00000000 00000174 2**0 CONTENTS, RELOC, READONLY
31 N2DDEC30 00000052 00000000 00000000 00000183 2**0 CONTENTS, RELOC, READONLY
32 N2DSMA40 0000000d 00000000 00000000 000001d5 2**0 CONTENTS, RELOC, READONLY
33 N2DFAS40 0000000f 00000000 00000000 000001e2 2**0 CONTENTS, RELOC, READONLY
34 N2DSMA50 00000002 00000000 00000000 000001f1 2**0 CONTENTS, READONLY
35 N2DFAS50 00000003 00000000 00000000 000001f3 2**0 CONTENTS, READONLY
36 N2DDEC50 00000009 00000000 00000000 000001f6 2**0 CONTENTS, READONLY
37 N2DSMA60 0000000c 00000000 00000000 000001ff 2**0 CONTENTS, RELOC, READONLY
38 N2DFAS60 00000019 00000000 00000000 0000020b 2**0 CONTENTS, RELOC, READONLY
39 N2DFAS61 00000016 00000000 00000000 00000224 2**0 CONTENTS, RELOC, READONLY
40 N2DDEC60 00000000 00000000 00000000 0000023a 2**0 CONTENTS, READONLY
41 N2ESMA10 00000003 00000000 00000000 0000023a 2**0 CONTENTS, RELOC, READONLY
42 N2EFAS10 00000002 00000000 00000000 0000023d 2**0 CONTENTS, RELOC, READONLY
43 N2EFAS11 00000006 00000000 00000000 0000023f 2**0 CONTENTS, READONLY
44 N2EDEC10 0000000b 00000000 00000000 00000245 2**0 CONTENTS, READONLY
45 N2ESMA20 00000005 00000000 00000000 00000250 2**0 CONTENTS, RELOC, READONLY
46 N2EFAS20 00000009 00000000 00000000 00000255 2**0 CONTENTS, RELOC, READONLY
47 N2EDEC20 0000000d 00000000 00000000 0000025e 2**0 CONTENTS, READONLY
48 N2ESMA30 0000000d 00000000 00000000 0000026b 2**0 CONTENTS, RELOC, READONLY
49 N2EFAS30 0000000f 00000000 00000000 00000278 2**0 CONTENTS, RELOC, READONLY
50 N2EDEC30 0000005f 00000000 00000000 00000287 2**0 CONTENTS, RELOC, READONLY
51 N2ESMA40 0000000d 00000000 00000000 000002e6 2**0 CONTENTS, RELOC, READONLY
52 N2EFAS40 0000000f 00000000 00000000 000002f3 2**0 CONTENTS, RELOC, READONLY
53 N2ESMA50 00000002 00000000 00000000 00000302 2**0 CONTENTS, READONLY
54 N2EFAS50 00000003 00000000 00000000 00000304 2**0 CONTENTS, READONLY
55 N2EDEC50 00000009 00000000 00000000 00000307 2**0 CONTENTS, READONLY
56 N2ESMA60 0000000c 00000000 00000000 00000310 2**0 CONTENTS, RELOC, READONLY
57 N2EFAS60 00000019 00000000 00000000 0000031c 2**0 CONTENTS, RELOC, READONLY
58 N2EFAS61 00000016 00000000 00000000 00000335 2**0 CONTENTS, RELOC, READONLY
59 N2EDEC60 00000000 00000000 00000000 0000034b 2**0 CONTENTS, READONLY
60 LZMA_DEC00 0000002e 00000000 00000000 0000034b 2**0 CONTENTS, RELOC, READONLY
61 LZMA_ELF00 00000048 00000000 00000000 00000379 2**0 CONTENTS, READONLY
62 LZMA_DEC10 00000a86 00000000 00000000 000003c1 2**0 CONTENTS, READONLY
63 LZMA_DEC20 00000a86 00000000 00000000 00000e47 2**0 CONTENTS, READONLY
64 LZMA_DEC30 0000001a 00000000 00000000 000018cd 2**0 CONTENTS, READONLY
65 LEXEC015 0000001d 00000000 00000000 000018e7 2**0 CONTENTS, READONLY
66 LXUNF000 00000002 00000000 00000000 00001904 2**0 CONTENTS, RELOC, READONLY
67 LXUNF002 00000005 00000000 00000000 00001906 2**0 CONTENTS, READONLY
68 MRUBYTE0 00000002 00000000 00000000 0000190b 2**0 CONTENTS, READONLY
69 LXMRU005 00000005 00000000 00000000 0000190d 2**0 CONTENTS, RELOC, READONLY
70 LXMRU006 00000007 00000000 00000000 00001912 2**0 CONTENTS, READONLY
71 LXMRU007 00000007 00000000 00000000 00001919 2**0 CONTENTS, READONLY
72 LXUNF008 00000004 00000000 00000000 00001920 2**0 CONTENTS, READONLY
73 LXUNF010 00000005 00000000 00000000 00001924 2**0 CONTENTS, RELOC, READONLY
74 LXJCC010 00000003 00000000 00000000 00001929 2**0 CONTENTS, READONLY
75 LXMRU045 00000003 00000000 00000000 0000192c 2**0 CONTENTS, READONLY
76 LXMRU046 00000002 00000000 00000000 0000192f 2**0 CONTENTS, READONLY
77 LXJCC020 00000002 00000000 00000000 00001931 2**0 CONTENTS, RELOC, READONLY
78 LXJCC021 00000005 00000000 00000000 00001933 2**0 CONTENTS, RELOC, READONLY
79 LXJCC023 00000007 00000000 00000000 00001938 2**0 CONTENTS, READONLY
80 LXUNF037 00000002 00000000 00000000 0000193f 2**0 CONTENTS, READONLY
81 LXUNF386 00000001 00000000 00000000 00001941 2**0 CONTENTS, READONLY
82 LXUNF387 00000009 00000000 00000000 00001942 2**0 CONTENTS, READONLY
83 LXUNF388 00000003 00000000 00000000 0000194b 2**0 CONTENTS, RELOC, READONLY
84 LXUNF486 00000004 00000000 00000000 0000194e 2**0 CONTENTS, READONLY
85 LXUNF487 00000002 00000000 00000000 00001952 2**0 CONTENTS, RELOC, READONLY
86 LXMRU065 00000005 00000000 00000000 00001954 2**0 CONTENTS, RELOC, READONLY
87 MRUBYTE3 00000002 00000000 00000000 00001959 2**0 CONTENTS, READONLY
88 MRUARB30 00000001 00000000 00000000 0000195b 2**0 CONTENTS, READONLY
89 MRUBITS3 00000002 00000000 00000000 0000195c 2**0 CONTENTS, READONLY
90 MRUARB40 00000004 00000000 00000000 0000195e 2**0 CONTENTS, READONLY
91 LXMRU070 00000008 00000000 00000000 00001962 2**0 CONTENTS, RELOC, READONLY
92 MRUBYTE4 00000003 00000000 00000000 0000196a 2**0 CONTENTS, READONLY
93 MRUBITS4 00000002 00000000 00000000 0000196d 2**0 CONTENTS, READONLY
94 MRUARB50 00000006 00000000 00000000 0000196f 2**0 CONTENTS, READONLY
95 LXMRU080 00000003 00000000 00000000 00001975 2**0 CONTENTS, READONLY
96 MRUBYTE5 00000002 00000000 00000000 00001978 2**0 CONTENTS, READONLY
97 MRUARB60 00000001 00000000 00000000 0000197a 2**0 CONTENTS, READONLY
98 MRUBITS5 00000002 00000000 00000000 0000197b 2**0 CONTENTS, READONLY
99 MRUARB70 00000004 00000000 00000000 0000197d 2**0 CONTENTS, READONLY
100 LXMRU090 0000000b 00000000 00000000 00001981 2**0 CONTENTS, RELOC, READONLY
101 MRUBYTE6 00000002 00000000 00000000 0000198c 2**0 CONTENTS, READONLY
102 MRUARB80 00000001 00000000 00000000 0000198e 2**0 CONTENTS, READONLY
103 MRUBITS6 00000002 00000000 00000000 0000198f 2**0 CONTENTS, READONLY
104 MRUARB90 00000004 00000000 00000000 00001991 2**0 CONTENTS, READONLY
105 LXMRU100 00000010 00000000 00000000 00001995 2**0 CONTENTS, READONLY
106 LXUNF040 00000005 00000000 00000000 000019a5 2**0 CONTENTS, READONLY
107 LXMRU110 00000003 00000000 00000000 000019aa 2**0 CONTENTS, READONLY
108 LXMRU111 00000002 00000000 00000000 000019ad 2**0 CONTENTS, READONLY
109 LXUNF041 00000007 00000000 00000000 000019af 2**0 CONTENTS, RELOC, READONLY
110 LXUNF042 00000000 00000000 00000000 000019b6 2**0 CONTENTS, READONLY
111 LEXEC016 00000005 00000000 00000000 000019b6 2**0 CONTENTS, RELOC, READONLY
112 LXMRU010 00000001 00000000 00000000 000019bb 2**0 CONTENTS, READONLY
113 LXJMPA00 00000002 00000000 00000000 000019bc 2**0 CONTENTS, READONLY
114 LXCALLB0 00000002 00000000 00000000 000019be 2**0 CONTENTS, READONLY
115 LXUNF021 00000006 00000000 00000000 000019c0 2**0 CONTENTS, READONLY
116 LXMRU022 00000003 00000000 00000000 000019c6 2**0 CONTENTS, READONLY
117 LXJMPA01 00000002 00000000 00000000 000019c9 2**0 CONTENTS, READONLY
118 LXCALLB1 00000002 00000000 00000000 000019cb 2**0 CONTENTS, READONLY
119 MRUBITS1 00000001 00000000 00000000 000019cd 2**0 CONTENTS, READONLY
120 LXMRU030 00000002 00000000 00000000 000019ce 2**0 CONTENTS, READONLY
121 MRUBYTE1 00000002 00000000 00000000 000019d0 2**0 CONTENTS, READONLY
122 MRUARB10 00000001 00000000 00000000 000019d2 2**0 CONTENTS, READONLY
123 LXMRU040 00000002 00000000 00000000 000019d3 2**0 CONTENTS, RELOC, READONLY
124 LXUNF030 00000006 00000000 00000000 000019d5 2**0 CONTENTS, READONLY
125 LXJCC000 00000008 00000000 00000000 000019db 2**0 CONTENTS, RELOC, READONLY
126 LXCJ0MRU 00000002 00000000 00000000 000019e3 2**0 CONTENTS, READONLY
127 LXCJ1MRU 00000003 00000000 00000000 000019e5 2**0 CONTENTS, READONLY
128 LXCALJMP 00000003 00000000 00000000 000019e8 2**0 CONTENTS, READONLY
129 LXCALL00 00000002 00000000 00000000 000019eb 2**0 CONTENTS, RELOC, READONLY
130 LXCALL01 00000003 00000000 00000000 000019ed 2**0 CONTENTS, READONLY
131 LXCJ2MRU 00000002 00000000 00000000 000019f0 2**0 CONTENTS, RELOC, READONLY
132 LXCJ4MRU 00000002 00000000 00000000 000019f2 2**0 CONTENTS, RELOC, READONLY
133 LXCJ6MRU 00000002 00000000 00000000 000019f4 2**0 CONTENTS, RELOC, READONLY
134 LXCJ7MRU 00000002 00000000 00000000 000019f6 2**0 CONTENTS, RELOC, READONLY
135 LXCJ8MRU 00000003 00000000 00000000 000019f8 2**0 CONTENTS, RELOC, READONLY
136 LXUNF034 00000005 00000000 00000000 000019fb 2**0 CONTENTS, RELOC, READONLY
137 LXMRU055 00000002 00000000 00000000 00001a00 2**0 CONTENTS, READONLY
138 MRUBYTE2 00000005 00000000 00000000 00001a02 2**0 CONTENTS, READONLY
139 MRUBITS2 00000005 00000000 00000000 00001a07 2**0 CONTENTS, READONLY
140 MRUARB20 00000005 00000000 00000000 00001a0c 2**0 CONTENTS, READONLY
141 LXMRU057 00000006 00000000 00000000 00001a11 2**0 CONTENTS, READONLY
142 LXMRU058 00000001 00000000 00000000 00001a17 2**0 CONTENTS, READONLY
143 LXUNF035 00000006 00000000 00000000 00001a18 2**0 CONTENTS, READONLY
144 ctok32.00 00000009 00000000 00000000 00001a1e 2**0 CONTENTS, RELOC, READONLY
145 ctok32.10 0000000e 00000000 00000000 00001a27 2**0 CONTENTS, RELOC, READONLY
146 ctok32.20 00000021 00000000 00000000 00001a35 2**0 CONTENTS, RELOC, READONLY
147 ctok32.30 00000007 00000000 00000000 00001a56 2**0 CONTENTS, RELOC, READONLY
148 ctok32.40 00000005 00000000 00000000 00001a5d 2**0 CONTENTS, RELOC, READONLY
149 CALLTR00 00000010 00000000 00000000 00001a62 2**0 CONTENTS, RELOC, READONLY
150 CTCLEVE1 00000005 00000000 00000000 00001a72 2**0 CONTENTS, RELOC, READONLY
151 CALLTR01 00000005 00000000 00000000 00001a77 2**0 CONTENTS, READONLY
152 CTBSHR01 00000004 00000000 00000000 00001a7c 2**0 CONTENTS, READONLY
153 CTBROR01 00000002 00000000 00000000 00001a80 2**0 CONTENTS, READONLY
154 CTBSWA01 00000005 00000000 00000000 00001a82 2**0 CONTENTS, READONLY
155 CALLTR02 00000010 00000000 00000000 00001a87 2**0 CONTENTS, RELOC, READONLY
156 CALLTR10 00000005 00000000 00000000 00001a97 2**0 CONTENTS, RELOC, READONLY
157 CALLTRE8 00000002 00000000 00000000 00001a9c 2**0 CONTENTS, READONLY
158 CALLTRE9 00000002 00000000 00000000 00001a9e 2**0 CONTENTS, READONLY
159 CALLTR11 00000004 00000000 00000000 00001aa0 2**0 CONTENTS, RELOC, READONLY
160 CTCLEVE2 00000005 00000000 00000000 00001aa4 2**0 CONTENTS, RELOC, READONLY
161 CALLTR12 00000002 00000000 00000000 00001aa9 2**0 CONTENTS, READONLY
162 CTBSHR11 00000004 00000000 00000000 00001aab 2**0 CONTENTS, READONLY
163 CTBROR11 00000002 00000000 00000000 00001aaf 2**0 CONTENTS, READONLY
164 CTBSWA11 00000005 00000000 00000000 00001ab1 2**0 CONTENTS, READONLY
165 CALLTR13 00000007 00000000 00000000 00001ab6 2**0 CONTENTS, RELOC, READONLY
166 LEXEC017 00000002 00000000 00000000 00001abd 2**0 CONTENTS, READONLY
167 LEXEC020 00000059 00000000 00000000 00001abf 2**0 CONTENTS, READONLY
SYMBOL TABLE:
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 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 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 *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
RELOCATION RECORDS FOR [LEXEC000]:
OFFSET TYPE VALUE
00000002 R_386_PC32 LEXEC020
RELOCATION RECORDS FOR [N2BSMA10]:
OFFSET TYPE VALUE
00000001 R_386_PC8 N2BDEC10
RELOCATION RECORDS FOR [N2BFAS10]:
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
RELOCATION RECORDS FOR [LZMA_DEC00]:
OFFSET TYPE VALUE
00000005 R_386_32 lzma_stack_adjust
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
00000009 R_386_PC8 ctok32.40
RELOCATION RECORDS FOR [ctok32.30]:
OFFSET TYPE VALUE
00000006 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