1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

PackMachBase<T>::pack1() segTEXT.vmaddr must ignore zero-length segments

This commit is contained in:
John Reiser 2012-08-20 20:02:26 -07:00
parent b36c65e654
commit 2d29a82250

View File

@ -1115,8 +1115,12 @@ void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e
segTEXT.cmdsize = sizeof(segTEXT) + sizeof(secTEXT);
strncpy((char *)segTEXT.segname, "__TEXT", sizeof(segTEXT.segname));
if (my_filetype==Mach_header::MH_EXECUTE) {
int k; // must ignore zero-length segments, which sort last
for (k=n_segment; --k>=0; )
if (msegcmd[k].vmsize!=0)
break;
segTEXT.vmaddr = PAGE_MASK64 & (~PAGE_MASK64 +
msegcmd[n_segment -1].vmsize + msegcmd[n_segment -1].vmaddr );
msegcmd[k].vmsize + msegcmd[k].vmaddr );
}
if (my_filetype==Mach_header::MH_DYLIB) {
segTEXT.vmaddr = 0;