mirror of
https://github.com/QuasarApp/macdependency.git
synced 2025-05-03 15:19:33 +00:00
68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
#include "machoheader.h"
|
|
|
|
#include "macho32header.h"
|
|
#include "macho64header.h"
|
|
#include "machoexception.h"
|
|
|
|
MachOHeader* MachOHeader::getHeader(MachOFile& file, uint32_t magic) {
|
|
MachOHeader* header;
|
|
switch (magic) {
|
|
case MH_MAGIC:
|
|
header = new MachO32Header(file, false);
|
|
break;
|
|
case MH_CIGAM:
|
|
header = new MachO32Header(file, true);
|
|
break;
|
|
case MH_MAGIC_64:
|
|
header = new MachO64Header(file, false);
|
|
break;
|
|
case MH_CIGAM_64:
|
|
header = new MachO64Header(file, true);
|
|
break;
|
|
default:
|
|
throw MachOException("Invalid magic number. No Mach-O file.");
|
|
}
|
|
return header;
|
|
}
|
|
|
|
// for every header create a new filehandler with correct byte order
|
|
MachOHeader::MachOHeader(const MachOFile& file, bool reversedBO) :
|
|
file(file, reversedBO), offset(this->file.getPosition())
|
|
{
|
|
}
|
|
|
|
MachOHeader::~MachOHeader() {
|
|
|
|
}
|
|
|
|
MachOHeader::CpuType MachOHeader::getCpuType() const {
|
|
MachOHeader::CpuType cpuType;
|
|
unsigned int cpu = getInternalCpuType();
|
|
switch(cpu) {
|
|
case CPU_TYPE_POWERPC:
|
|
cpuType = MachOHeader::CpuTypePowerPc;
|
|
break;
|
|
case CPU_TYPE_I386:
|
|
cpuType = MachOHeader::CpuTypeI386;
|
|
break;
|
|
case CPU_TYPE_POWERPC64:
|
|
cpuType = MachOHeader::CpuTypePowerPc64;
|
|
break;
|
|
case CPU_TYPE_X86_64:
|
|
cpuType = MachOHeader::CpuTypeX8664;
|
|
break;
|
|
default:
|
|
cpuType = MachOHeader::CpuTypeOther;
|
|
}
|
|
return cpuType;
|
|
}
|
|
|
|
MachOHeader::FileType MachOHeader::getFileType() const {
|
|
unsigned int fileType = getInternalFileType();
|
|
if (fileType > NumFileTypes || fileType < 1) {
|
|
throw MachOException("Invalid file type");
|
|
}
|
|
return static_cast<FileType>(fileType-1);
|
|
}
|
|
|