llvm-readobj: Add support for dumping the DOS header in PE files

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221333 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer
2014-11-05 06:24:35 +00:00
parent 07e1080b89
commit 4787059b2f
5 changed files with 67 additions and 17 deletions

View File

@ -63,6 +63,7 @@ private:
void printRelocation(const SectionRef &Section, const RelocationRef &Reloc);
void printDataDirectory(uint32_t Index, const std::string &FieldName);
void printDOSHeader(const dos_header *DH);
template <class PEHeader> void printPEHeader(const PEHeader *Hdr);
void printBaseOfDataField(const pe32_header *Hdr);
void printBaseOfDataField(const pe32plus_header *Hdr);
@ -382,6 +383,30 @@ void COFFDumper::printFileHeaders() {
return;
if (PEPlusHeader)
printPEHeader<pe32plus_header>(PEPlusHeader);
if (const dos_header *DH = Obj->getDOSHeader())
printDOSHeader(DH);
}
void COFFDumper::printDOSHeader(const dos_header *DH) {
DictScope D(W, "DOSHeader");
W.printString("Magic", StringRef(DH->Magic, sizeof(DH->Magic)));
W.printNumber("UsedBytesInTheLastPage", DH->UsedBytesInTheLastPage);
W.printNumber("FileSizeInPages", DH->FileSizeInPages);
W.printNumber("NumberOfRelocationItems", DH->NumberOfRelocationItems);
W.printNumber("HeaderSizeInParagraphs", DH->HeaderSizeInParagraphs);
W.printNumber("MinimumExtraParagraphs", DH->MinimumExtraParagraphs);
W.printNumber("MaximumExtraParagraphs", DH->MaximumExtraParagraphs);
W.printNumber("InitialRelativeSS", DH->InitialRelativeSS);
W.printNumber("InitialSP", DH->InitialSP);
W.printNumber("Checksum", DH->Checksum);
W.printNumber("InitialIP", DH->InitialIP);
W.printNumber("InitialRelativeCS", DH->InitialRelativeCS);
W.printNumber("AddressOfRelocationTable", DH->AddressOfRelocationTable);
W.printNumber("OverlayNumber", DH->OverlayNumber);
W.printNumber("OEMid", DH->OEMid);
W.printNumber("OEMinfo", DH->OEMinfo);
W.printNumber("AddressOfNewExeHeader", DH->AddressOfNewExeHeader);
}
template <class PEHeader>