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
|
// 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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user