mirror of https://github.com/upx/upx.git
munmap(, Phdr[C_TEXT=1].p_memsz); // not .p_vaddr
modified: stub/src/arm64-linux.elf-fold.S modified: stub/src/powerpc64le-linux.elf-fold.S
This commit is contained in:
parent
ab7ef9f511
commit
afeaeeddec
|
@ -36,6 +36,8 @@ NBPW= 8
|
|||
sz_Ehdr= 8*NBPW
|
||||
sz_Phdr= 7*NBPW
|
||||
p_vaddr= 4+4+8
|
||||
p_filesz= 4+4+8+8+8
|
||||
p_memsz= 4+4+8+8+8+8
|
||||
|
||||
sz_l_info = 12
|
||||
sz_p_info = 12
|
||||
|
@ -171,10 +173,8 @@ xPMASK .req x20
|
|||
mov xfexp,x0 // entry address
|
||||
|
||||
// Discard pages of compressed input data (includes [ADRC,+LENC) )
|
||||
ldr x1,[xelfa,#p_vaddr+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_vaddr
|
||||
ldr x2,[xelfa,#p_vaddr +sz_Ehdr] // Phdr[C_BASE= 0].p_vaddr
|
||||
ldr x1,[xelfa,#p_memsz+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_memsz
|
||||
mov x0,xelfa // hi &Elf64_Ehdr
|
||||
sub x1,x1,x2
|
||||
call munmap // discard C_TEXT compressed data
|
||||
|
||||
// Map 1 page of /proc/self/exe so that munmap does not remove all references
|
||||
|
|
|
@ -220,12 +220,10 @@ noTOC:
|
|||
#endif //}
|
||||
mr r_exp,a0 // save &entry (.entry when BIG_ENDIAN)
|
||||
|
||||
p_vaddr= 4+4+8
|
||||
p_memsz= 4+4+ 4*NBPW
|
||||
// Discard pages of compressed data (includes [ADRX,+LENX) )
|
||||
ld a1,p_vaddr+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_vaddr
|
||||
ld r0,p_vaddr +szElf64_Ehdr(r_elfa) // Phdr[C_BASE= 0].p_vaddr
|
||||
ld a1,p_memsz+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_memsz
|
||||
movr a0,r_elfa // hi elfaddr
|
||||
subf a1,r0,a1 // length
|
||||
call munmap # discard C_TEXT compressed data
|
||||
|
||||
// first page of /proc/self/exe, to preserve it despite munmap(ADRU, LENU)
|
||||
|
|
Loading…
Reference in New Issue