21 const size_t dirSize = this->
getSize();
22 const size_t entriesCount = dirSize /
sizeof(IMAGE_DEBUG_DIRECTORY);
23 if (cntr >= entriesCount) {
28 if (!dbgEntry || !dbgEntry->
getPtr()) {
42 this->
entries.push_back(cvWrapper);
55 return sizeof(IMAGE_DEBUG_DIRECTORY);
60 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
61 if (d == NULL)
return NULL;
68 case TYPE:
return &d->Type;
83 case TYPE:
return "Type";
103 case pe::DT_UNKNOWN :
return "unknown";
104 case pe::DT_COFF :
return "COFF";
105 case pe::DT_CODEVIEW :
return "Visual C++ (CodeView)";
106 case pe::DT_FPO :
return "Frame pointer omission";
107 case pe::DT_MISC :
return "DBG file";
108 case pe::DT_EXCEPTION :
return "A copy of .pdata section";
109 case pe::DT_FIXUP :
return "Reserved";
110 case pe::DT_OMAP_TO_SRC :
return "mapping from an RVA in image to an RVA in source image";
111 case pe::DT_OMAP_FROM_SRC :
return "mapping from an RVA in source image to an RVA in image";
112 case pe::DT_BORLAND :
return "Borland";
113 case pe::DT_RESERVED10 :
return "Reserved";
114 case pe::DT_CLSID :
return "CLSID";
115 case pe::DT_VC_FEATURE :
return "VC Feature";
116 case pe::DT_POGO :
return "POGO";
117 case pe::DT_ILTCG :
return "ILTCG";
118 case pe::DT_MPX :
return "MPX";
119 case pe::DT_REPRO :
return "REPRO";
126 if (fieldId !=
TYPE)
return "";
128 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
129 if (d == NULL)
return NULL;
136 IMAGE_DEBUG_DIRECTORY* d = this->
debugDir();
137 if (d == NULL)
return NULL;
138 if (d->Type != DT_CODEVIEW) {
142 size_t dirSize = d->SizeOfData;
149 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
150 if (!debugStr || !d)
return NULL;
151 if (d->SizeOfData <
sizeof(DEBUG_RSDSI)) {
154 DEBUG_RSDSI* rdsi = (DEBUG_RSDSI*)debugStr;
155 if (rdsi->dwSig == CV_SIGNATURE_RSDS) {
164 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
165 if (!debugStr || !d)
return NULL;
166 if (d->SizeOfData <
sizeof(DEBUG_NB10)) {
169 DEBUG_NB10* nb = (DEBUG_NB10*)debugStr;
170 if (nb->cvHdr.CvSignature == CV_SIGNATURE_NB10) {
179 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
188 IMAGE_DEBUG_DIRECTORY* d = parentDir->
debugDir();
189 if (d == NULL)
return 0;
190 return d->SizeOfData;
195 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
205 DEBUG_NB10* dbg = parentDir->
getNB10();
220 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
223 for (
size_t i = 0; i <
sizeof(rdsi->guidSig.Data4); i++) {
225#if QT_VERSION >= 0x050000
226 out = QString().asprintf(
"%02X", rdsi->guidSig.Data4[i]);
228 out = QString().sprintf(
"%02X", rdsi->guidSig.Data4[i]);
233 for (
size_t i = 0; i <
sizeof(rdsi->guidSig.Data5); i++) {
235#if QT_VERSION >= 0x050000
236 out = QString().asprintf(
"%02X", rdsi->guidSig.Data5[i]);
238 out = QString().sprintf(
"%02X", rdsi->guidSig.Data5[i]);
243#if QT_VERSION >= 0x050000
244 out = QString().asprintf(
"%08X-%04X-%04X-",
247 rdsi->guidSig.Data3);
249 out = QString().sprintf(
"%08X-%04X-%04X-",
252 rdsi->guidSig.Data3);
254 return "{" + out + chunk4 +
"-" + chunk5 +
"}";
257 DEBUG_NB10* dbg = parentDir->
getNB10();
260#if QT_VERSION >= 0x050000
261 out = QString().asprintf(
"%04X", dbg->Signature);
263 out = QString().sprintf(
"%04X", dbg->Signature);
272 DEBUG_RSDSI* rdsi = (DEBUG_RSDSI*)this->
getPtr();
273 if (!rdsi)
return "";
276#if QT_VERSION >= 0x050000
277 out = QString().asprintf(
"%.4s", (
char*)&rdsi->dwSig);
279 out = QString().sprintf(
"%.4s", (
char*)&rdsi->dwSig);
297 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
298 DEBUG_NB10* dbg = parentDir->
getNB10();
299 if (!rdsi && !dbg)
return "";
302 if (rdsi) pdb = (
char*)rdsi->szPdb;
303 if (dbg) pdb = (
char*)dbg->PdbFileName;
QString translateFieldContent(size_t fieldId)
virtual QString getFieldName(size_t fieldId)
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
virtual bufsize_t getSize()
pe::DEBUG_RSDSI * getRDSI()
virtual QString getName()
QString translateFieldContent(size_t fieldId)
virtual QString getFieldName(size_t fieldId)
virtual bufsize_t getSize()
IMAGE_DEBUG_DIRECTORY * debugDir()
friend class DebugDirCVEntryWrapper
pe::DEBUG_NB10 * getNB10()
virtual void * getFieldPtr(size_t fieldId, size_t subField)
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
QString translateType(int type)
friend class DebugDirEntryWrapper
virtual bool loadNextEntry(const size_t cntr)
virtual bufsize_t getSize()
std::vector< ExeNodeWrapper * > entries
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)