support::ulittle32_t StringTableOffset;
support::ulittle32_t StringTableSize;
};
+
+ struct SegmentLoadCommand {
+ support::ulittle32_t Type;
+ support::ulittle32_t Size;
+ char Name[16];
+ support::ulittle32_t VMAddress;
+ support::ulittle32_t VMSize;
+ support::ulittle32_t FileOffset;
+ support::ulittle32_t FileSize;
+ support::ulittle32_t MaxVMProtection;
+ support::ulittle32_t InitialVMProtection;
+ support::ulittle32_t NumSections;
+ support::ulittle32_t Flags;
+ };
+
+ struct Segment64LoadCommand {
+ support::ulittle32_t Type;
+ support::ulittle32_t Size;
+ char Name[16];
+ support::ulittle64_t VMAddress;
+ support::ulittle64_t VMSize;
+ support::ulittle64_t FileOffset;
+ support::ulittle64_t FileSize;
+ support::ulittle32_t MaxVMProtection;
+ support::ulittle32_t InitialVMProtection;
+ support::ulittle32_t NumSections;
+ support::ulittle32_t Flags;
+ };
}
typedef MachOObject::LoadCommandInfo LoadCommandInfo;
const MachOFormat::RelocationEntry *getRelocation(DataRefImpl Rel) const;
const MachOFormat::SymtabLoadCommand *
getSymtabLoadCommand(LoadCommandInfo LCI) const;
+ const MachOFormat::SegmentLoadCommand *
+ getSegmentLoadCommand(LoadCommandInfo LCI) const;
+ const MachOFormat::Segment64LoadCommand *
+ getSegment64LoadCommand(LoadCommandInfo LCI) const;
std::size_t getSectionIndex(DataRefImpl Sec) const;
void printRelocationTargetName(const MachOFormat::RelocationEntry *RE,
return reinterpret_cast<const MachOFormat::SymtabLoadCommand*>(Data.data());
}
+const MachOFormat::SegmentLoadCommand *
+MachOObjectFile::getSegmentLoadCommand(LoadCommandInfo LCI) const {
+ StringRef Data = MachOObj->getData(LCI.Offset,
+ sizeof(MachOFormat::SegmentLoadCommand));
+ return reinterpret_cast<const MachOFormat::SegmentLoadCommand*>(Data.data());
+}
+
+const MachOFormat::Segment64LoadCommand *
+MachOObjectFile::getSegment64LoadCommand(LoadCommandInfo LCI) const {
+ StringRef Data = MachOObj->getData(LCI.Offset,
+ sizeof(MachOFormat::Segment64LoadCommand));
+ return
+ reinterpret_cast<const MachOFormat::Segment64LoadCommand*>(Data.data());
+}
+
void MachOObjectFile::moveToNextSymbol(DataRefImpl &DRI) const {
uint32_t LoadCommandCount = MachOObj->getHeader().NumLoadCommands;
while (DRI.d.a < LoadCommandCount) {
while (DRI.d.a < LoadCommandCount) {
LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a);
if (LCI.Command.Type == macho::LCT_Segment) {
- InMemoryStruct<macho::SegmentLoadCommand> SegmentLoadCmd;
- MachOObj->ReadSegmentLoadCommand(LCI, SegmentLoadCmd);
+ const MachOFormat::SegmentLoadCommand *SegmentLoadCmd =
+ getSegmentLoadCommand(LCI);
if (DRI.d.b < SegmentLoadCmd->NumSections)
return;
} else if (LCI.Command.Type == macho::LCT_Segment64) {
- InMemoryStruct<macho::Segment64LoadCommand> Segment64LoadCmd;
- MachOObj->ReadSegment64LoadCommand(LCI, Segment64LoadCmd);
+ const MachOFormat::Segment64LoadCommand *Segment64LoadCmd =
+ getSegment64LoadCommand(LCI);
if (DRI.d.b < Segment64LoadCmd->NumSections)
return;
}