overlay_offset for decompress
changed src/p_mach.cpp
This commit is contained in:
committed by
Markus F.X.J. Oberhumer
parent
9b26ebed75
commit
48791a329d
+10
-2
@@ -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(N_Mach::Mach_function_starts_command) + sizeof(N_Mach::Mach_data_in_code_command)
|
||||||
+ sizeof(linfo);
|
+ sizeof(linfo);
|
||||||
if (my_filetype==Mach_header::MH_EXECUTE) {
|
if (my_filetype==Mach_header::MH_EXECUTE) {
|
||||||
overlay_offset += sizeof(linkitem);
|
overlay_offset = PAGE_SIZE; // FIXME
|
||||||
|
overlay_offset += sizeof(linfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
super::pack4(fo, ft);
|
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();
|
unsigned const eofcmpr = fo->getBytesWritten();
|
||||||
segTEXT.vmaddr = segZERO.vmaddr + segZERO.vmsize;
|
segTEXT.vmaddr = segZERO.vmaddr + segZERO.vmsize;
|
||||||
segTEXT.filesize = eofcmpr;
|
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
|
void PackMachAMD64::pack3(OutputFile *fo, Filter &ft) // append loader
|
||||||
{
|
{
|
||||||
TE32 disp;
|
TE32 disp;
|
||||||
unsigned const zero = 0;
|
unsigned long const zero = 0;
|
||||||
unsigned len = fo->getBytesWritten();
|
unsigned len = fo->getBytesWritten();
|
||||||
fo->write(&zero, 3& (0u-len));
|
fo->write(&zero, 3& (0u-len));
|
||||||
len += (3& (0u-len)); // 0 mod 4
|
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 */
|
threado.state.rip = len + segTEXT.vmaddr; /* entry address */
|
||||||
super::pack3(fo, ft);
|
super::pack3(fo, ft);
|
||||||
|
len = fo->getBytesWritten();
|
||||||
|
fo->write(&zero, 7& (0u-len));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PackMachARMEL::pack3(OutputFile *fo, Filter &ft) // append loader
|
void PackMachARMEL::pack3(OutputFile *fo, Filter &ft) // append loader
|
||||||
|
|||||||
Reference in New Issue
Block a user