BearParser
Portable Executable parsing library (from PE-bear)
FileHdrWrapper.cpp
Go to the documentation of this file.
1#include "pe/FileHdrWrapper.h"
2#include "pe/PEFile.h"
3
4#include <time.h>
5#include <QDateTime>
6
7QString getDateString(const quint64 timestamp)
8{
9 const time_t rawtime = (const time_t)timestamp;
10 QString format = "dddd, dd.MM.yyyy hh:mm:ss";
11 QDateTime date1(QDateTime(QDateTime::fromTime_t(rawtime)));
12 return date1.toUTC().toString(format) + " UTC";
13}
14
16{
17 if (this->hdr) {
18 // use cached if exists
19 return (void*) hdr;
20 }
21 if (m_PE == NULL) return NULL;
22
23 offset_t myOff = m_PE->peHdrOffset();
24 IMAGE_FILE_HEADER* hdr = (IMAGE_FILE_HEADER*) m_Exe->getContentAt(myOff, sizeof(IMAGE_FILE_HEADER));
25 if (!hdr) return NULL; //error
26
27 return (void*) hdr;
28}
29
30
31void* FileHdrWrapper::getFieldPtr(size_t fieldId, size_t subField)
32{
33 IMAGE_FILE_HEADER * hdr = reinterpret_cast<IMAGE_FILE_HEADER*>(getPtr());
34 if (!hdr) return NULL;
35
36 IMAGE_FILE_HEADER &fileHeader = (*hdr);
37 switch (fieldId) {
38 case MACHINE: return (void*) &fileHeader.Machine;
39 case SEC_NUM: return (void*) &fileHeader.NumberOfSections;
40 case TIMESTAMP: return (void*) &fileHeader.TimeDateStamp;
41 case SYMBOL_PTR: return (void*) &fileHeader.PointerToSymbolTable;
42 case SYMBOL_NUM: return (void*) &fileHeader.NumberOfSymbols;
43 case OPTHDR_SIZE: return (void*) &fileHeader.SizeOfOptionalHeader;
44 case CHARACT: return (void*) &fileHeader.Characteristics;
45 }
46 return (void*) &fileHeader;
47}
48
49QString FileHdrWrapper::getFieldName(size_t fieldId)
50{
51 switch (fieldId) {
52 case MACHINE: return("Machine");
53 case SEC_NUM: return ("Sections Count");
54 case TIMESTAMP: return("Time Date Stamp");
55 case SYMBOL_PTR: return("Ptr to Symbol Table");
56 case SYMBOL_NUM: return("Num. of Symbols");
57 case OPTHDR_SIZE: return("Size of OptionalHeader");
58 case CHARACT: return("Characteristics");
59 }
60 return "";
61}
62
64{
66}
67
69{
70 IMAGE_FILE_HEADER * hdr = reinterpret_cast<IMAGE_FILE_HEADER*>(getPtr());
71 if (!hdr) return "";
72
73 IMAGE_FILE_HEADER &fileHeader = (*hdr);
74 switch (fieldId) {
75 case TIMESTAMP: return getDateString(fileHeader.TimeDateStamp);
76 }
77 return "";
78}
79
uint64_t offset_t
QString getDateString(const quint64 timestamp)
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)
Definition: Executable.h:57
virtual QString translateFieldContent(size_t fieldId)
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
virtual void * getPtr()
virtual QString getFieldName(size_t fieldId)
offset_t peHdrOffset()
Definition: PEFile.h:75