i386: new stub strategy to avoid problems with early mmap layout
The stub occupies the same region that execve() would create for the original progam. The stub copies everything to a new area, erases the original region, replaces it with the de-compressed program, and erases the copy of itself via the escape hatch. The copy is inexpensive via mmap() of /proc/self/exe. modified: stub/src/i386-linux.elf-entry.S modified: stub/src/i386-linux.elf-fold.S modified: stub/src/i386-linux.elf-main.c modified: p_lx_elf.cpp modified: p_lx_elf.h modified: p_lx_interp.cpp modified: p_lx_interp.h modified: p_lx_sh.cpp modified: p_lx_sh.h modified: p_mach.cpp modified: p_mach.h modified: p_unix.cpp modified: p_unix.h modified: p_vmlinx.cpp plus .h, .map, .dump
This commit is contained in:
@@ -9,7 +9,7 @@ Linker script and memory map
|
||||
TARGET(elf32-littlearm)
|
||||
0x0000000000008080 . = ((0x8000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000008080 0x9f8
|
||||
.text 0x0000000000008080 0x9dc
|
||||
*(.text)
|
||||
.text 0x0000000000008080 0x308 tmp/arm.v4a-linux.elf-fold.o
|
||||
0x00000000000082dc munmap
|
||||
@@ -29,18 +29,18 @@ TARGET(elf32-littlearm)
|
||||
0x000000000000832c div10
|
||||
0x00000000000082e4 mprotect
|
||||
0x00000000000082b4 close
|
||||
.text 0x0000000000008388 0x6f0 tmp/arm.v4a-linux.elf-main.o
|
||||
.text 0x0000000000008388 0x6d4 tmp/arm.v4a-linux.elf-main.o
|
||||
0x00000000000083a8 get_page_mask
|
||||
0x0000000000008944 upx_main
|
||||
0x000000000000891c upx_main
|
||||
*(.data)
|
||||
.data 0x0000000000008a78 0x0 tmp/arm.v4a-linux.elf-fold.o
|
||||
.data 0x0000000000008a78 0x0 tmp/arm.v4a-linux.elf-main.o
|
||||
.data 0x0000000000008a5c 0x0 tmp/arm.v4a-linux.elf-fold.o
|
||||
.data 0x0000000000008a5c 0x0 tmp/arm.v4a-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000008a78 0x0
|
||||
.bss 0x0000000000008a78 0x0 tmp/arm.v4a-linux.elf-fold.o
|
||||
.bss 0x0000000000008a78 0x0 tmp/arm.v4a-linux.elf-main.o
|
||||
.bss 0x0000000000008a5c 0x0
|
||||
.bss 0x0000000000008a5c 0x0 tmp/arm.v4a-linux.elf-fold.o
|
||||
.bss 0x0000000000008a5c 0x0 tmp/arm.v4a-linux.elf-main.o
|
||||
LOAD tmp/arm.v4a-linux.elf-fold.o
|
||||
LOAD tmp/arm.v4a-linux.elf-main.o
|
||||
OUTPUT(tmp/arm.v4a-linux.elf-fold.bin elf32-littlearm)
|
||||
|
||||
@@ -9,7 +9,7 @@ Linker script and memory map
|
||||
TARGET(elf32-littlearm)
|
||||
0x0000000000008080 . = ((0x8000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000008080 0xa94
|
||||
.text 0x0000000000008080 0xa78
|
||||
*(.text)
|
||||
.text 0x0000000000008080 0x3a8 tmp/arm.v5a-linux.elf-fold.o
|
||||
0x0000000000008348 munmap
|
||||
@@ -29,18 +29,18 @@ TARGET(elf32-littlearm)
|
||||
0x00000000000083cc div10
|
||||
0x000000000000835c mprotect
|
||||
0x00000000000082e4 close
|
||||
.text 0x0000000000008428 0x6ec tmp/armel-linux.elf-main.o
|
||||
.text 0x0000000000008428 0x6d0 tmp/armel-linux.elf-main.o
|
||||
0x0000000000008448 get_page_mask
|
||||
0x00000000000089e0 upx_main
|
||||
0x00000000000089b8 upx_main
|
||||
*(.data)
|
||||
.data 0x0000000000008b14 0x0 tmp/arm.v5a-linux.elf-fold.o
|
||||
.data 0x0000000000008b14 0x0 tmp/armel-linux.elf-main.o
|
||||
.data 0x0000000000008af8 0x0 tmp/arm.v5a-linux.elf-fold.o
|
||||
.data 0x0000000000008af8 0x0 tmp/armel-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000008b14 0x0
|
||||
.bss 0x0000000000008b14 0x0 tmp/arm.v5a-linux.elf-fold.o
|
||||
.bss 0x0000000000008b14 0x0 tmp/armel-linux.elf-main.o
|
||||
.bss 0x0000000000008af8 0x0
|
||||
.bss 0x0000000000008af8 0x0 tmp/arm.v5a-linux.elf-fold.o
|
||||
.bss 0x0000000000008af8 0x0 tmp/armel-linux.elf-main.o
|
||||
LOAD tmp/arm.v5a-linux.elf-fold.o
|
||||
LOAD tmp/armel-linux.elf-main.o
|
||||
OUTPUT(tmp/arm.v5a-linux.elf-fold.bin elf32-littlearm)
|
||||
|
||||
@@ -9,7 +9,7 @@ Linker script and memory map
|
||||
TARGET(elf32-bigarm)
|
||||
0x0000000000008080 . = ((0x8000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000008080 0x9f8
|
||||
.text 0x0000000000008080 0x9dc
|
||||
*(.text)
|
||||
.text 0x0000000000008080 0x308 tmp/armeb.v4a-linux.elf-fold.o
|
||||
0x00000000000082dc munmap
|
||||
@@ -29,18 +29,18 @@ TARGET(elf32-bigarm)
|
||||
0x000000000000832c div10
|
||||
0x00000000000082e4 mprotect
|
||||
0x00000000000082b4 close
|
||||
.text 0x0000000000008388 0x6f0 tmp/armeb.v4a-linux.elf-main.o
|
||||
.text 0x0000000000008388 0x6d4 tmp/armeb.v4a-linux.elf-main.o
|
||||
0x00000000000083a8 get_page_mask
|
||||
0x0000000000008944 upx_main
|
||||
0x000000000000891c upx_main
|
||||
*(.data)
|
||||
.data 0x0000000000008a78 0x0 tmp/armeb.v4a-linux.elf-fold.o
|
||||
.data 0x0000000000008a78 0x0 tmp/armeb.v4a-linux.elf-main.o
|
||||
.data 0x0000000000008a5c 0x0 tmp/armeb.v4a-linux.elf-fold.o
|
||||
.data 0x0000000000008a5c 0x0 tmp/armeb.v4a-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000008a78 0x0
|
||||
.bss 0x0000000000008a78 0x0 tmp/armeb.v4a-linux.elf-fold.o
|
||||
.bss 0x0000000000008a78 0x0 tmp/armeb.v4a-linux.elf-main.o
|
||||
.bss 0x0000000000008a5c 0x0
|
||||
.bss 0x0000000000008a5c 0x0 tmp/armeb.v4a-linux.elf-fold.o
|
||||
.bss 0x0000000000008a5c 0x0 tmp/armeb.v4a-linux.elf-main.o
|
||||
LOAD tmp/armeb.v4a-linux.elf-fold.o
|
||||
LOAD tmp/armeb.v4a-linux.elf-main.o
|
||||
OUTPUT(tmp/armeb.v4a-linux.elf-fold.bin elf32-bigarm)
|
||||
|
||||
@@ -169,10 +169,7 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||
164 ctok32.30 0000000a 00000000 00000000 00001aa8 2**0 CONTENTS, RELOC, READONLY
|
||||
165 ctok32.40 00000005 00000000 00000000 00001ab2 2**0 CONTENTS, RELOC, READONLY
|
||||
166 LEXEC017 00000002 00000000 00000000 00001ab7 2**0 CONTENTS, READONLY
|
||||
167 LEXEC020 00000031 00000000 00000000 00001ab9 2**0 CONTENTS, READONLY
|
||||
168 LEXECEXE 00000040 00000000 00000000 00001aea 2**0 CONTENTS, RELOC, READONLY
|
||||
169 LEXECDYN 000000a6 00000000 00000000 00001b2a 2**0 CONTENTS, RELOC, READONLY
|
||||
170 LEXEC025 00000041 00000000 00000000 00001bd0 2**0 CONTENTS, RELOC, READONLY
|
||||
167 LEXEC020 000000d4 00000000 00000000 00001ab9 2**0 CONTENTS, RELOC, READONLY
|
||||
SYMBOL TABLE:
|
||||
00000000 l d N2BSMA10 00000000 N2BSMA10
|
||||
00000000 l d N2BFAS11 00000000 N2BFAS11
|
||||
@@ -218,7 +215,6 @@ SYMBOL TABLE:
|
||||
00000000 l d ctok32.20 00000000 ctok32.20
|
||||
00000000 l d ctok32.40 00000000 ctok32.40
|
||||
00000000 l d LEXEC020 00000000 LEXEC020
|
||||
00000000 l d LEXEC025 00000000 LEXEC025
|
||||
00000000 l d LEXEC000 00000000 LEXEC000
|
||||
00000000 l d LEXEC009 00000000 LEXEC009
|
||||
00000000 l d LEXEC010 00000000 LEXEC010
|
||||
@@ -343,8 +339,6 @@ SYMBOL TABLE:
|
||||
00000000 l d LXUNF035 00000000 LXUNF035
|
||||
00000000 l d ctok32.30 00000000 ctok32.30
|
||||
00000000 l d LEXEC017 00000000 LEXEC017
|
||||
00000000 l d LEXECEXE 00000000 LEXECEXE
|
||||
00000000 l d LEXECDYN 00000000 LEXECDYN
|
||||
00000000 g LEXEC000 00000000 _start
|
||||
00000000 *UND* 00000000 lzma_stack_adjust
|
||||
00000000 *UND* 00000000 lzma_u_len
|
||||
@@ -357,7 +351,7 @@ SYMBOL TABLE:
|
||||
|
||||
RELOCATION RECORDS FOR [LEXEC000]:
|
||||
OFFSET TYPE VALUE
|
||||
00000002 R_386_PC32 LEXEC025
|
||||
00000002 R_386_PC32 LEXEC020
|
||||
|
||||
RELOCATION RECORDS FOR [N2BSMA10]:
|
||||
OFFSET TYPE VALUE
|
||||
@@ -661,17 +655,6 @@ RELOCATION RECORDS FOR [ctok32.40]:
|
||||
OFFSET TYPE VALUE
|
||||
00000004 R_386_PC8 ctok32.00
|
||||
|
||||
RELOCATION RECORDS FOR [LEXECEXE]:
|
||||
RELOCATION RECORDS FOR [LEXEC020]:
|
||||
OFFSET TYPE VALUE
|
||||
0000002d R_386_PC32 LEXEC020
|
||||
|
||||
RELOCATION RECORDS FOR [LEXECDYN]:
|
||||
OFFSET TYPE VALUE
|
||||
00000004 R_386_32 LEXEC025
|
||||
000000a0 R_386_32 LEXEC025
|
||||
00000070 R_386_PC32 LEXEC020
|
||||
|
||||
RELOCATION RECORDS FOR [LEXEC025]:
|
||||
OFFSET TYPE VALUE
|
||||
00000039 R_386_PC32 LEXEC020
|
||||
0000003d R_386_32 O_BINFO
|
||||
000000d0 R_386_32 O_BINFO
|
||||
|
||||
@@ -9,25 +9,25 @@ Linker script and memory map
|
||||
TARGET(elf32-i386)
|
||||
0x0000000000c01080 . = ((0xc01000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000c01080 0x6bc
|
||||
.text 0x0000000000c01080 0x68c
|
||||
*(.text)
|
||||
.text 0x0000000000c01080 0x154 tmp/i386-linux.elf-fold.o
|
||||
0x0000000000c011a5 mmap
|
||||
.text 0x0000000000c011d4 0x565 tmp/i386-linux.elf-main.o
|
||||
0x0000000000c012fc get_page_mask
|
||||
0x0000000000c01634 upx_main
|
||||
.text 0x0000000000c01080 0x14c tmp/i386-linux.elf-fold.o
|
||||
0x0000000000c011a0 mmap
|
||||
.text 0x0000000000c011cc 0x53e tmp/i386-linux.elf-main.o
|
||||
0x0000000000c012f4 get_page_mask
|
||||
0x0000000000c015fb upx_main
|
||||
*(.data)
|
||||
*fill* 0x0000000000c01739 0x3 00
|
||||
.data 0x0000000000c0173c 0x0 tmp/i386-linux.elf-fold.o
|
||||
.data 0x0000000000c0173c 0x0 tmp/i386-linux.elf-main.o
|
||||
*fill* 0x0000000000c0170a 0x2 00
|
||||
.data 0x0000000000c0170c 0x0 tmp/i386-linux.elf-fold.o
|
||||
.data 0x0000000000c0170c 0x0 tmp/i386-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000c0173c 0x0
|
||||
.bss 0x0000000000c0173c 0x0 tmp/i386-linux.elf-fold.o
|
||||
.bss 0x0000000000c0173c 0x0 tmp/i386-linux.elf-main.o
|
||||
.bss 0x0000000000c0170c 0x0
|
||||
.bss 0x0000000000c0170c 0x0 tmp/i386-linux.elf-fold.o
|
||||
.bss 0x0000000000c0170c 0x0 tmp/i386-linux.elf-main.o
|
||||
|
||||
.rel.dyn 0x0000000000c0173c 0x0
|
||||
.rel.dyn 0x0000000000c0170c 0x0
|
||||
.rel.text 0x0000000000000000 0x0 tmp/i386-linux.elf-fold.o
|
||||
LOAD tmp/i386-linux.elf-fold.o
|
||||
LOAD tmp/i386-linux.elf-main.o
|
||||
|
||||
@@ -9,21 +9,20 @@ Linker script and memory map
|
||||
TARGET(elf32-bigmips)
|
||||
0x0000000000100080 . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000100080 0x980
|
||||
.text 0x0000000000100080 0x940
|
||||
*(.text)
|
||||
.text 0x0000000000100080 0x130 tmp/mips.r3000-linux.elf-fold.o
|
||||
.text 0x00000000001001b0 0x850 tmp/mips.r3000-linux.elf-main.o
|
||||
0x0000000000100424 get_page_mask
|
||||
0x0000000000100870 upx_main
|
||||
.text 0x00000000001001b0 0x810 tmp/mips.r3000-linux.elf-main.o
|
||||
0x0000000000100830 upx_main
|
||||
*(.data)
|
||||
.data 0x0000000000100a00 0x0 tmp/mips.r3000-linux.elf-fold.o
|
||||
.data 0x0000000000100a00 0x0 tmp/mips.r3000-linux.elf-main.o
|
||||
.data 0x00000000001009c0 0x0 tmp/mips.r3000-linux.elf-fold.o
|
||||
.data 0x00000000001009c0 0x0 tmp/mips.r3000-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000100a00 0x0
|
||||
.bss 0x0000000000100a00 0x0 tmp/mips.r3000-linux.elf-fold.o
|
||||
.bss 0x0000000000100a00 0x0 tmp/mips.r3000-linux.elf-main.o
|
||||
.bss 0x00000000001009c0 0x0
|
||||
.bss 0x00000000001009c0 0x0 tmp/mips.r3000-linux.elf-fold.o
|
||||
.bss 0x00000000001009c0 0x0 tmp/mips.r3000-linux.elf-main.o
|
||||
LOAD tmp/mips.r3000-linux.elf-fold.o
|
||||
LOAD tmp/mips.r3000-linux.elf-main.o
|
||||
OUTPUT(tmp/mips.r3000-linux.elf-fold.bin elf32-bigmips)
|
||||
|
||||
@@ -9,21 +9,20 @@ Linker script and memory map
|
||||
TARGET(elf32-littlemips)
|
||||
0x0000000000100080 . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000100080 0x980
|
||||
.text 0x0000000000100080 0x940
|
||||
*(.text)
|
||||
.text 0x0000000000100080 0x130 tmp/mipsel.r3000-linux.elf-fold.o
|
||||
.text 0x00000000001001b0 0x850 tmp/mipsel.r3000-linux.elf-main.o
|
||||
0x0000000000100424 get_page_mask
|
||||
0x0000000000100870 upx_main
|
||||
.text 0x00000000001001b0 0x810 tmp/mipsel.r3000-linux.elf-main.o
|
||||
0x0000000000100830 upx_main
|
||||
*(.data)
|
||||
.data 0x0000000000100a00 0x0 tmp/mipsel.r3000-linux.elf-fold.o
|
||||
.data 0x0000000000100a00 0x0 tmp/mipsel.r3000-linux.elf-main.o
|
||||
.data 0x00000000001009c0 0x0 tmp/mipsel.r3000-linux.elf-fold.o
|
||||
.data 0x00000000001009c0 0x0 tmp/mipsel.r3000-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x0000000000100a00 0x0
|
||||
.bss 0x0000000000100a00 0x0 tmp/mipsel.r3000-linux.elf-fold.o
|
||||
.bss 0x0000000000100a00 0x0 tmp/mipsel.r3000-linux.elf-main.o
|
||||
.bss 0x00000000001009c0 0x0
|
||||
.bss 0x00000000001009c0 0x0 tmp/mipsel.r3000-linux.elf-fold.o
|
||||
.bss 0x00000000001009c0 0x0 tmp/mipsel.r3000-linux.elf-main.o
|
||||
LOAD tmp/mipsel.r3000-linux.elf-fold.o
|
||||
LOAD tmp/mipsel.r3000-linux.elf-main.o
|
||||
OUTPUT(tmp/mipsel.r3000-linux.elf-fold.bin elf32-littlemips)
|
||||
|
||||
@@ -9,7 +9,7 @@ Linker script and memory map
|
||||
TARGET(elf32-powerpc)
|
||||
0x0000000000100080 . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
|
||||
|
||||
.text 0x0000000000100080 0x105c
|
||||
.text 0x0000000000100080 0xfdc
|
||||
*(.text)
|
||||
.text 0x0000000000100080 0x264 tmp/powerpc-linux.elf-fold.o
|
||||
0x0000000000100080 get_page_mask
|
||||
@@ -24,19 +24,19 @@ TARGET(elf32-powerpc)
|
||||
0x00000000001002b4 open
|
||||
0x00000000001002c4 mprotect
|
||||
0x00000000001002bc close
|
||||
.text 0x00000000001002e4 0xdf8 tmp/powerpc-linux.elf-main.o
|
||||
0x0000000000100ecc upx_main
|
||||
.text 0x00000000001002e4 0xd78 tmp/powerpc-linux.elf-main.o
|
||||
0x0000000000100e54 upx_main
|
||||
*(.data)
|
||||
.data 0x00000000001010dc 0x0 tmp/powerpc-linux.elf-fold.o
|
||||
.data 0x00000000001010dc 0x0 tmp/powerpc-linux.elf-main.o
|
||||
.data 0x000000000010105c 0x0 tmp/powerpc-linux.elf-fold.o
|
||||
.data 0x000000000010105c 0x0 tmp/powerpc-linux.elf-main.o
|
||||
|
||||
.data
|
||||
|
||||
.bss 0x00000000001010dc 0x0
|
||||
.bss 0x00000000001010dc 0x0 tmp/powerpc-linux.elf-fold.o
|
||||
.bss 0x00000000001010dc 0x0 tmp/powerpc-linux.elf-main.o
|
||||
.bss 0x000000000010105c 0x0
|
||||
.bss 0x000000000010105c 0x0 tmp/powerpc-linux.elf-fold.o
|
||||
.bss 0x000000000010105c 0x0 tmp/powerpc-linux.elf-main.o
|
||||
|
||||
.rela.dyn 0x00000000001010dc 0x0
|
||||
.rela.dyn 0x000000000010105c 0x0
|
||||
.rela.text 0x0000000000000000 0x0 tmp/powerpc-linux.elf-fold.o
|
||||
LOAD tmp/powerpc-linux.elf-fold.o
|
||||
LOAD tmp/powerpc-linux.elf-main.o
|
||||
|
||||
Reference in New Issue
Block a user