mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
powerpc stub: used wrong register
modified: stub/src/powerpc-linux.elf-entry.S modified: stub/src/arch/powerpc/32/ppc_regs.h
This commit is contained in:
parent
608662d73b
commit
85eb4c7537
|
@ -32,8 +32,8 @@
|
|||
|
||||
|
||||
#define STUB_POWERPC_LINUX_ELF_ENTRY_SIZE 9144
|
||||
#define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0xbffd5d8f
|
||||
#define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0x77078a44
|
||||
#define STUB_POWERPC_LINUX_ELF_ENTRY_ADLER32 0x3faf5db0
|
||||
#define STUB_POWERPC_LINUX_ELF_ENTRY_CRC32 0x825ccfba
|
||||
|
||||
unsigned char stub_powerpc_linux_elf_entry[9144] = {
|
||||
/* 0x0000 */ 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
@ -427,9 +427,9 @@ unsigned char stub_powerpc_linux_elf_entry[9144] = {
|
|||
/* 0x1840 */ 56, 96, 0, 0,124, 25,176, 80,124,149, 2, 20,124,156, 35,120,
|
||||
/* 0x1850 */ 72, 0, 0,153,124,125, 27,120,128, 22, 0, 8,124,149,224, 80,
|
||||
/* 0x1860 */ 127,103,219,120, 56,192, 0, 18,124,132, 2, 20, 72, 0, 0,125,
|
||||
/* 0x1870 */ 126,153, 24, 80,130,118, 0, 0, 56,118, 0, 16,126,214,162, 20,
|
||||
/* 0x1880 */ 126,246,170, 20,126,216,240, 56,126,248,184, 80,127,233, 3,166,
|
||||
/* 0x1890 */ 127,255,162, 20,136,246, 0, 12,146,161, 0,140, 56,193, 0,140,
|
||||
/* 0x1870 */ 126,153, 24, 80,127,233, 3,166,127,255,162, 20,130,118, 0, 0,
|
||||
/* 0x1880 */ 56,118, 0, 16,126,214,162, 20,126,246,170, 20,127,248,240, 56,
|
||||
/* 0x1890 */ 126,248,184, 80,136,246, 0, 12,146,161, 0,140, 56,193, 0,140,
|
||||
/* 0x18a0 */ 126,197,179,120,128,150, 0, 8, 78,128, 4, 33,128, 22, 0, 0,
|
||||
/* 0x18b0 */ 87,195,186,126, 80, 96, 4, 62,144, 22, 0, 0, 56,160, 0, 5,
|
||||
/* 0x18c0 */ 126,228,187,120,127, 3,195,120, 56, 0, 0,125, 68, 0, 0, 2,
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#define r30 30
|
||||
#define r31 31
|
||||
|
||||
// http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf
|
||||
//
|
||||
/* Stack pointer */
|
||||
#define sp 1
|
||||
SZ_FRAME= 6*4 // (sp,cr,lr, xx,yy,zz) save area per calling convention
|
||||
|
|
|
@ -212,17 +212,17 @@ unfold: // IN: r_exp, r_auxv, r_PMASK
|
|||
add a1,a1,r0 // + sz_cpr of fold; a1 <= .st_size
|
||||
call mmapRW0
|
||||
sub r_relo,a0,r_elf // relocation amount
|
||||
mtctr r_exp; add r_exp,r_exp,r_relo // use old f_exp; r_exp= new &f_exp
|
||||
|
||||
// Decompress from old folded code, overwriting new copy of folded code.
|
||||
lwz r_obinf, LOBINFO - LrFLD(r_FLD) // O_BINFO
|
||||
la src,sz_b_info + LBINFO - LrFLD(r_FLD) // old folded code
|
||||
add r_FLD,r_FLD,r_relo // dst for unfolding; use copied data
|
||||
add r_LENM,r_FLD,r_szuf // + sz_unc = last of unfolded
|
||||
and r_ADRM,r_FLD,r_PMASK // base for PROT_EXEC
|
||||
and r_ADRM,r_exp,r_PMASK // base for PROT_EXEC
|
||||
sub r_LENM,r_LENM,r_ADRM // length for PROT_EXEC
|
||||
|
||||
// The new f_exp has PROT_WRITE, so use the old f_exp to decompress.
|
||||
mtctr r_exp; add r_exp,r_exp,r_relo // use old f_exp; r_exp= new &f_exp
|
||||
lbz meth,b_method + LBINFO - LrFLD(r_FLD)
|
||||
stw r_szuf,SZ_FRAME+31*NBPW(sp) // lzma uses for EOF
|
||||
la ldst,SZ_FRAME+31*NBPW(sp) // &slot on stack
|
||||
|
|
Loading…
Reference in New Issue
Block a user