15 s_dllCharact[pe::DLL_FORCE_INTEGRITY] =
"Code Integrity Image";
16 s_dllCharact[pe::DLL_NX_COMPAT] =
"Image is NX compatible";
17 s_dllCharact[pe::DLL_NO_ISOLATION] =
"Image understands isolation and doesn't want it";
19 s_dllCharact[pe::DLL_NO_BIND] =
"Do not bind this image";
21 s_dllCharact[pe::DLL_WDM_DRIVER] =
"Driver uses WDM model";
23 s_dllCharact[pe::DLL_TERMINAL_SERVER_AWARE] =
"TerminalServer aware";
39 std::vector<DWORD> chSet;
40 map<DWORD, QString>::iterator iter;
42 if (characteristics & iter->first) {
43 chSet.push_back(iter->first);
65 s_osVersion[pair<WORD,WORD>(6, 0)] =
"Windows Vista / Server 2008";
67 s_osVersion[pair<WORD,WORD>(5, 2)] =
"Windows Server 2003";
69 s_osVersion[pair<WORD,WORD>(5, 0)] =
"Windows 2000 / XP";
73 s_osVersion[pair<WORD,WORD>(4, 0)] =
"Windows 95 / NT 4.0";
75 s_osVersion[pair<WORD,WORD>(3, 51)] =
"Windows NT 4.51";
76 s_osVersion[pair<WORD,WORD>(3, 10)] =
"Windows NT 3.1";
78 pair<WORD,WORD> p(major, minor);
89 s_subsystem[pe::SUB_WINDOWS_CUI] =
"Windows console";
92 s_subsystem[pe::SUB_NATIVE_WINDOWS] =
"Native Win9x driver";
93 s_subsystem[pe::SUB_WINDOWS_CE_GUI] =
"Windows CE subsystem";
94 s_subsystem[pe::SUB_EFI_APPLICATION] =
"EFI_APPLICATION";
95 s_subsystem[pe::SUB_EFI_BOOT_SERVICE_DRIVER] =
"EFI_BOOT_SERVICE_DRIVER";
96 s_subsystem[pe::SUB_EFI_RUNTIME_DRIVER] =
"EFI_RUNTIME_DRIVER";
99 s_subsystem[pe::SUB_WINDOWS_BOOT_APP] =
"WINDOWS_BOOT_APPLICATION";
129 if (
m_PE == NULL)
return NULL;
133 IMAGE_NT_HEADERS32* hdr = (IMAGE_NT_HEADERS32*)
m_Exe->
getContentAt(myOff,
sizeof(IMAGE_NT_HEADERS32));
139 if (
m_PE == NULL)
return NULL;
143 IMAGE_NT_HEADERS64* hdr = (IMAGE_NT_HEADERS64*)
m_Exe->
getContentAt(myOff,
sizeof(IMAGE_NT_HEADERS64));
151 IMAGE_NT_HEADERS32* ntHdr32 =
nt32();
153 this->
opt32 = &(ntHdr32->OptionalHeader);
155 IMAGE_NT_HEADERS64* ntHdr64 =
nt64();
156 this->
opt64 = (ntHdr64) ? &(ntHdr64->OptionalHeader) : NULL;
165 IMAGE_OPTIONAL_HEADER32*
opt32 = (
nt32()) ? &(
nt32()->OptionalHeader) : NULL;
166 IMAGE_OPTIONAL_HEADER64*
opt64 = (
nt64()) ? &(
nt64()->OptionalHeader) : NULL;
169 bufsize_t size =
opt32 ?
sizeof(IMAGE_OPTIONAL_HEADER32) :
sizeof(IMAGE_OPTIONAL_HEADER64);
175 IMAGE_OPTIONAL_HEADER64*
opt64 = (
nt64()) ? &(
nt64()->OptionalHeader) : NULL;
185 IMAGE_OPTIONAL_HEADER32*
opt32 = (
nt32()) ? &(
nt32()->OptionalHeader) : NULL;
186 IMAGE_OPTIONAL_HEADER64*
opt64 = (
nt64()) ? &(
nt64()->OptionalHeader) : NULL;
193 return opt32 ? (
void*)&
opt32->MajorLinkerVersion : (
void*)&
opt64->MajorLinkerVersion;
195 return opt32 ? (
void*)&
opt32->MinorLinkerVersion : (
void*)&
opt64->MinorLinkerVersion;
200 return opt32 ? (
void*)&
opt32->SizeOfInitializedData : (
void*)&
opt64->SizeOfInitializedData;
202 return opt32 ? (
void*)&
opt32->SizeOfUninitializedData : (
void*)&
opt64->SizeOfUninitializedData;
204 return opt32 ? &
opt32->AddressOfEntryPoint : (
void*)&
opt64->AddressOfEntryPoint;
209 return opt32 ? (
void*)&
opt32->BaseOfData : NULL;
214 return opt32 ? (
void*)&
opt32->SectionAlignment : (
void*)&
opt64->SectionAlignment;
216 return opt32 ? (
void*)&
opt32->FileAlignment : (
void*)&
opt64->FileAlignment;
219 return opt32 ? (
void*)&
opt32->MajorOperatingSystemVersion : (
void*)&
opt64->MajorOperatingSystemVersion;
221 return opt32 ? (
void*)&
opt32->MinorOperatingSystemVersion : (
void*)&
opt64->MinorOperatingSystemVersion;
224 return opt32 ? (
void*)&
opt32->MajorImageVersion : (
void*)&
opt64->MajorImageVersion;
226 return opt32 ? (
void*)&
opt32->MinorImageVersion : (
void*)&
opt64->MinorImageVersion;
229 return opt32 ? (
void*)&
opt32->MajorSubsystemVersion : (
void*)&
opt64->MajorSubsystemVersion;
231 return opt32 ? (
void*)&
opt32->MinorSubsystemVersion : (
void*)&
opt64->MinorSubsystemVersion;
234 return opt32 ? (
void*)&
opt32->Win32VersionValue : (
void*)&
opt64->Win32VersionValue;
236 return opt32 ? (
void*)&
opt32->SizeOfImage : (
void*)&
opt64->SizeOfImage;
238 return opt32 ? (
void*)&
opt32->SizeOfHeaders : (
void*)&
opt64->SizeOfHeaders;
244 return opt32 ? (
void*)&
opt32->DllCharacteristics : (
void*)&
opt64->DllCharacteristics;
246 return opt32 ? (
void*)&
opt32->SizeOfStackReserve : (
void*)&
opt64->SizeOfStackReserve;
248 return opt32 ? (
void*)&
opt32->SizeOfStackCommit : (
void*)&
opt64->SizeOfStackCommit;
250 return opt32 ? (
void*)&
opt32->SizeOfHeapReserve : (
void*)&
opt64->SizeOfHeapReserve;
252 return opt32 ? (
void*)&
opt32->SizeOfHeapCommit : (
void*)&
opt64->SizeOfHeapCommit;
254 return opt32 ? (
void*)&
opt32->LoaderFlags : (
void*)&
opt64->LoaderFlags;
256 return opt32 ? (
void*)&
opt32->NumberOfRvaAndSizes : (
void*)&
opt64->NumberOfRvaAndSizes;
258 return opt32 ? (
void*)&
opt32->DataDirectory : (
void*)&
opt64->DataDirectory;
270 num =
static_cast<uint32_t
>(this->
getNumValue(fieldId, &isOk));
271 if (!isOk)
return "";
274 num =
static_cast<uint32_t
>(this->
getNumValue(fieldId, &isOk));
275 if (!isOk)
return "";
284 case MAGIC:
return (
"Magic");
291 case EP:
return (
"Entry Point");
299 case SEC_ALIGN:
return (
"Section Alignment");
311 case WIN32_VER:
return (
"Win32 Version Value");
313 case HDRS_SIZE:
return (
"Size of Headers");
315 case SUBSYS:
return (
"Subsystem");
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField=FIELD_NONE)
virtual uint64_t getNumValue(size_t fieldId, size_t subField, bool *isOk)
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
static QString translateOptMagic(DWORD magic)
IMAGE_NT_HEADERS64 * nt64()
static QString translateSubsystem(DWORD subsystem)
virtual QString translateFieldContent(size_t fieldId)
static void initDllCharact()
Executable::exe_bits getHdrBitMode()
IMAGE_OPTIONAL_HEADER64 * opt64
static std::map< DWORD, QString > s_optMagic
IMAGE_OPTIONAL_HEADER32 * opt32
static QString translateDllCharacteristics(DWORD charact)
static QString translateOSVersion(WORD major, WORD minor)
std::vector< DWORD > dllCharact
IMAGE_NT_HEADERS32 * nt32()
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField=FIELD_NONE)
virtual QString getFieldName(size_t fieldId)
virtual bufsize_t getSize()
static std::map< DWORD, QString > s_dllCharact
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
static std::vector< DWORD > splitDllCharact(DWORD characteristics)
static std::map< std::pair< WORD, WORD >, QString > s_osVersion
static std::map< DWORD, QString > s_subsystem
offset_t peNtHdrOffset() const