MH_EXECUTE runs under lldb, fails under shell
mmap addr=0x100000000 len=0x3003 prot=0x3 flags=0x1012 fd=-1 off=0x0 reloc=0x0 maddr=0xffffffffffffffff addr=0x100000000 modified: p_mach.cpp modified: p_mach_enum.h modified: stub/src/amd64-darwin.macho-entry.S modified: stub/src/amd64-darwin.macho-fold.S modified: stub/src/amd64-darwin.macho-main.c
This commit is contained in:
+11
-1
@@ -587,7 +587,8 @@ void PackMachBase<T>::pack4(OutputFile *fo, Filter &ft) // append PackHeader
|
||||
segLINK.fileoff = len; // must be in the file
|
||||
segLINK.vmaddr = len + segTEXT.vmaddr;
|
||||
fo->write(page, 16); len += 16;
|
||||
segLINK.vmsize = 16;
|
||||
// reserve convex hull of input segments
|
||||
segLINK.vmsize -= (segLINK.vmaddr - segTEXT.vmaddr);
|
||||
segLINK.filesize = 16;
|
||||
|
||||
// Get a writeable copy of the stub to make editing easier.
|
||||
@@ -1324,6 +1325,15 @@ void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e
|
||||
segLINK.nsects = 0;
|
||||
segLINK.initprot = Mach_command::VM_PROT_READ;
|
||||
// Adjust later: .vmaddr .vmsize .fileoff .filesize
|
||||
uint64_t up(0);
|
||||
unsigned const ncmds = mhdri.ncmds;
|
||||
for (unsigned j= 0; j < ncmds; ++j) if (lc_seg == msegcmd[j].cmd) {
|
||||
uint64_t sup = msegcmd[j].vmsize + msegcmd[j].vmaddr;
|
||||
if (up < sup) {
|
||||
up = sup;
|
||||
segLINK.vmsize = sup - segLINK.vmaddr;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned gap = 0;
|
||||
if (my_filetype == Mach_header::MH_EXECUTE) {
|
||||
|
||||
Reference in New Issue
Block a user