|
@@ -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>
|