mirror of
https://github.com/upx/upx
synced 2025-10-05 19:20:23 +08:00
--android-shlib for Android "Oreo"
Android "Oreo" wants to deal with ElfXX_Shdr[]. So splice 4KiB into PT_LOAD[0] with an "extra" copy of them. This requires careful relocation processing. It also costs a page at run time. modified: p_elf_enum.h modified: p_lx_elf.cpp modified: stub/src/arm.v4a-linux.shlib-init.S modified: stub/src/arm.v4t-linux.shlib-init.S modified: stub/src/arm64-linux.shlib-init.S
This commit is contained in:
parent
c7969ed5a5
commit
8c84efb8fb
|
@ -148,6 +148,7 @@
|
||||||
DT_NULL = 0, /* End flag */
|
DT_NULL = 0, /* End flag */
|
||||||
DT_NEEDED = 1, /* Name of needed library */
|
DT_NEEDED = 1, /* Name of needed library */
|
||||||
DT_PLTRELSZ = 2, /* Size in bytes of PLT relocs */
|
DT_PLTRELSZ = 2, /* Size in bytes of PLT relocs */
|
||||||
|
DT_PLTGOT = 3, /* Processor defined value */
|
||||||
DT_HASH = 4, /* Hash table of symbol names */
|
DT_HASH = 4, /* Hash table of symbol names */
|
||||||
DT_STRTAB = 5, /* String table */
|
DT_STRTAB = 5, /* String table */
|
||||||
DT_SYMTAB = 6, /* Symbol table */
|
DT_SYMTAB = 6, /* Symbol table */
|
||||||
|
@ -155,6 +156,7 @@
|
||||||
DT_RELASZ = 8, /* Total size of Rela relocs */
|
DT_RELASZ = 8, /* Total size of Rela relocs */
|
||||||
DT_RELAENT = 9, /* Size of one RELA relocation */
|
DT_RELAENT = 9, /* Size of one RELA relocation */
|
||||||
DT_INIT = 12, /* Address of init function */
|
DT_INIT = 12, /* Address of init function */
|
||||||
|
DT_FINI = 13, /* Address of termination function */
|
||||||
DT_REL = 17, /* Relocations which contain no addend */
|
DT_REL = 17, /* Relocations which contain no addend */
|
||||||
DT_RELSZ = 18, /* Total size of Rel relocs */
|
DT_RELSZ = 18, /* Total size of Rel relocs */
|
||||||
DT_RELENT = 19, /* Size of one Rel relocation */
|
DT_RELENT = 19, /* Size of one Rel relocation */
|
||||||
|
@ -214,14 +216,22 @@
|
||||||
|
|
||||||
#ifdef WANT_REL_ENUM //{
|
#ifdef WANT_REL_ENUM //{
|
||||||
static unsigned ELF32_R_TYPE(unsigned x) { return 0xff & x; }
|
static unsigned ELF32_R_TYPE(unsigned x) { return 0xff & x; }
|
||||||
|
static unsigned ELF64_R_TYPE(upx_uint64_t x) { return 0xffffffff & x; }
|
||||||
|
|
||||||
enum { // R_*_RELATIVE relocation types: Adjust by program base
|
enum { // relocation types
|
||||||
R_386_RELATIVE = 8,
|
R_386_RELATIVE = 8,
|
||||||
R_AARCH64_RELATIVE = 1027,
|
R_AARCH64_RELATIVE = 1027,
|
||||||
R_ARM_RELATIVE = 23,
|
R_ARM_RELATIVE = 23,
|
||||||
R_PPC_RELATIVE = 22,
|
R_PPC_RELATIVE = 22,
|
||||||
R_PPC64_RELATIVE = R_PPC_RELATIVE,
|
R_PPC64_RELATIVE = R_PPC_RELATIVE,
|
||||||
R_X86_64_RELATIVE = 8
|
R_X86_64_RELATIVE = 8,
|
||||||
|
|
||||||
|
R_386_JMP_SLOT = 7,
|
||||||
|
R_AARCH64_JUMP_SLOT = 1026,
|
||||||
|
R_ARM_JUMP_SLOT = 22,
|
||||||
|
R_PPC_JMP_SLOT = 21,
|
||||||
|
R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT,
|
||||||
|
R_X86_64_JUMP_SLOT = 7
|
||||||
};
|
};
|
||||||
#endif //}
|
#endif //}
|
||||||
|
|
||||||
|
|
|
@ -2560,9 +2560,11 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/)
|
||||||
Elf32_Dyn *dyn = const_cast<Elf32_Dyn *>(dynseg);
|
Elf32_Dyn *dyn = const_cast<Elf32_Dyn *>(dynseg);
|
||||||
for (; dyn->d_tag; ++dyn) {
|
for (; dyn->d_tag; ++dyn) {
|
||||||
unsigned d_tag = get_te32(&dyn->d_tag);
|
unsigned d_tag = get_te32(&dyn->d_tag);
|
||||||
if (Elf32_Dyn::DT_INIT_ARRAY == d_tag
|
if (Elf32_Dyn::DT_FINI == d_tag
|
||||||
|| Elf32_Dyn::DT_FINI_ARRAY == d_tag
|
|| Elf32_Dyn::DT_FINI_ARRAY == d_tag
|
||||||
|| Elf32_Dyn::DT_PREINIT_ARRAY == d_tag) {
|
|| Elf32_Dyn::DT_INIT_ARRAY == d_tag
|
||||||
|
|| Elf32_Dyn::DT_PREINIT_ARRAY == d_tag
|
||||||
|
|| Elf32_Dyn::DT_PLTGOT == d_tag) {
|
||||||
unsigned d_val = get_te32(&dyn->d_val);
|
unsigned d_val = get_te32(&dyn->d_val);
|
||||||
set_te32(&dyn->d_val, asl_delta + d_val);
|
set_te32(&dyn->d_val, asl_delta + d_val);
|
||||||
}
|
}
|
||||||
|
@ -2646,9 +2648,11 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/)
|
||||||
unsigned d = elf_get_offset_from_address(asl_delta + r_offset);
|
unsigned d = elf_get_offset_from_address(asl_delta + r_offset);
|
||||||
unsigned w = get_te32(&file_image[d]);
|
unsigned w = get_te32(&file_image[d]);
|
||||||
unsigned r_info = get_te32(&rel->r_info);
|
unsigned r_info = get_te32(&rel->r_info);
|
||||||
|
unsigned r_type = ELF32_R_TYPE(r_info);
|
||||||
if (xct_off <= w
|
if (xct_off <= w
|
||||||
&& Elf32_Ehdr::EM_ARM == e_machine
|
&& Elf32_Ehdr::EM_ARM == e_machine
|
||||||
&& R_ARM_RELATIVE == ELF32_R_TYPE(r_info)) {
|
&& ( R_ARM_RELATIVE == r_type
|
||||||
|
|| R_ARM_JUMP_SLOT == r_type)) {
|
||||||
set_te32(&file_image[d], asl_delta + w);
|
set_te32(&file_image[d], asl_delta + w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2862,9 +2866,11 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/)
|
||||||
Elf64_Dyn *dyn = const_cast<Elf64_Dyn *>(dynseg);
|
Elf64_Dyn *dyn = const_cast<Elf64_Dyn *>(dynseg);
|
||||||
for (; dyn->d_tag; ++dyn) {
|
for (; dyn->d_tag; ++dyn) {
|
||||||
uint64_t d_tag = get_te64(&dyn->d_tag);
|
uint64_t d_tag = get_te64(&dyn->d_tag);
|
||||||
if (Elf64_Dyn::DT_INIT_ARRAY == d_tag
|
if (Elf64_Dyn::DT_FINI == d_tag
|
||||||
|| Elf64_Dyn::DT_FINI_ARRAY == d_tag
|
|| Elf64_Dyn::DT_FINI_ARRAY == d_tag
|
||||||
|| Elf64_Dyn::DT_PREINIT_ARRAY == d_tag) {
|
|| Elf64_Dyn::DT_INIT_ARRAY == d_tag
|
||||||
|
|| Elf64_Dyn::DT_PREINIT_ARRAY == d_tag
|
||||||
|
|| Elf64_Dyn::DT_PLTGOT == d_tag) {
|
||||||
uint64_t d_val = get_te64(&dyn->d_val);
|
uint64_t d_val = get_te64(&dyn->d_val);
|
||||||
set_te64(&dyn->d_val, asl_delta + d_val);
|
set_te64(&dyn->d_val, asl_delta + d_val);
|
||||||
}
|
}
|
||||||
|
@ -2944,6 +2950,17 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/)
|
||||||
if (xct_off <= r_offset) {
|
if (xct_off <= r_offset) {
|
||||||
set_te64(&rel->r_offset, asl_delta + r_offset);
|
set_te64(&rel->r_offset, asl_delta + r_offset);
|
||||||
}
|
}
|
||||||
|
// r_offset must be in 2nd PT_LOAD; .p_vaddr was already relocated
|
||||||
|
upx_uint64_t d = elf_get_offset_from_address(asl_delta + r_offset);
|
||||||
|
upx_uint64_t w = get_te64(&file_image[d]);
|
||||||
|
upx_uint64_t r_info = get_te32(&rel->r_info);
|
||||||
|
unsigned r_type = ELF64_R_TYPE(r_info);
|
||||||
|
if (xct_off <= w
|
||||||
|
&& Elf64_Ehdr::EM_AARCH64 == e_machine
|
||||||
|
&& ( R_AARCH64_RELATIVE == r_type
|
||||||
|
|| R_AARCH64_JUMP_SLOT == r_type)) {
|
||||||
|
set_te64(&file_image[d], asl_delta + w);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fo->seek(sh_offset, SEEK_SET);
|
fo->seek(sh_offset, SEEK_SET);
|
||||||
fo->rewrite(sh_offset + file_image, sh_size);
|
fo->rewrite(sh_offset + file_image, sh_size);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -32,14 +32,14 @@
|
||||||
|
|
||||||
|
|
||||||
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_SIZE 15566
|
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_SIZE 15566
|
||||||
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0xf865201e
|
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_ADLER32 0x0d0d1f66
|
||||||
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0xc1cd6d32
|
#define STUB_ARM_V5T_LINUX_SHLIB_INIT_CRC32 0x43a6af0c
|
||||||
|
|
||||||
unsigned char stub_arm_v5t_linux_shlib_init[15566] = {
|
unsigned char stub_arm_v5t_linux_shlib_init[15566] = {
|
||||||
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0,
|
/* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
/* 0x0010 */ 1, 0, 40, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
/* 0x0010 */ 1, 0, 40, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
/* 0x0020 */ 236, 20, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
|
/* 0x0020 */ 236, 20, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 40, 0,
|
||||||
/* 0x0030 */ 0, 0, 0, 0, 1,222,255,181, 0,161, 28, 57, 11,104, 13, 29,
|
/* 0x0030 */ 0, 0, 0, 0,192, 70,255,181, 0,161, 28, 57, 11,104, 13, 29,
|
||||||
/* 0x0040 */ 76,104, 45, 27,140,104,100, 25, 8,148, 8,105, 64, 25, 89, 25,
|
/* 0x0040 */ 76,104, 45, 27,140,104,100, 25, 8,148, 8,105, 64, 25, 89, 25,
|
||||||
/* 0x0050 */ 131,176, 0,181, 76,104, 12, 49, 9, 25, 0,240,166,248, 3, 5,
|
/* 0x0050 */ 131,176, 0,181, 76,104, 12, 49, 9, 25, 0,240,166,248, 3, 5,
|
||||||
/* 0x0060 */ 27, 13,228, 24, 16,180,192, 26, 1,180,228, 26,192, 24,155, 8,
|
/* 0x0060 */ 27, 13,228, 24, 16,180,192, 26, 1,180,228, 26,192, 24,155, 8,
|
||||||
|
@ -344,7 +344,7 @@ unsigned char stub_arm_v5t_linux_shlib_init[15566] = {
|
||||||
/* 0x1310 */ 0,240, 85,248, 31,188,160, 71, 8,188, 3,188, 1, 35, 3,180,
|
/* 0x1310 */ 0,240, 85,248, 31,188,160, 71, 8,188, 3,188, 1, 35, 3,180,
|
||||||
/* 0x1320 */ 64, 24, 1, 48,152, 67, 10, 75, 3, 96, 1, 48, 11,144, 63,188,
|
/* 0x1320 */ 64, 24, 1, 48,152, 67, 10, 75, 3, 96, 1, 48, 11,144, 63,188,
|
||||||
/* 0x1330 */ 27, 66, 0,208,160, 71, 0,152, 1,153, 9, 24, 0,240,106,248,
|
/* 0x1330 */ 27, 66, 0,208,160, 71, 0,152, 1,153, 9, 24, 0,240,106,248,
|
||||||
/* 0x1340 */ 11,188,158, 70, 5, 34,125, 39, 0,223, 91, 39, 1,222, 3,189,
|
/* 0x1340 */ 11,188,158, 70, 5, 34,125, 39, 0,223, 91, 39, 3,189, 0, 0,
|
||||||
/* 0x1350 */ 0,223,255,189,137, 8,137, 0, 0,181, 11, 28, 0,240,178,248,
|
/* 0x1350 */ 0,223,255,189,137, 8,137, 0, 0,181, 11, 28, 0,240,178,248,
|
||||||
/* 0x1360 */ 8,188,158, 70, 11,104, 4, 49, 3, 96, 4, 48, 1, 61, 7, 35,
|
/* 0x1360 */ 8,188,158, 70, 11,104, 4, 49, 3, 96, 4, 48, 1, 61, 7, 35,
|
||||||
/* 0x1370 */ 29, 66,247,209,237, 8, 13,208,120, 71,192, 70,212, 3, 45,233,
|
/* 0x1370 */ 29, 66,247,209,237, 8, 13,208,120, 71,192, 70,212, 3, 45,233,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -79,14 +79,14 @@ __ARM_NR_cacheflush = 2 + __ARM_NR_BASE
|
||||||
#define ecx r5
|
#define ecx r5
|
||||||
|
|
||||||
section ELFMAINX
|
section ELFMAINX
|
||||||
// .long distance back to first b_info
|
// .long offset(b_info) src of f_exp
|
||||||
// .long offset(.) // detect relocation
|
// .long offset(.) // detect relocation
|
||||||
// .long offset(user DT_INIT)
|
// .long offset(user DT_INIT)
|
||||||
// .long offset(escape_hatch)
|
// .long offset(escape_hatch)
|
||||||
// .long offset(xct_off) dst of f_exp
|
// .long offset(xct_off) dst of f_exp
|
||||||
|
|
||||||
_start: .globl _start
|
_start: .globl _start
|
||||||
bkpt // nop //; bkpt // for debugging
|
nop //; bkpt // for debugging
|
||||||
stmdb sp!,{arg1,arg2,arg3, eax,ecx,r6,r7, fp,lr,pc}
|
stmdb sp!,{arg1,arg2,arg3, eax,ecx,r6,r7, fp,lr,pc}
|
||||||
mov fp,sp
|
mov fp,sp
|
||||||
o_uinit= (3+4+2)*4 // pc
|
o_uinit= (3+4+2)*4 // pc
|
||||||
|
@ -295,7 +295,6 @@ supervise:
|
||||||
bl movsl
|
bl movsl
|
||||||
|
|
||||||
ldmia sp!,{arg1,arg2,arg3,arg4, eax}
|
ldmia sp!,{arg1,arg2,arg3,arg4, eax}
|
||||||
bkpt
|
|
||||||
blx eax // decompress
|
blx eax // decompress
|
||||||
add sp,sp,#4 // toss arg5
|
add sp,sp,#4 // toss arg5
|
||||||
|
|
||||||
|
@ -343,7 +342,6 @@ L620: // Implant escape hatch at end of .text
|
||||||
add r7,r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
|
add r7,r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
|
||||||
.endif
|
.endif
|
||||||
#endif //}
|
#endif //}
|
||||||
bkpt
|
|
||||||
ldmia sp!,{arg1,arg2, pc} // goto hatch
|
ldmia sp!,{arg1,arg2, pc} // goto hatch
|
||||||
|
|
||||||
movsl_subr:
|
movsl_subr:
|
||||||
|
|
|
@ -112,14 +112,14 @@ _=-1+_ // one less word on stack
|
||||||
#define lodslu bl get4u
|
#define lodslu bl get4u
|
||||||
|
|
||||||
section ELFMAINX
|
section ELFMAINX
|
||||||
// .long offset(b_info)
|
// .long offset(b_info) src for f_exp
|
||||||
//D_INFO:
|
//D_INFO:
|
||||||
// .long offset(.) // detect relocation
|
// .long offset(.) // detect relocation
|
||||||
// .long offset(user DT_INIT)
|
// .long offset(user DT_INIT)
|
||||||
// .long offset(escape_hatch) // override with round_up(2, PT_LOAD[0]{.p_memsz + .p_vaddr})
|
// .long offset(escape_hatch) // override with round_up(2, PT_LOAD[0]{.p_memsz + .p_vaddr})
|
||||||
// .long offset(dst for f_exp)
|
// .long offset(dst for f_exp)
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG 0
|
||||||
.code 16 //; .balign 4
|
.code 16 //; .balign 4
|
||||||
.real_start_ofELFMAINX:
|
.real_start_ofELFMAINX:
|
||||||
.thumb_func
|
.thumb_func
|
||||||
|
@ -133,7 +133,7 @@ _start: .globl _start
|
||||||
_=9
|
_=9
|
||||||
o_uinit= 1 // lr
|
o_uinit= 1 // lr
|
||||||
adr esi,here
|
adr esi,here
|
||||||
sub esi,#4*2 + 5*NBPW // -NBPW + &D_INFO
|
sub esi,#(here - _start) + 5*NBPW // -NBPW + &D_INFO
|
||||||
here:
|
here:
|
||||||
ldr tmp,[esi,#0*NBPW] // offset(b_info)
|
ldr tmp,[esi,#0*NBPW] // offset(b_info)
|
||||||
add ecx,esi,#NBPW // &D_INFO
|
add ecx,esi,#NBPW // &D_INFO
|
||||||
|
@ -141,7 +141,7 @@ here:
|
||||||
// reloc DT_INIT for step 12
|
// reloc DT_INIT for step 12
|
||||||
ldr eax,[esi,#2*NBPW]; add eax,ecx; str eax,[SP(o_uinit)]
|
ldr eax,[esi,#2*NBPW]; add eax,ecx; str eax,[SP(o_uinit)]
|
||||||
ldr edi,[esi,#4*NBPW]; add edi,ecx // dst for f_exp
|
ldr edi,[esi,#4*NBPW]; add edi,ecx // dst for f_exp
|
||||||
add esi,tmp,ecx // &b_info
|
add esi,tmp,ecx // &b_info src for f_exp
|
||||||
|
|
||||||
sub sp,#3*NBPW // 3 slots of space
|
sub sp,#3*NBPW // 3 slots of space
|
||||||
_=1+_ // &escape_hatch (step 10)
|
_=1+_ // &escape_hatch (step 10)
|
||||||
|
@ -369,7 +369,6 @@ _=-3+_ // 12
|
||||||
lsl r7,#16
|
lsl r7,#16
|
||||||
add r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
|
add r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
|
||||||
.endif
|
.endif
|
||||||
bkpt_th
|
|
||||||
pop {arg1,arg2, pc} // goto hatch
|
pop {arg1,arg2, pc} // goto hatch
|
||||||
_=-3+_ // 9
|
_=-3+_ // 9
|
||||||
.balign 4
|
.balign 4
|
||||||
|
|
|
@ -120,13 +120,13 @@ sp_frame = 24 * NBPW
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
section ELFMAINX
|
section ELFMAINX
|
||||||
// .long distance back to first b_info
|
// .long offset(b_info) src of f_exp
|
||||||
// .long offset(.) // detect relocation
|
// .long offset(.) // detect relocation
|
||||||
// .long offset(user DT_INIT)
|
// .long offset(user DT_INIT)
|
||||||
// .long offset(escape_hatch)
|
// .long offset(escape_hatch)
|
||||||
// .long offset(xct_off) dst of f_exp
|
// .long offset(xct_off) dst of f_exp
|
||||||
_start: .globl _start
|
_start: .globl _start
|
||||||
brk #0 // debugging
|
// brk #0 // debugging
|
||||||
|
|
||||||
slot f_argc // 0
|
slot f_argc // 0
|
||||||
slot f_argv // 1
|
slot f_argv // 1
|
||||||
|
@ -219,15 +219,14 @@ main:
|
||||||
#define lodsl ldr eax,[rsi],#4
|
#define lodsl ldr eax,[rsi],#4
|
||||||
#define lodslu lodsl
|
#define lodslu lodsl
|
||||||
|
|
||||||
lodsl; mov tmp,eax // distance back to 1st b_info
|
lodsl; mov tmp,eax // offset(b_info)
|
||||||
mov rcx,rsi
|
mov rcx,rsi
|
||||||
lodsl; sub rcx,rcx,rax; //str ecx,[sp,#o_reloc]
|
lodsl; sub rcx,rcx,rax; //str ecx,[sp,#o_reloc]
|
||||||
sub tmpx,rsi,tmpx // &b_info
|
lodsl; add rax,rax,rcx; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12
|
||||||
lodsl; add rax,rcx,rax; str rax,[sp,#f_uinit] // reloc DT_INIT for step 12
|
|
||||||
slot o_hatch // 6
|
slot o_hatch // 6
|
||||||
lodsl; add rax,rcx,rax; str rax,[sp,#o_hatch] // reloc &hatch for step 10
|
lodsl; add rax,rax,rcx; str rax,[sp,#o_hatch] // reloc &hatch for step 10
|
||||||
lodsl; add rdi,rcx,rax // destination for decompress
|
lodsl; add rdi,rax,rcx // destination for decompress
|
||||||
mov rsi,tmpx // &b_info
|
add rsi,tmpx,rcx // &b_info src for f_exp
|
||||||
|
|
||||||
slot p_unmap,2 // 7
|
slot p_unmap,2 // 7
|
||||||
|
|
||||||
|
@ -321,7 +320,6 @@ supervise:
|
||||||
ldr rax,[sp,#o_uncpr]
|
ldr rax,[sp,#o_uncpr]
|
||||||
ldp arg1,arg2,[sp,#0*NBPW + p_uncpr]
|
ldp arg1,arg2,[sp,#0*NBPW + p_uncpr]
|
||||||
ldp arg3,arg4,[sp,#2*NBPW + p_uncpr]
|
ldp arg3,arg4,[sp,#2*NBPW + p_uncpr]
|
||||||
brk #0
|
|
||||||
blr rax // decompress
|
blr rax // decompress
|
||||||
|
|
||||||
bl L620
|
bl L620
|
||||||
|
@ -353,7 +351,6 @@ L620: // Implant escape hatch at end of .text
|
||||||
ldp arg1,arg2,[sp,#0*NBPW + p_unmap]
|
ldp arg1,arg2,[sp,#0*NBPW + p_unmap]
|
||||||
mov w8,#__NR_munmap
|
mov w8,#__NR_munmap
|
||||||
ldp arg3,arg4,[sp,#2*NBPW + f_argc] // f_uinit
|
ldp arg3,arg4,[sp,#2*NBPW + f_argc] // f_uinit
|
||||||
brk #0
|
|
||||||
br arg5 // goto hatch
|
br arg5 // goto hatch
|
||||||
|
|
||||||
movsl_subr:
|
movsl_subr:
|
||||||
|
|
|
@ -13,7 +13,7 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||||
8 LZMA_DEC10 00000478 00000000 00000000 00000d84 2**0 CONTENTS, RELOC, READONLY
|
8 LZMA_DEC10 00000478 00000000 00000000 00000d84 2**0 CONTENTS, RELOC, READONLY
|
||||||
9 LZMA_DEC30 00000000 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
|
9 LZMA_DEC30 00000000 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
|
||||||
10 ELFMAINY 0000003e 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
|
10 ELFMAINY 0000003e 00000000 00000000 000011fc 2**0 CONTENTS, READONLY
|
||||||
11 ELFMAINZ 00000310 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY
|
11 ELFMAINZ 00000308 00000000 00000000 0000123a 2**0 CONTENTS, RELOC, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d NRV2E 00000000 NRV2E
|
00000000 l d NRV2E 00000000 NRV2E
|
||||||
00000000 l d NRV2D 00000000 NRV2D
|
00000000 l d NRV2D 00000000 NRV2D
|
||||||
|
@ -256,15 +256,15 @@ OFFSET TYPE VALUE
|
||||||
00000134 R_ARM_PC24 ELFMAINZ
|
00000134 R_ARM_PC24 ELFMAINZ
|
||||||
0000015c R_ARM_PC24 ELFMAINZ
|
0000015c R_ARM_PC24 ELFMAINZ
|
||||||
0000016c R_ARM_PC24 ELFMAINZ
|
0000016c R_ARM_PC24 ELFMAINZ
|
||||||
00000180 R_ARM_PC24 ELFMAINZ
|
0000017c R_ARM_PC24 ELFMAINZ
|
||||||
000001a0 R_ARM_PC24 ELFMAINZ
|
0000019c R_ARM_PC24 ELFMAINZ
|
||||||
|
000001f8 R_ARM_PC24 ELFMAINZ
|
||||||
00000200 R_ARM_PC24 ELFMAINZ
|
00000200 R_ARM_PC24 ELFMAINZ
|
||||||
00000208 R_ARM_PC24 ELFMAINZ
|
00000214 R_ARM_PC24 ELFMAINZ
|
||||||
0000021c R_ARM_PC24 ELFMAINZ
|
00000228 R_ARM_PC24 ELFMAINZ
|
||||||
00000230 R_ARM_PC24 ELFMAINZ
|
00000250 R_ARM_PC24 ELFMAINZ
|
||||||
00000258 R_ARM_PC24 ELFMAINZ
|
00000264 R_ARM_PC24 ELFMAINZ
|
||||||
0000026c R_ARM_PC24 ELFMAINZ
|
0000028c R_ARM_PC24 ELFMAINZ
|
||||||
00000294 R_ARM_PC24 ELFMAINZ
|
0000029c R_ARM_PC24 ELFMAINZ
|
||||||
000002a4 R_ARM_PC24 ELFMAINZ
|
000002a8 R_ARM_PC24 ELFMAINZ
|
||||||
000002b0 R_ARM_PC24 ELFMAINZ
|
000002b4 R_ARM_PC24 ELFMAINZ
|
||||||
000002bc R_ARM_PC24 ELFMAINZ
|
|
||||||
|
|
|
@ -2,21 +2,21 @@ file format elf64-littleaarch64
|
||||||
|
|
||||||
Sections:
|
Sections:
|
||||||
Idx Name Size VMA LMA File off Algn Flags
|
Idx Name Size VMA LMA File off Algn Flags
|
||||||
0 ELFMAINX 00000014 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
|
0 ELFMAINX 00000010 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
|
||||||
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY
|
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000050 2**0 CONTENTS, READONLY
|
||||||
2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY
|
2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000050 2**0 CONTENTS, READONLY
|
||||||
3 NRV2E 00000128 0000000000000000 0000000000000000 00000054 2**0 CONTENTS, READONLY
|
3 NRV2E 00000128 0000000000000000 0000000000000000 00000050 2**0 CONTENTS, READONLY
|
||||||
4 NRV2D 0000011c 0000000000000000 0000000000000000 0000017c 2**0 CONTENTS, READONLY
|
4 NRV2D 0000011c 0000000000000000 0000000000000000 00000178 2**0 CONTENTS, READONLY
|
||||||
5 NRV2B 000000f0 0000000000000000 0000000000000000 00000298 2**0 CONTENTS, READONLY
|
5 NRV2B 000000f0 0000000000000000 0000000000000000 00000294 2**0 CONTENTS, READONLY
|
||||||
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000388 2**0 CONTENTS, RELOC, READONLY
|
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000384 2**0 CONTENTS, RELOC, READONLY
|
||||||
7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 00000458 2**0 CONTENTS, READONLY
|
7 LZMA_DEC20 00000968 0000000000000000 0000000000000000 00000454 2**0 CONTENTS, READONLY
|
||||||
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000dc0 2**0 CONTENTS, READONLY
|
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000dbc 2**0 CONTENTS, READONLY
|
||||||
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 0000125c 2**0 CONTENTS, READONLY
|
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001258 2**0 CONTENTS, READONLY
|
||||||
10 ELFMAINY 0000003e 0000000000000000 0000000000000000 0000125c 2**0 CONTENTS, READONLY
|
10 ELFMAINY 0000003e 0000000000000000 0000000000000000 00001258 2**0 CONTENTS, READONLY
|
||||||
11 ELFMAINZ 00000000 0000000000000000 0000000000000000 0000129a 2**0 CONTENTS, READONLY
|
11 ELFMAINZ 00000000 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY
|
||||||
12 ELFMAJNZ 00000024 0000000000000000 0000000000000000 0000129a 2**0 CONTENTS, READONLY
|
12 ELFMAJNZ 00000024 0000000000000000 0000000000000000 00001296 2**0 CONTENTS, READONLY
|
||||||
13 ANDMAJNZ 00000004 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY
|
13 ANDMAJNZ 00000004 0000000000000000 0000000000000000 000012ba 2**0 CONTENTS, READONLY
|
||||||
14 ELFMAKNZ 000002a4 0000000000000000 0000000000000000 000012c2 2**0 CONTENTS, READONLY
|
14 ELFMAKNZ 00000298 0000000000000000 0000000000000000 000012be 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||||
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
|
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
|
||||||
|
@ -42,7 +42,7 @@ SYMBOL TABLE:
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [ELFMAINX]:
|
RELOCATION RECORDS FOR [ELFMAINX]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0000000000000010 R_AARCH64_CALL26 ELFMAINZ
|
000000000000000c R_AARCH64_CALL26 ELFMAINZ
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
|
|
Loading…
Reference in New Issue
Block a user