new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel
This commit is contained in:
parent
86de510731
commit
c88c20820f
1
NEWS
1
NEWS
@ -3,6 +3,7 @@ User visible changes for UPX
|
||||
==================================================================
|
||||
|
||||
Changes in 3.04 (XX XXX 2008):
|
||||
* new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel
|
||||
* bvmlinuz boot protocol 2.08 for 386 Linux kernel
|
||||
* Extended ABI version 4 for armel-eabi ARM Linux ELF
|
||||
|
||||
|
||||
@ -459,6 +459,7 @@ private:
|
||||
#define UPX_F_VMLINUX_ARMEL 28
|
||||
#define UPX_F_MACH_i386 29
|
||||
#define UPX_F_LINUX_ELF32_MIPSEL 30
|
||||
#define UPX_F_VMLINUZ_ARMEL 31
|
||||
|
||||
#define UPX_F_PLAIN_TEXT 127
|
||||
|
||||
|
||||
352
src/p_vmlinz.cpp
352
src/p_vmlinz.cpp
@ -711,6 +711,358 @@ void PackVmlinuzI386::unpack(OutputFile *fo)
|
||||
}
|
||||
|
||||
|
||||
PackVmlinuzARMEL::PackVmlinuzARMEL(InputFile *f) :
|
||||
super(f), setup_size(0), filter_len(0)
|
||||
{
|
||||
bele = &N_BELE_RTP::le_policy;
|
||||
}
|
||||
|
||||
const int *PackVmlinuzARMEL::getCompressionMethods(int method, int level) const
|
||||
{
|
||||
return Packer::getDefaultCompressionMethods_le32(method, level);
|
||||
}
|
||||
|
||||
const int *PackVmlinuzARMEL::getFilters() const
|
||||
{
|
||||
static const int f50[] = { 0x50, FT_END };
|
||||
return f50;
|
||||
}
|
||||
|
||||
int PackVmlinuzARMEL::getStrategy(Filter &/*ft*/)
|
||||
{
|
||||
// If user specified the filter, then use it (-2==filter_strategy).
|
||||
// Else try the first two filters, and pick the better (2==filter_strategy).
|
||||
return (opt->no_filter ? -3 : ((opt->filter > 0) ? -2 : 2));
|
||||
}
|
||||
|
||||
bool PackVmlinuzARMEL::canPack()
|
||||
{
|
||||
return readFileHeader() == getFormat();
|
||||
}
|
||||
|
||||
int PackVmlinuzARMEL::readFileHeader()
|
||||
{
|
||||
unsigned int hdr[8];
|
||||
|
||||
fi->readx(&hdr, sizeof(hdr));
|
||||
for (int j=0; j < 8; ++j) {
|
||||
if (0xe1a00000!=get_te32(&hdr[j])) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return UPX_F_VMLINUZ_ARMEL;
|
||||
}
|
||||
|
||||
int PackVmlinuzARMEL::decompressKernel()
|
||||
{
|
||||
// read whole kernel image
|
||||
obuf.alloc(file_size);
|
||||
fi->seek(0, SEEK_SET);
|
||||
fi->readx(obuf, file_size);
|
||||
|
||||
//checkAlreadyPacked(obuf + setup_size, UPX_MIN(file_size - setup_size, (off_t)1024));
|
||||
|
||||
// Find head.S:
|
||||
// bl decompress_kernel # 0xeb......
|
||||
// b call_kernel # 0xea......
|
||||
//LC0: .word LC0 # self!
|
||||
unsigned decompress_kernel = 0;
|
||||
unsigned caller1 = 0;
|
||||
unsigned caller2 = 0;
|
||||
unsigned got_start = 0;
|
||||
unsigned got_end = 0;
|
||||
for (unsigned j = 0; j < 0x400; j+=4) {
|
||||
unsigned w;
|
||||
if (j!=get_te32(j + obuf)) {
|
||||
continue;
|
||||
}
|
||||
if (0xea000000!=(0xff000000& get_te32(-4+ j + obuf))
|
||||
|| 0xeb000000!=(0xff000000&(w= get_te32(-8+ j + obuf))) ) {
|
||||
continue;
|
||||
}
|
||||
caller1 = -8 + j;
|
||||
decompress_kernel = ((0x00ffffff & w)<<2) + 8+ caller1;
|
||||
for (unsigned k = 12; k<=128; k+=4) {
|
||||
w = get_te32(j - k + obuf);
|
||||
if (0xeb000000==(0xff000000 & w)
|
||||
&& decompress_kernel==(((0x00ffffff & w)<<2) + 8+ j - k) ) {
|
||||
caller2 = j - k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
got_start = get_te32(5*4 + j + obuf);
|
||||
got_end = get_te32(6*4 + j + obuf);
|
||||
break;
|
||||
}
|
||||
if (0==decompress_kernel) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Find first subroutine that is called by decompress_kernel,
|
||||
// which we will consider to be the start of the gunzip module
|
||||
// and the end of the non-gunzip modules.
|
||||
for (unsigned j = decompress_kernel; j < (unsigned)file_size; j+=4) {
|
||||
unsigned w = get_te32(j + obuf);
|
||||
if (0xeb800000==(0xff800000 & w)) {
|
||||
setup_size = 8+ ((0xff000000 | w)<<2) + j;
|
||||
// Move the GlobalOffsetTable.
|
||||
for (unsigned k = got_start; k < got_end; k+=4) {
|
||||
w = get_te32(k + obuf);
|
||||
// FIXME: must relocate w
|
||||
set_te32(k - got_start + setup_size + obuf, w);
|
||||
}
|
||||
setup_size += got_end - got_start;
|
||||
set_te32(&obuf[caller1], 0xeb000000 |
|
||||
(0x00ffffff & ((setup_size - (8+ caller1))>>2)) );
|
||||
set_te32(&obuf[caller2], 0xeb000000 |
|
||||
(0x00ffffff & ((setup_size - (8+ caller2))>>2)) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int gzoff = 0; gzoff < 0x4000; gzoff+=4) {
|
||||
// find gzip header (2 bytes magic + 1 byte method "deflated")
|
||||
int off = find(obuf + gzoff, file_size - gzoff, "\x1F\x8B\x08", 3);
|
||||
if (off < 0 || 0!=(3u & off))
|
||||
break; // not found, or not word-aligned
|
||||
gzoff += off;
|
||||
const int gzlen = file_size - gzoff;
|
||||
if (gzlen < 256)
|
||||
break;
|
||||
// check gzip flag byte
|
||||
unsigned char flags = obuf[gzoff + 3];
|
||||
if ((flags & 0xe0) != 0) // reserved bits set
|
||||
continue;
|
||||
//printf("found gzip header at offset %d\n", gzoff);
|
||||
|
||||
// try to decompress
|
||||
int klen;
|
||||
int fd;
|
||||
off_t fd_pos;
|
||||
for (;;)
|
||||
{
|
||||
klen = -1;
|
||||
fd = -1;
|
||||
fd_pos = -1;
|
||||
// open
|
||||
fi->seek(gzoff, SEEK_SET);
|
||||
fd = dup(fi->getFd());
|
||||
if (fd < 0)
|
||||
break;
|
||||
gzFile zf = gzdopen(fd, "rb");
|
||||
if (zf == NULL)
|
||||
break;
|
||||
// estimate gzip-decompressed kernel size & alloc buffer
|
||||
if (ibuf.getSize() == 0)
|
||||
ibuf.alloc(gzlen * 3);
|
||||
// decompress
|
||||
klen = gzread(zf, ibuf, ibuf.getSize());
|
||||
fd_pos = lseek(fd, 0, SEEK_CUR);
|
||||
gzclose(zf);
|
||||
fd = -1;
|
||||
if (klen != (int)ibuf.getSize())
|
||||
break;
|
||||
// realloc and try again
|
||||
unsigned const s = ibuf.getSize();
|
||||
ibuf.dealloc();
|
||||
ibuf.alloc(3 * s / 2);
|
||||
}
|
||||
if (fd >= 0)
|
||||
(void) close(fd);
|
||||
if (klen <= 0)
|
||||
continue;
|
||||
|
||||
if (klen <= gzlen)
|
||||
continue;
|
||||
|
||||
if (opt->force > 0)
|
||||
return klen;
|
||||
|
||||
// some checks
|
||||
if (fd_pos != file_size) {
|
||||
//printf("fd_pos: %ld, file_size: %ld\n", (long)fd_pos, (long)file_size);
|
||||
}
|
||||
|
||||
//head_ok:
|
||||
|
||||
// FIXME: more checks for special magic bytes in ibuf ???
|
||||
// FIXME: more checks for kernel architecture ???
|
||||
|
||||
return klen;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PackVmlinuzARMEL::readKernel()
|
||||
{
|
||||
int klen = decompressKernel();
|
||||
if (klen <= 0)
|
||||
throwCantPack("kernel decompression failed");
|
||||
//OutputFile::dump("kernel.img", ibuf, klen);
|
||||
|
||||
// copy the setup boot code
|
||||
setup_buf.alloc(setup_size);
|
||||
memcpy(setup_buf, obuf, setup_size);
|
||||
//OutputFile::dump("setup.img", setup_buf, setup_size);
|
||||
|
||||
obuf.dealloc();
|
||||
obuf.allocForCompression(klen);
|
||||
|
||||
ph.u_len = klen;
|
||||
ph.filter = 0;
|
||||
}
|
||||
|
||||
Linker* PackVmlinuzARMEL::newLinker() const
|
||||
{
|
||||
return new ElfLinkerArmLE;
|
||||
}
|
||||
|
||||
static const
|
||||
#include "stub/arm-linux.kernel.vmlinux.h"
|
||||
static const
|
||||
#include "stub/armel-linux.kernel.vmlinuz-head.h"
|
||||
|
||||
void PackVmlinuzARMEL::buildLoader(const Filter *ft)
|
||||
{
|
||||
// prepare loader; same as vmlinux (with 'x')
|
||||
initLoader(stub_arm_linux_kernel_vmlinux, sizeof(stub_arm_linux_kernel_vmlinux));
|
||||
addLoader("LINUX000", NULL);
|
||||
if (ft->id) {
|
||||
assert(ft->calls > 0);
|
||||
addLoader("LINUX010", NULL);
|
||||
}
|
||||
addLoader("LINUX020", NULL);
|
||||
if (ft->id) {
|
||||
addFilter32(ft->id);
|
||||
}
|
||||
addLoader("LINUX030", NULL);
|
||||
if (ph.method == M_NRV2E_8) addLoader("NRV2E", NULL);
|
||||
else if (ph.method == M_NRV2B_8) addLoader("NRV2B", NULL);
|
||||
else if (ph.method == M_NRV2D_8) addLoader("NRV2D", NULL);
|
||||
else if (M_IS_LZMA(ph.method)) addLoader("LZMA_ELF00,LZMA_DEC10,LZMA_DEC30", NULL);
|
||||
else throwBadLoader();
|
||||
addLoader("IDENTSTR,UPX1HEAD", NULL);
|
||||
|
||||
// To debug (2008-09-14):
|
||||
// Build gdb-6.8-21.fc9.src.rpm; ./configure --target=arm-none-elf; make
|
||||
// Contains the fix for http://bugzilla.redhat.com/show_bug.cgi?id=436037
|
||||
// Install qemu-0.9.1-6.fc9.i386.rpm
|
||||
// qemu-system-arm -s -S -kernel <file> -nographic
|
||||
// (gdb) target remote localhost:1234
|
||||
// A very small boot loader runs at pc=0x0; the kernel is at 0x10000 (64KiB).
|
||||
}
|
||||
|
||||
void PackVmlinuzARMEL::defineDecompressorSymbols()
|
||||
{
|
||||
super::defineDecompressorSymbols();
|
||||
linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len);
|
||||
linker->defineSymbol("UNCOMPRESSED_LENGTH", ph.u_len);
|
||||
linker->defineSymbol("METHOD", ph.method);
|
||||
}
|
||||
|
||||
unsigned PackVmlinuzARMEL::write_vmlinuz_head(OutputFile *const fo)
|
||||
{ // First word from vmlinuz-head.S
|
||||
fo->write(&stub_armel_linux_kernel_vmlinuz_head[0], 4);
|
||||
|
||||
// Second word
|
||||
LE32 tmp_u32;
|
||||
unsigned const t = (0xff000000 &
|
||||
get_te32(&stub_armel_linux_kernel_vmlinuz_head[4]))
|
||||
| (0x00ffffff & (0u - 1 + ((3+ ph.c_len)>>2)));
|
||||
tmp_u32 = t;
|
||||
fo->write((void const *)&tmp_u32, 4);
|
||||
|
||||
return sizeof(stub_armel_linux_kernel_vmlinuz_head);
|
||||
}
|
||||
|
||||
void PackVmlinuzARMEL::pack(OutputFile *fo)
|
||||
{
|
||||
readKernel();
|
||||
|
||||
// prepare filter
|
||||
Filter ft(ph.level);
|
||||
ft.buf_len = ph.u_len;
|
||||
ft.addvalue = 0;
|
||||
|
||||
// compress
|
||||
upx_compress_config_t cconf; cconf.reset();
|
||||
// limit stack size needed for runtime decompression
|
||||
cconf.conf_lzma.max_num_probs = 1846 + (768 << 5); // ushort: 52,844 byte stack
|
||||
compressWithFilters(&ft, 512, &cconf, getStrategy(ft));
|
||||
|
||||
const unsigned lsize = getLoaderSize();
|
||||
|
||||
defineDecompressorSymbols();
|
||||
defineFilterSymbols(&ft);
|
||||
relocateLoader();
|
||||
|
||||
MemBuffer loader(lsize);
|
||||
memcpy(loader, getLoader(), lsize);
|
||||
patchPackHeader(loader, lsize);
|
||||
|
||||
// boot_sect_t * const bs = (boot_sect_t *) ((unsigned char *) setup_buf);
|
||||
// bs->sys_size = ALIGN_UP(lsize + ph.c_len, 16u) / 16;
|
||||
// bs->payload_length = ph.c_len;
|
||||
|
||||
fo->write(setup_buf, setup_buf.getSize());
|
||||
write_vmlinuz_head(fo);
|
||||
fo->write(obuf, ph.c_len);
|
||||
unsigned const zero = 0;
|
||||
fo->write((void const *)&zero, 3u & (0u - ph.c_len));
|
||||
fo->write(loader, lsize);
|
||||
#if 0
|
||||
printf("%-13s: setup : %8ld bytes\n", getName(), (long) setup_buf.getSize());
|
||||
printf("%-13s: loader : %8ld bytes\n", getName(), (long) lsize);
|
||||
printf("%-13s: compressed : %8ld bytes\n", getName(), (long) ph.c_len);
|
||||
#endif
|
||||
|
||||
// verify
|
||||
verifyOverlappingDecompression();
|
||||
|
||||
// finally check the compression ratio
|
||||
if (!checkFinalCompressionRatio(fo))
|
||||
throwNotCompressible();
|
||||
}
|
||||
|
||||
int PackVmlinuzARMEL::canUnpack()
|
||||
{
|
||||
if (readFileHeader() != getFormat())
|
||||
return false;
|
||||
fi->seek(setup_size, SEEK_SET);
|
||||
return readPackHeader(1024) ? 1 : -1;
|
||||
}
|
||||
|
||||
void PackVmlinuzARMEL::unpack(OutputFile *fo)
|
||||
{
|
||||
// no uncompression support for this format, so that
|
||||
// it is possible to remove the original deflate code (>10 KiB)
|
||||
|
||||
// FIXME: but we could write the uncompressed "vmlinux" image
|
||||
|
||||
ibuf.alloc(ph.c_len);
|
||||
obuf.allocForUncompression(ph.u_len);
|
||||
|
||||
fi->seek(setup_size + ph.buf_offset + ph.getPackHeaderSize(), SEEK_SET);
|
||||
fi->readx(ibuf, ph.c_len);
|
||||
|
||||
// decompress
|
||||
decompress(ibuf, obuf);
|
||||
|
||||
// unfilter
|
||||
Filter ft(ph.level);
|
||||
ft.init(ph.filter, 0);
|
||||
ft.cto = (unsigned char) ph.filter_cto;
|
||||
ft.unfilter(obuf, ph.u_len);
|
||||
|
||||
// write decompressed file
|
||||
if (fo)
|
||||
{
|
||||
throwCantUnpack("build a new kernel instead :-)");
|
||||
//fo->write(obuf, ph.u_len);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
vi:ts=4:et
|
||||
*/
|
||||
|
||||
@ -150,6 +150,52 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
// vmlinuz/armel (gzip compressed Linux kernel image)
|
||||
**************************************************************************/
|
||||
|
||||
class PackVmlinuzARMEL : public Packer
|
||||
{
|
||||
typedef Packer super;
|
||||
public:
|
||||
PackVmlinuzARMEL(InputFile *f);
|
||||
virtual int getVersion() const { return 13; }
|
||||
virtual int getFormat() const { return UPX_F_VMLINUZ_ARMEL; }
|
||||
virtual const char *getName() const { return "vmlinuz/armel"; }
|
||||
virtual const char *getFullName(const options_t *) const { return "armel-linux.kernel.vmlinuz"; }
|
||||
virtual const int *getCompressionMethods(int method, int level) const;
|
||||
virtual const int *getFilters() const;
|
||||
virtual int getStrategy(Filter &);
|
||||
|
||||
virtual void pack(OutputFile *fo);
|
||||
virtual void unpack(OutputFile *fo);
|
||||
|
||||
virtual bool canPack();
|
||||
virtual int canUnpack();
|
||||
|
||||
protected:
|
||||
virtual int readFileHeader();
|
||||
virtual int decompressKernel();
|
||||
virtual void readKernel();
|
||||
|
||||
virtual void buildLoader(const Filter *ft);
|
||||
virtual unsigned write_vmlinuz_head(OutputFile *const fo);
|
||||
virtual void defineDecompressorSymbols();
|
||||
virtual Linker* newLinker() const;
|
||||
|
||||
// virtual upx_byte *getLoader() const;
|
||||
// virtual int getLoaderSize() const;
|
||||
|
||||
|
||||
MemBuffer setup_buf;
|
||||
int setup_size;
|
||||
// unsigned physical_start;
|
||||
// unsigned page_offset;
|
||||
// unsigned config_physical_align;
|
||||
unsigned filter_len;
|
||||
};
|
||||
|
||||
|
||||
#endif /* already included */
|
||||
|
||||
|
||||
|
||||
@ -212,6 +212,7 @@ const char *Packer::getDecompressorSections() const
|
||||
|| UPX_F_LINUX_ELFPPC32 ==ph.format
|
||||
|| UPX_F_LINUX_ELF32_ARMEB==ph.format
|
||||
|| UPX_F_BSD_ELF_i386 ==ph.format
|
||||
|| UPX_F_VMLINUZ_ARMEL ==ph.format
|
||||
|| UPX_F_VMLINUX_ARMEL ==ph.format
|
||||
|| UPX_F_VMLINUX_ARMEB ==ph.format
|
||||
|| UPX_F_VMLINUX_PPC32 ==ph.format
|
||||
@ -250,6 +251,7 @@ void Packer::defineDecompressorSymbols()
|
||||
|| UPX_F_LINUX_ELFPPC32 ==ph.format
|
||||
|| UPX_F_LINUX_ELF32_ARMEB==ph.format
|
||||
|| UPX_F_BSD_ELF_i386 ==ph.format
|
||||
|| UPX_F_VMLINUZ_ARMEL ==ph.format
|
||||
|| UPX_F_VMLINUX_ARMEL ==ph.format
|
||||
|| UPX_F_VMLINUX_ARMEB ==ph.format
|
||||
|| UPX_F_VMLINUX_PPC32 ==ph.format
|
||||
|
||||
@ -206,6 +206,8 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
|
||||
return p;
|
||||
if ((p = func(new PackBvmlinuzI386(f), user)) != NULL)
|
||||
return p;
|
||||
if ((p = func(new PackVmlinuzARMEL(f), user)) != NULL)
|
||||
return p;
|
||||
#if 0
|
||||
if ((p = func(new PackElks8086(f), user)) != NULL)
|
||||
return p;
|
||||
|
||||
@ -60,6 +60,8 @@ STUBS += armeb-linux.elf-entry.h
|
||||
STUBS += armeb-linux.elf-fold.h
|
||||
STUBS += armeb-linux.kernel.vmlinux.h
|
||||
STUBS += armeb-linux.kernel.vmlinux-head.h
|
||||
STUBS += armel-linux.kernel.vmlinuz.h
|
||||
STUBS += armel-linux.kernel.vmlinuz-head.h
|
||||
STUBS += arm.v4a-wince.pe.h
|
||||
STUBS += arm.v4t-wince.pe.h
|
||||
STUBS += i086-dos16.com.h
|
||||
@ -801,6 +803,29 @@ i386-linux.kernel.vmlinux-head.h : $(srcdir)/src/$$T.S
|
||||
$(call tc,bin2h) tmp/$T.bin $@
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
# // armel-linux.kernel.vmlinuz
|
||||
# // armel-linux.kernel.vmlinuz-head
|
||||
# ************************************************************************/
|
||||
#
|
||||
armel-linux.kernel.vmlinu%.h : tc_list = armel-linux.kernel default
|
||||
armel-linux.kernel.vmlinu%.h : tc_bfdname = elf32-littlearm
|
||||
|
||||
tc.armel-linux.kernel.gcc = arm-linux-gcc-4.1.0 -march=armv5 -nostdinc -MMD -MT $@
|
||||
tc.armel-linux.kernel.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
|
||||
tc.armel-linux.kernel.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
|
||||
|
||||
armel-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S
|
||||
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
|
||||
$(call tc,f-embed_objinfo,tmp/$T.bin)
|
||||
$(call tc,bin2h-c) tmp/$T.bin $@
|
||||
|
||||
armel-linux.kernel.vmlinuz-head.h : $(srcdir)/src/$$T.S
|
||||
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
|
||||
$(call tc,objcopy) --output-target binary --only-section .text tmp/$T.o tmp/$T.bin
|
||||
$(call tc,bin2h) tmp/$T.bin $@
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
# // i386-win32.pe
|
||||
# ************************************************************************/
|
||||
|
||||
40
src/stub/armel-linux.kernel.vmlinuz-head.h
Normal file
40
src/stub/armel-linux.kernel.vmlinuz-head.h
Normal file
@ -0,0 +1,40 @@
|
||||
/* armel-linux.kernel.vmlinuz-head.h
|
||||
created from armel-linux.kernel.vmlinuz-head.bin, 8 (0x8) bytes
|
||||
|
||||
This file is part of the UPX executable compressor.
|
||||
|
||||
Copyright (C) 1996-2008 Markus Franz Xaver Johannes Oberhumer
|
||||
Copyright (C) 1996-2008 Laszlo Molnar
|
||||
Copyright (C) 2000-2008 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> <ml1050@users.sourceforge.net>
|
||||
|
||||
John F. Reiser
|
||||
<jreiser@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
|
||||
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_SIZE 8
|
||||
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_ADLER32 0x17bb0637
|
||||
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_CRC32 0xccc03eaa
|
||||
|
||||
unsigned char stub_armel_linux_kernel_vmlinuz_head[8] = {
|
||||
/* 0x0000 */ 14,192,160,225,254,255,255,235
|
||||
};
|
||||
1140
src/stub/armel-linux.kernel.vmlinuz.h
Normal file
1140
src/stub/armel-linux.kernel.vmlinuz.h
Normal file
File diff suppressed because it is too large
Load Diff
283
src/stub/tmp/armel-linux.kernel.vmlinuz.bin.dump
Normal file
283
src/stub/tmp/armel-linux.kernel.vmlinuz.bin.dump
Normal file
@ -0,0 +1,283 @@
|
||||
file format elf32-littlearm
|
||||
|
||||
Sections:
|
||||
Idx Name Size VMA LMA File off Algn Flags
|
||||
0 LINUZVGA 00000000 00000000 00000000 00000034 2**0 CONTENTS, READONLY
|
||||
1 LINUZ000 00000004 00000000 00000000 00000034 2**0 CONTENTS, READONLY
|
||||
2 LINUZ001 00000004 00000000 00000000 00000038 2**0 CONTENTS, READONLY
|
||||
3 LINUZ005 00000004 00000000 00000000 0000003c 2**0 CONTENTS, READONLY
|
||||
4 LINUZ010 00000004 00000000 00000000 00000040 2**0 CONTENTS, READONLY
|
||||
5 LINUZ101 00000004 00000000 00000000 00000044 2**0 CONTENTS, READONLY
|
||||
6 LINUZ110 00000004 00000000 00000000 00000048 2**0 CONTENTS, READONLY
|
||||
7 LINUZ120 00000004 00000000 00000000 0000004c 2**0 CONTENTS, READONLY
|
||||
8 LINUZ130 00000004 00000000 00000000 00000050 2**0 CONTENTS, READONLY
|
||||
9 LINUZ140 00000004 00000000 00000000 00000054 2**0 CONTENTS, READONLY
|
||||
10 LINUZ141 00000004 00000000 00000000 00000058 2**0 CONTENTS, READONLY
|
||||
11 LINUZ145 00000004 00000000 00000000 0000005c 2**0 CONTENTS, READONLY
|
||||
12 LINUZ150 00000004 00000000 00000000 00000060 2**0 CONTENTS, READONLY
|
||||
13 LZCALLT1 00000004 00000000 00000000 00000064 2**0 CONTENTS, READONLY
|
||||
14 LZCKLLT1 00000004 00000000 00000000 00000068 2**0 CONTENTS, READONLY
|
||||
15 LZIMAGE0 00000004 00000000 00000000 0000006c 2**0 CONTENTS, READONLY
|
||||
16 LZCUTPOI 000002dc 00000000 00000000 00000070 2**0 CONTENTS, RELOC, READONLY
|
||||
17 LZMA_ELF00 0000008c 00000000 00000000 0000034c 2**0 CONTENTS, RELOC, READONLY
|
||||
18 LZMA_DEC10 00000938 00000000 00000000 000003d8 2**0 CONTENTS, RELOC, READONLY
|
||||
19 LZMA_DEC20 00000938 00000000 00000000 00000d10 2**0 CONTENTS, RELOC, READONLY
|
||||
20 LZMA_DEC30 00000000 00000000 00000000 00001648 2**0 CONTENTS, READONLY
|
||||
21 ctok32.00 00000004 00000000 00000000 00001648 2**0 CONTENTS, READONLY
|
||||
22 ctok32.50 00000004 00000000 00000000 0000164c 2**0 CONTENTS, READONLY
|
||||
23 ctok32.51 00000004 00000000 00000000 00001650 2**0 CONTENTS, READONLY
|
||||
24 ctok32.10 00000044 00000000 00000000 00001654 2**0 CONTENTS, RELOC, READONLY
|
||||
25 UPX1HEAD 00000020 00000000 00000000 00001698 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
00000000 l d LZCUTPOI 00000000 LZCUTPOI
|
||||
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 ctok32.10 00000000 ctok32.10
|
||||
00000000 l d LINUZVGA 00000000 LINUZVGA
|
||||
00000000 l d LINUZ000 00000000 LINUZ000
|
||||
00000000 l d LINUZ001 00000000 LINUZ001
|
||||
00000000 l d LINUZ005 00000000 LINUZ005
|
||||
00000000 l d LINUZ010 00000000 LINUZ010
|
||||
00000000 l d LINUZ101 00000000 LINUZ101
|
||||
00000000 l d LINUZ110 00000000 LINUZ110
|
||||
00000000 l d LINUZ120 00000000 LINUZ120
|
||||
00000000 l d LINUZ130 00000000 LINUZ130
|
||||
00000000 l d LINUZ140 00000000 LINUZ140
|
||||
00000000 l d LINUZ141 00000000 LINUZ141
|
||||
00000000 l d LINUZ145 00000000 LINUZ145
|
||||
00000000 l d LINUZ150 00000000 LINUZ150
|
||||
00000000 l d LZCALLT1 00000000 LZCALLT1
|
||||
00000000 l d LZCKLLT1 00000000 LZCKLLT1
|
||||
00000000 l d LZIMAGE0 00000000 LZIMAGE0
|
||||
00000000 l d ctok32.00 00000000 ctok32.00
|
||||
00000000 l d ctok32.50 00000000 ctok32.50
|
||||
00000000 l d ctok32.51 00000000 ctok32.51
|
||||
00000000 l d UPX1HEAD 00000000 UPX1HEAD
|
||||
00000004 g F LZCUTPOI 000000c4 ucl_nrv2b_decompress_8
|
||||
000000c8 g F LZCUTPOI 00000100 ucl_nrv2d_decompress_8
|
||||
000001c8 g F LZCUTPOI 00000114 ucl_nrv2e_decompress_8
|
||||
|
||||
RELOCATION RECORDS FOR [LZCUTPOI]:
|
||||
OFFSET TYPE VALUE
|
||||
00000014 R_ARM_PC24 LZCUTPOI
|
||||
0000004c R_ARM_PC24 LZCUTPOI
|
||||
00000054 R_ARM_PC24 LZCUTPOI
|
||||
00000058 R_ARM_PC24 LZCUTPOI
|
||||
00000068 R_ARM_PC24 LZCUTPOI
|
||||
0000006c R_ARM_PC24 LZCUTPOI
|
||||
00000070 R_ARM_PC24 LZCUTPOI
|
||||
0000007c R_ARM_PC24 LZCUTPOI
|
||||
0000008c R_ARM_PC24 LZCUTPOI
|
||||
00000090 R_ARM_PC24 LZCUTPOI
|
||||
00000098 R_ARM_PC24 LZCUTPOI
|
||||
000000a0 R_ARM_PC24 LZCUTPOI
|
||||
000000a4 R_ARM_PC24 LZCUTPOI
|
||||
000000c0 R_ARM_PC24 LZCUTPOI
|
||||
000000c4 R_ARM_PC24 LZCUTPOI
|
||||
000000d8 R_ARM_PC24 LZCUTPOI
|
||||
0000010c R_ARM_PC24 LZCUTPOI
|
||||
00000110 R_ARM_PC24 LZCUTPOI
|
||||
00000118 R_ARM_PC24 LZCUTPOI
|
||||
00000124 R_ARM_PC24 LZCUTPOI
|
||||
00000130 R_ARM_PC24 LZCUTPOI
|
||||
0000013c R_ARM_PC24 LZCUTPOI
|
||||
00000140 R_ARM_PC24 LZCUTPOI
|
||||
0000014c R_ARM_PC24 LZCUTPOI
|
||||
0000015c R_ARM_PC24 LZCUTPOI
|
||||
00000164 R_ARM_PC24 LZCUTPOI
|
||||
0000016c R_ARM_PC24 LZCUTPOI
|
||||
00000178 R_ARM_PC24 LZCUTPOI
|
||||
00000180 R_ARM_PC24 LZCUTPOI
|
||||
0000018c R_ARM_PC24 LZCUTPOI
|
||||
00000198 R_ARM_PC24 LZCUTPOI
|
||||
0000019c R_ARM_PC24 LZCUTPOI
|
||||
000001c0 R_ARM_PC24 LZCUTPOI
|
||||
000001c4 R_ARM_PC24 LZCUTPOI
|
||||
000001d8 R_ARM_PC24 LZCUTPOI
|
||||
0000020c R_ARM_PC24 LZCUTPOI
|
||||
00000210 R_ARM_PC24 LZCUTPOI
|
||||
00000218 R_ARM_PC24 LZCUTPOI
|
||||
00000224 R_ARM_PC24 LZCUTPOI
|
||||
00000230 R_ARM_PC24 LZCUTPOI
|
||||
0000023c R_ARM_PC24 LZCUTPOI
|
||||
00000240 R_ARM_PC24 LZCUTPOI
|
||||
0000024c R_ARM_PC24 LZCUTPOI
|
||||
0000025c R_ARM_PC24 LZCUTPOI
|
||||
00000264 R_ARM_PC24 LZCUTPOI
|
||||
00000268 R_ARM_PC24 LZCUTPOI
|
||||
00000270 R_ARM_PC24 LZCUTPOI
|
||||
00000274 R_ARM_PC24 LZCUTPOI
|
||||
00000280 R_ARM_PC24 LZCUTPOI
|
||||
00000284 R_ARM_PC24 LZCUTPOI
|
||||
0000028c R_ARM_PC24 LZCUTPOI
|
||||
00000298 R_ARM_PC24 LZCUTPOI
|
||||
0000029c R_ARM_PC24 LZCUTPOI
|
||||
000002a4 R_ARM_PC24 LZCUTPOI
|
||||
000002ac R_ARM_PC24 LZCUTPOI
|
||||
000002d4 R_ARM_PC24 LZCUTPOI
|
||||
000002d8 R_ARM_PC24 LZCUTPOI
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
00000008 R_ARM_PC24 LZMA_DEC30
|
||||
0000004c R_ARM_PC24 LZMA_ELF00
|
||||
00000080 R_ARM_PC24 LZMA_ELF00
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_DEC10]:
|
||||
OFFSET TYPE VALUE
|
||||
00000074 R_ARM_PC24 LZMA_DEC10
|
||||
00000090 R_ARM_PC24 LZMA_DEC10
|
||||
000000b8 R_ARM_PC24 LZMA_DEC10
|
||||
000000cc R_ARM_PC24 LZMA_DEC10
|
||||
000000f4 R_ARM_PC24 LZMA_DEC10
|
||||
00000100 R_ARM_PC24 LZMA_DEC10
|
||||
00000108 R_ARM_PC24 LZMA_DEC10
|
||||
00000144 R_ARM_PC24 LZMA_DEC10
|
||||
00000190 R_ARM_PC24 LZMA_DEC10
|
||||
000001cc R_ARM_PC24 LZMA_DEC10
|
||||
000001d8 R_ARM_PC24 LZMA_DEC10
|
||||
00000204 R_ARM_PC24 LZMA_DEC10
|
||||
00000218 R_ARM_PC24 LZMA_DEC10
|
||||
00000220 R_ARM_PC24 LZMA_DEC10
|
||||
00000234 R_ARM_PC24 LZMA_DEC10
|
||||
0000023c R_ARM_PC24 LZMA_DEC10
|
||||
00000240 R_ARM_PC24 LZMA_DEC10
|
||||
0000024c R_ARM_PC24 LZMA_DEC10
|
||||
00000258 R_ARM_PC24 LZMA_DEC10
|
||||
000002a4 R_ARM_PC24 LZMA_DEC10
|
||||
000002c8 R_ARM_PC24 LZMA_DEC10
|
||||
000002e8 R_ARM_PC24 LZMA_DEC10
|
||||
00000304 R_ARM_PC24 LZMA_DEC10
|
||||
0000030c R_ARM_PC24 LZMA_DEC10
|
||||
0000033c R_ARM_PC24 LZMA_DEC10
|
||||
00000388 R_ARM_PC24 LZMA_DEC10
|
||||
000003a0 R_ARM_PC24 LZMA_DEC10
|
||||
000003a8 R_ARM_PC24 LZMA_DEC10
|
||||
000003cc R_ARM_PC24 LZMA_DEC10
|
||||
000003e0 R_ARM_PC24 LZMA_DEC10
|
||||
000003e8 R_ARM_PC24 LZMA_DEC10
|
||||
00000424 R_ARM_PC24 LZMA_DEC10
|
||||
00000438 R_ARM_PC24 LZMA_DEC10
|
||||
0000046c R_ARM_PC24 LZMA_DEC10
|
||||
00000484 R_ARM_PC24 LZMA_DEC10
|
||||
0000048c R_ARM_PC24 LZMA_DEC10
|
||||
000004b0 R_ARM_PC24 LZMA_DEC10
|
||||
000004d4 R_ARM_PC24 LZMA_DEC10
|
||||
000004ec R_ARM_PC24 LZMA_DEC10
|
||||
000004f4 R_ARM_PC24 LZMA_DEC10
|
||||
00000518 R_ARM_PC24 LZMA_DEC10
|
||||
0000053c R_ARM_PC24 LZMA_DEC10
|
||||
00000598 R_ARM_PC24 LZMA_DEC10
|
||||
000005a0 R_ARM_PC24 LZMA_DEC10
|
||||
000005c0 R_ARM_PC24 LZMA_DEC10
|
||||
000005e4 R_ARM_PC24 LZMA_DEC10
|
||||
000005fc R_ARM_PC24 LZMA_DEC10
|
||||
00000604 R_ARM_PC24 LZMA_DEC10
|
||||
00000624 R_ARM_PC24 LZMA_DEC10
|
||||
00000648 R_ARM_PC24 LZMA_DEC10
|
||||
00000680 R_ARM_PC24 LZMA_DEC10
|
||||
0000068c R_ARM_PC24 LZMA_DEC10
|
||||
000006d0 R_ARM_PC24 LZMA_DEC10
|
||||
000006ec R_ARM_PC24 LZMA_DEC10
|
||||
0000071c R_ARM_PC24 LZMA_DEC10
|
||||
00000728 R_ARM_PC24 LZMA_DEC10
|
||||
0000076c R_ARM_PC24 LZMA_DEC10
|
||||
0000077c R_ARM_PC24 LZMA_DEC10
|
||||
0000079c R_ARM_PC24 LZMA_DEC10
|
||||
000007b8 R_ARM_PC24 LZMA_DEC10
|
||||
000007c4 R_ARM_PC24 LZMA_DEC10
|
||||
000007d0 R_ARM_PC24 LZMA_DEC10
|
||||
000007f4 R_ARM_PC24 LZMA_DEC10
|
||||
00000820 R_ARM_PC24 LZMA_DEC10
|
||||
0000082c R_ARM_PC24 LZMA_DEC10
|
||||
0000087c R_ARM_PC24 LZMA_DEC10
|
||||
00000888 R_ARM_PC24 LZMA_DEC10
|
||||
000008a0 R_ARM_PC24 LZMA_DEC10
|
||||
000008e8 R_ARM_PC24 LZMA_DEC10
|
||||
000008f4 R_ARM_PC24 LZMA_DEC10
|
||||
000008fc R_ARM_PC24 LZMA_DEC10
|
||||
00000904 R_ARM_PC24 LZMA_DEC10
|
||||
00000928 R_ARM_PC24 LZMA_DEC10
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_DEC20]:
|
||||
OFFSET TYPE VALUE
|
||||
00000074 R_ARM_PC24 LZMA_DEC20
|
||||
00000090 R_ARM_PC24 LZMA_DEC20
|
||||
000000b8 R_ARM_PC24 LZMA_DEC20
|
||||
000000cc R_ARM_PC24 LZMA_DEC20
|
||||
000000f4 R_ARM_PC24 LZMA_DEC20
|
||||
00000100 R_ARM_PC24 LZMA_DEC20
|
||||
00000108 R_ARM_PC24 LZMA_DEC20
|
||||
00000144 R_ARM_PC24 LZMA_DEC20
|
||||
00000190 R_ARM_PC24 LZMA_DEC20
|
||||
000001cc R_ARM_PC24 LZMA_DEC20
|
||||
000001d8 R_ARM_PC24 LZMA_DEC20
|
||||
00000204 R_ARM_PC24 LZMA_DEC20
|
||||
00000218 R_ARM_PC24 LZMA_DEC20
|
||||
00000220 R_ARM_PC24 LZMA_DEC20
|
||||
00000234 R_ARM_PC24 LZMA_DEC20
|
||||
0000023c R_ARM_PC24 LZMA_DEC20
|
||||
00000240 R_ARM_PC24 LZMA_DEC20
|
||||
0000024c R_ARM_PC24 LZMA_DEC20
|
||||
00000258 R_ARM_PC24 LZMA_DEC20
|
||||
000002a4 R_ARM_PC24 LZMA_DEC20
|
||||
000002c8 R_ARM_PC24 LZMA_DEC20
|
||||
000002e8 R_ARM_PC24 LZMA_DEC20
|
||||
00000304 R_ARM_PC24 LZMA_DEC20
|
||||
0000030c R_ARM_PC24 LZMA_DEC20
|
||||
0000033c R_ARM_PC24 LZMA_DEC20
|
||||
00000388 R_ARM_PC24 LZMA_DEC20
|
||||
000003a0 R_ARM_PC24 LZMA_DEC20
|
||||
000003a8 R_ARM_PC24 LZMA_DEC20
|
||||
000003cc R_ARM_PC24 LZMA_DEC20
|
||||
000003e0 R_ARM_PC24 LZMA_DEC20
|
||||
000003e8 R_ARM_PC24 LZMA_DEC20
|
||||
00000424 R_ARM_PC24 LZMA_DEC20
|
||||
00000438 R_ARM_PC24 LZMA_DEC20
|
||||
0000046c R_ARM_PC24 LZMA_DEC20
|
||||
00000484 R_ARM_PC24 LZMA_DEC20
|
||||
0000048c R_ARM_PC24 LZMA_DEC20
|
||||
000004b0 R_ARM_PC24 LZMA_DEC20
|
||||
000004d4 R_ARM_PC24 LZMA_DEC20
|
||||
000004ec R_ARM_PC24 LZMA_DEC20
|
||||
000004f4 R_ARM_PC24 LZMA_DEC20
|
||||
00000518 R_ARM_PC24 LZMA_DEC20
|
||||
0000053c R_ARM_PC24 LZMA_DEC20
|
||||
00000598 R_ARM_PC24 LZMA_DEC20
|
||||
000005a0 R_ARM_PC24 LZMA_DEC20
|
||||
000005c0 R_ARM_PC24 LZMA_DEC20
|
||||
000005e4 R_ARM_PC24 LZMA_DEC20
|
||||
000005fc R_ARM_PC24 LZMA_DEC20
|
||||
00000604 R_ARM_PC24 LZMA_DEC20
|
||||
00000624 R_ARM_PC24 LZMA_DEC20
|
||||
00000648 R_ARM_PC24 LZMA_DEC20
|
||||
00000680 R_ARM_PC24 LZMA_DEC20
|
||||
0000068c R_ARM_PC24 LZMA_DEC20
|
||||
000006d0 R_ARM_PC24 LZMA_DEC20
|
||||
000006ec R_ARM_PC24 LZMA_DEC20
|
||||
0000071c R_ARM_PC24 LZMA_DEC20
|
||||
00000728 R_ARM_PC24 LZMA_DEC20
|
||||
0000076c R_ARM_PC24 LZMA_DEC20
|
||||
0000077c R_ARM_PC24 LZMA_DEC20
|
||||
0000079c R_ARM_PC24 LZMA_DEC20
|
||||
000007b8 R_ARM_PC24 LZMA_DEC20
|
||||
000007c4 R_ARM_PC24 LZMA_DEC20
|
||||
000007d0 R_ARM_PC24 LZMA_DEC20
|
||||
000007f4 R_ARM_PC24 LZMA_DEC20
|
||||
00000820 R_ARM_PC24 LZMA_DEC20
|
||||
0000082c R_ARM_PC24 LZMA_DEC20
|
||||
0000087c R_ARM_PC24 LZMA_DEC20
|
||||
00000888 R_ARM_PC24 LZMA_DEC20
|
||||
000008a0 R_ARM_PC24 LZMA_DEC20
|
||||
000008e8 R_ARM_PC24 LZMA_DEC20
|
||||
000008f4 R_ARM_PC24 LZMA_DEC20
|
||||
000008fc R_ARM_PC24 LZMA_DEC20
|
||||
00000904 R_ARM_PC24 LZMA_DEC20
|
||||
00000928 R_ARM_PC24 LZMA_DEC20
|
||||
|
||||
RELOCATION RECORDS FOR [ctok32.10]:
|
||||
OFFSET TYPE VALUE
|
||||
00000020 R_ARM_PC24 ctok32.10
|
||||
0000003c R_ARM_PC24 ctok32.10
|
||||
Loading…
Reference in New Issue
Block a user