1
0
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:
John Reiser 2006-05-21 13:45:57 -07:00
parent 3272d23917
commit 69a00c0ab3
3 changed files with 5 additions and 5 deletions

View File

@ -357,12 +357,12 @@ void upx_main(
// FIXME: packer could set address delta // FIXME: packer could set address delta
mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)), mmap(buf + (PAGE_MASK & (header.p_filesize + ~PAGE_MASK)),
-PAGE_MASK, PROT_READ | PROT_WRITE, -PAGE_MASK, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ); MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 );
#else #else
// Temporary decompression buffer. // Temporary decompression buffer.
// FIXME: packer could set length // FIXME: packer could set length
buf = mmap(0, (header.p_blocksize + OVERHEAD + ~PAGE_MASK) & PAGE_MASK, 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) if ((unsigned long) buf >= (unsigned long) -4095)
goto error; goto error;
#endif #endif

View File

@ -209,7 +209,7 @@ xfind_pages(unsigned mflags, Elf32_Phdr const *phdr, int phnum)
lo -= ~PAGE_MASK & lo; // round down to page boundary lo -= ~PAGE_MASK & lo; // round down to page boundary
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
szlo = PAGE_MASK & (szlo - 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. // Doing this may destroy the brk() that we set so carefully above.
// The munmap() is "needed" only for discontiguous PT_LOAD, // The munmap() is "needed" only for discontiguous PT_LOAD,
@ -266,7 +266,7 @@ ERR_LAB
addr += mlen + frag; /* page boundary on hi end */ addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss if (addr < haddr) { // need pages for .bss
if (addr != mmap(addr, haddr - addr, prot, 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); err_exit(9);
} }
} }

View File

@ -149,7 +149,7 @@ unfold:
add ecx, 1+ 3+ (3 -1)+ PAGE_SIZE ; '\0' + "-c" + decompr_overrun + stub add ecx, 1+ 3+ (3 -1)+ PAGE_SIZE ; '\0' + "-c" + decompr_overrun + stub
push eax ; offset (ignored when MAP_ANONYMOUS) 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 MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS
push byte PROT_READ | PROT_WRITE | PROT_EXEC push byte PROT_READ | PROT_WRITE | PROT_EXEC
push ecx ; length push ecx ; length