mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
*BSD requires -1==fd for MAP_ANONYMOUS
stub/l_lx_exec.c stub/l_lx_sh.c stub/l_lx_sh86.asm
This commit is contained in:
parent
3272d23917
commit
69a00c0ab3
|
@ -357,12 +357,12 @@ void upx_main(
|
|||
// FIXME: packer could set address delta
|
||||
mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)),
|
||||
-PAGE_MASK, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 );
|
||||
#else
|
||||
// Temporary decompression buffer.
|
||||
// FIXME: packer could set length
|
||||
buf = mmap(0, (header.p_blocksize + OVERHEAD + ~PAGE_MASK) & PAGE_MASK,
|
||||
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
|
||||
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 );
|
||||
if ((unsigned long) buf >= (unsigned long) -4095)
|
||||
goto error;
|
||||
#endif
|
||||
|
|
|
@ -209,7 +209,7 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum)
|
|||
lo -= ~PAGE_MASK & lo; // round down to page boundary
|
||||
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
|
||||
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
|
||||
addr = mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC, mflags, 0, 0);
|
||||
addr = mmap((void *)lo, hi, PROT_READ|PROT_WRITE|PROT_EXEC, mflags, -1, 0);
|
||||
|
||||
// Doing this may destroy the brk() that we set so carefully above.
|
||||
// The munmap() is "needed" only for discontiguous PT_LOAD,
|
||||
|
@ -266,7 +266,7 @@ ERR_LAB
|
|||
addr += mlen + frag; /* page boundary on hi end */
|
||||
if (addr < haddr) { // need pages for .bss
|
||||
if (addr != mmap(addr, haddr - addr, prot,
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ) ) {
|
||||
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) {
|
||||
err_exit(9);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ unfold:
|
|||
add ecx, 1+ 3+ (3 -1)+ PAGE_SIZE ; '\0' + "-c" + decompr_overrun + stub
|
||||
|
||||
push eax ; offset (ignored when MAP_ANONYMOUS)
|
||||
push eax ; fd (ignored when MAP_ANONYMOUS)
|
||||
push byte -1 ; fd [required by *BSD for MAP_ANONYMOUS]
|
||||
push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
|
||||
push byte PROT_READ | PROT_WRITE | PROT_EXEC
|
||||
push ecx ; length
|
||||
|
|
Loading…
Reference in New Issue
Block a user