overlay_offset for decompress

changed src/p_mach.cpp
This commit is contained in:
jreiser@BitWagon.com
2016-09-17 16:16:41 -07:00
committed by Markus F.X.J. Oberhumer
parent 9b26ebed75
commit 48791a329d
+10 -2
View File
@@ -760,10 +760,16 @@ void PackMachAMD64::pack4(OutputFile *fo, Filter &ft) // append PackHeader
+ sizeof(N_Mach::Mach_function_starts_command) + sizeof(N_Mach::Mach_data_in_code_command)
+ sizeof(linfo);
if (my_filetype==Mach_header::MH_EXECUTE) {
overlay_offset += sizeof(linkitem);
overlay_offset = PAGE_SIZE; // FIXME
overlay_offset += sizeof(linfo);
}
super::pack4(fo, ft);
if (my_filetype == Mach_header::MH_EXECUTE) {
unsigned long const zero = 0;
unsigned const len = fo->getBytesWritten();
fo->write(&zero, 7& (0u-len));
}
unsigned const eofcmpr = fo->getBytesWritten();
segTEXT.vmaddr = segZERO.vmaddr + segZERO.vmsize;
segTEXT.filesize = eofcmpr;
@@ -1312,7 +1318,7 @@ void PackMachI386::pack3(OutputFile *fo, Filter &ft) // append loader
void PackMachAMD64::pack3(OutputFile *fo, Filter &ft) // append loader
{
TE32 disp;
unsigned const zero = 0;
unsigned long const zero = 0;
unsigned len = fo->getBytesWritten();
fo->write(&zero, 3& (0u-len));
len += (3& (0u-len)); // 0 mod 4
@@ -1328,6 +1334,8 @@ void PackMachAMD64::pack3(OutputFile *fo, Filter &ft) // append loader
threado.state.rip = len + segTEXT.vmaddr; /* entry address */
super::pack3(fo, ft);
len = fo->getBytesWritten();
fo->write(&zero, 7& (0u-len));
}
void PackMachARMEL::pack3(OutputFile *fo, Filter &ft) // append loader