unpacking PackMachFat::CPU_TYPE_X86_64
This commit is contained in:
parent
8a68d9cded
commit
d97a557ac3
@ -1382,6 +1382,23 @@ void PackMachFat::unpack(OutputFile *fo)
|
|||||||
packer.unpack(fo);
|
packer.unpack(fo);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case PackMachFat::CPU_TYPE_X86_64: {
|
||||||
|
N_Mach::Mach_header<MachClass_LE64::MachITypes> hdr;
|
||||||
|
typedef N_Mach::Mach_header<MachClass_LE64::MachITypes> Mach_header;
|
||||||
|
fi->readx(&hdr, sizeof(hdr));
|
||||||
|
if (hdr.filetype==Mach_header::MH_EXECUTE) {
|
||||||
|
PackMachAMD64 packer(fi);
|
||||||
|
packer.initPackHeader();
|
||||||
|
packer.canUnpack();
|
||||||
|
packer.unpack(fo);
|
||||||
|
}
|
||||||
|
else if (hdr.filetype==Mach_header::MH_DYLIB) {
|
||||||
|
PackDylibAMD64 packer(fi);
|
||||||
|
packer.initPackHeader();
|
||||||
|
packer.canUnpack();
|
||||||
|
packer.unpack(fo);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case PackMachFat::CPU_TYPE_POWERPC: {
|
case PackMachFat::CPU_TYPE_POWERPC: {
|
||||||
N_Mach::Mach_header<MachClass_BE32::MachITypes> hdr;
|
N_Mach::Mach_header<MachClass_BE32::MachITypes> hdr;
|
||||||
typedef N_Mach::Mach_header<MachClass_BE32::MachITypes> Mach_header;
|
typedef N_Mach::Mach_header<MachClass_BE32::MachITypes> Mach_header;
|
||||||
@ -1489,6 +1506,18 @@ int PackMachFat::canUnpack()
|
|||||||
else
|
else
|
||||||
ph.format = packer.getFormat(); // FIXME: copy entire PackHeader
|
ph.format = packer.getFormat(); // FIXME: copy entire PackHeader
|
||||||
} break;
|
} break;
|
||||||
|
case PackMachFat::CPU_TYPE_X86_64: {
|
||||||
|
PackMachAMD64 packer(fi);
|
||||||
|
if (!packer.canUnpack()) {
|
||||||
|
PackDylibAMD64 pack2r(fi);
|
||||||
|
if (!pack2r.canUnpack())
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
ph.format = pack2r.getFormat(); // FIXME: copy entire PackHeader
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ph.format = packer.getFormat(); // FIXME: copy entire PackHeader
|
||||||
|
} break;
|
||||||
case PackMachFat::CPU_TYPE_POWERPC: {
|
case PackMachFat::CPU_TYPE_POWERPC: {
|
||||||
PackMachPPC32 packer(fi);
|
PackMachPPC32 packer(fi);
|
||||||
if (!packer.canUnpack()) {
|
if (!packer.canUnpack()) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user