From ea0dfe83b779be34385368f065d3a2b19cc7c7d1 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Thu, 30 Aug 2007 11:53:16 -0700 Subject: [PATCH] arm-linux.elf-entry.S clobbered ADRU with sz_unc of fold --- src/stub/arm-linux.elf-entry.h | 6 +++--- src/stub/armeb-linux.elf-entry.h | 6 +++--- src/stub/src/arm-linux.elf-entry.S | 10 ++++++---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/stub/arm-linux.elf-entry.h b/src/stub/arm-linux.elf-entry.h index e86546d4..752388df 100644 --- a/src/stub/arm-linux.elf-entry.h +++ b/src/stub/arm-linux.elf-entry.h @@ -29,8 +29,8 @@ #define STUB_ARM_LINUX_ELF_ENTRY_SIZE 16296 -#define STUB_ARM_LINUX_ELF_ENTRY_ADLER32 0xdf115bee -#define STUB_ARM_LINUX_ELF_ENTRY_CRC32 0x8704e1a1 +#define STUB_ARM_LINUX_ELF_ENTRY_ADLER32 0xccad5bfe +#define STUB_ARM_LINUX_ELF_ENTRY_CRC32 0x8a797a93 unsigned char stub_arm_linux_elf_entry[16296] = { 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ @@ -46,7 +46,7 @@ unsigned char stub_arm_linux_elf_entry[16296] = { 0, 32,160,227, 2, 0,159,239, 0,144,156,229,140,144, 73,226, /* 0x a0 */ 9,160, 76,224, 4,160,138,224, 8, 0,155,229, 1, 64, 45,233, /* 0x b0 */ 0, 48,155,229, 12, 0,139,226, 4, 16,155,229, 14, 32,160,225, /* 0x c0 */ - 8, 48,141,229, 8, 48,141,226, 15,224,160,225, 5,240,160,225, /* 0x d0 */ + 16, 48,141,229, 16, 48,141,226, 15,224,160,225, 5,240,160,225, /* 0x d0 */ 2,128,189,232,252, 64, 45,233, 0,112,129,224, 0, 80,224,227, /* 0x e0 */ 2, 65,160,227, 20, 0, 0,234, 24, 0,189,232, 7, 0, 64,224, /* 0x f0 */ 3, 32, 66,224, 0, 32,132,229, 0, 64,160,225, 3, 0,160,225, /* 0x 100 */ diff --git a/src/stub/armeb-linux.elf-entry.h b/src/stub/armeb-linux.elf-entry.h index 58b17dff..6245b478 100644 --- a/src/stub/armeb-linux.elf-entry.h +++ b/src/stub/armeb-linux.elf-entry.h @@ -29,8 +29,8 @@ #define STUB_ARMEB_LINUX_ELF_ENTRY_SIZE 16295 -#define STUB_ARMEB_LINUX_ELF_ENTRY_ADLER32 0xcad35b5a -#define STUB_ARMEB_LINUX_ELF_ENTRY_CRC32 0xc07dcf2e +#define STUB_ARMEB_LINUX_ELF_ENTRY_ADLER32 0xb82f5b6a +#define STUB_ARMEB_LINUX_ELF_ENTRY_CRC32 0x9d8ad292 unsigned char stub_armeb_linux_elf_entry[16295] = { 127, 69, 76, 70, 1, 2, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ @@ -46,7 +46,7 @@ unsigned char stub_armeb_linux_elf_entry[16295] = { 227,160, 32, 0,239,159, 0, 2,229,156,144, 0,226, 73,144,140, /* 0x a0 */ 224, 76,160, 9,224,138,160, 4,229,155, 0, 8,233, 45, 64, 1, /* 0x b0 */ 229,155, 48, 0,226,139, 0, 12,229,155, 16, 4,225,160, 32, 14, /* 0x c0 */ -229,141, 48, 8,226,141, 48, 8,225,160,224, 15,225,160,240, 5, /* 0x d0 */ +229,141, 48, 16,226,141, 48, 16,225,160,224, 15,225,160,240, 5, /* 0x d0 */ 232,189,128, 2,233, 45, 64,252,224,129,112, 0,227,224, 80, 0, /* 0x e0 */ 227,160, 65, 2,234, 0, 0, 20,232,189, 0, 24,224, 64, 0, 7, /* 0x f0 */ 224, 66, 32, 3,229,132, 32, 0,225,160, 64, 0,225,160, 0, 3, /* 0x 100 */ diff --git a/src/stub/src/arm-linux.elf-entry.S b/src/stub/src/arm-linux.elf-entry.S index e998ca14..6ba4f15e 100644 --- a/src/stub/src/arm-linux.elf-entry.S +++ b/src/stub/src/arm-linux.elf-entry.S @@ -73,6 +73,7 @@ _start: .globl _start sub r9,r12,r1 // &our_Elf32_Ehdr add r1,r1,# PAGE_SIZE stmdb sp!,{r0,r1,r2} // ADRU,LENU,space for sz_unc +D_sz_unc=2*4 // stack displacement to sz_unc mov r2,#PROT_READ | PROT_WRITE | PROT_EXEC mov r3,#MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS mvn r4,#0 // -1; cater to *BSD for fd when MAP_ANON @@ -104,15 +105,16 @@ copy: add r10,r10,r4 // relocated &b_info ldr r0,[r11,# b_method ] // 5th param (whole word: endian issues!) - stmdb sp!,{r0,lr} + stmdb sp!,{r0, lr} // 5th param, dst for unfolded +D_stm1=2*4 ldr r3,[r11,# sz_unc] add r0, r11,# sz_b_info ldr r1,[r11,# sz_cpr ] mov r2,lr // dst - str r3,[sp,#2*4] // sz_unc; lzma needs for EOF - add r3, sp,#2*4 // &sz_unc + str r3,[sp,#D_stm1 + D_sz_unc] // sz_unc; lzma needs for EOF + add r3, sp,#D_stm1 + D_sz_unc // &sz_unc mov lr,pc; mov pc,r5 // decompress folded code [opcode 'bx' not in v4a] - ldmia sp!,{r1, pc} // discard 5th param; return + ldmia sp!,{r1, pc} // discard 5th param; goto unfolded f_decompress: #define LINUX_ARM_CACHEFLUSH 1