/proc/self/exe mapping had wrong offset in stub for 32-bit ARM
https://github.com/upx/upx/issues/221 modified: stub/src/arm.v4a-linux.elf-entry.S modified: stub/src/arm.v4a-linux.elf-fold.S also arm*.*-linux.elf-*.{h,map}
This commit is contained in:
parent
4d1c754af9
commit
4f0cba9bb6
@ -124,9 +124,9 @@ end_decompress: .globl end_decompress
|
||||
/* IDENTSTR goes here */
|
||||
|
||||
section ELFMAINZ
|
||||
unfold: // in: r3= mflg; lr= &O_BINFO
|
||||
unfold: // in: r3= mflg; r6= elfaddr; lr= &O_BINFO
|
||||
str r3,[sp,#F_mflg]
|
||||
mvn r10,r6; add r10,r10,#1 @ "neg r10,r6": -elfaddr
|
||||
mov r10,#0; sub r10,r10,r6 @ "neg r10,r6": -elfaddr
|
||||
add r6,lr,#4 @ &b_info of folded code
|
||||
add r14,r6,r10 @ offset(b_info)
|
||||
|
||||
|
||||
@ -182,14 +182,15 @@ F_delta= 3*4
|
||||
str r0,[sp,#F_entry - F_delta] @ entry address
|
||||
|
||||
// Map 1 page of /proc/self/exe so that it does not disappear
|
||||
mov r5,#0 @ SEEK_SET
|
||||
ldr r4,[sp,#F_fd - F_delta]! @ fd
|
||||
ldr r4,[sp],#4 @ pop r4,F_fd
|
||||
mov r5,#0 @ SEEK_SET offset
|
||||
stmdb sp!,{r4,r5} @ arg5,arg6 calling convention
|
||||
mov r3,#MAP_PRIVATE
|
||||
mov r2,#PROT_READ
|
||||
mov r1,#PAGE_SIZE
|
||||
mov r0,#0 @ any address
|
||||
bl mmap @ no error check: cannot recover
|
||||
ldr r0,[sp],#4 @ F_fd
|
||||
ldmia sp!,{r0,r1} @ fd, offset
|
||||
bl close
|
||||
|
||||
#if DEBUG //{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user