24 if (!ptr)
return NULL;
26 return (IMAGE_DEBUG_DIRECTORY*) ptr;
33 this->
entries.push_back(cvWrapper);
47 return sizeof(IMAGE_DEBUG_DIRECTORY);
58 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
59 if (d == NULL)
return NULL;
66 case TYPE:
return &d->Type;
81 case TYPE:
return "Type";
101 case pe::DT_UNKNOWN :
return "unknown";
102 case pe::DT_COFF :
return "COFF";
103 case pe::DT_CODEVIEW :
return "Visual C++ (CodeView)";
104 case pe::DT_FPO :
return "frame pointer omission";
105 case pe::DT_MISC :
return "DBG file";
106 case pe::DT_EXCEPTION :
return "A copy of .pdata section";
107 case pe::DT_FIXUP :
return "Reserved";
108 case pe::DT_OMAP_TO_SRC :
return "mapping from an RVA in image to an RVA in source image";
109 case pe::DT_OMAP_FROM_SRC :
return "mapping from an RVA in source image to an RVA in image";
110 case pe::DT_BORLAND :
return "Borland";
111 case pe::DT_RESERVED10 :
return "Reserved";
112 case pe::DT_CLSID :
return "CLSID";
113 case pe::DT_VC_FEATURE :
return "VC Feature";
114 case pe::DT_POGO :
return "POGO";
115 case pe::DT_ILTCG :
return "ILTCG";
116 case pe::DT_MPX :
return "MPX";
117 case pe::DT_REPRO :
return "REPRO";
124 if (fieldId !=
TYPE)
return "";
126 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
127 if (d == NULL)
return NULL;
134 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
135 if (d == NULL)
return NULL;
136 if (d->Type != DT_CODEVIEW) {
140 size_t dirSize = d->SizeOfData;
147 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
148 if (!debugStr || !d)
return NULL;
149 if (d->SizeOfData <
sizeof(DEBUG_RSDSI)) {
152 DEBUG_RSDSI* rdsi = (DEBUG_RSDSI*)debugStr;
153 if (rdsi->dwSig == CV_SIGNATURE_RSDS) {
162 IMAGE_DEBUG_DIRECTORY* d =
debugDir();
163 if (!debugStr || !d)
return NULL;
164 if (d->SizeOfData <
sizeof(DEBUG_NB10)) {
167 DEBUG_NB10* nb = (DEBUG_NB10*)debugStr;
168 if (nb->cvHdr.CvSignature == CV_SIGNATURE_NB10) {
177 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
186 IMAGE_DEBUG_DIRECTORY* d = parentDir->
debugDir();
187 if (d == NULL)
return 0;
188 return d->SizeOfData;
193 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
203 DEBUG_NB10* dbg = parentDir->
getNB10();
218 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
221 for (
size_t i = 0; i <
sizeof(rdsi->guidSig.Data4); i++) {
223#if QT_VERSION >= 0x050000
224 out = QString().asprintf(
"%02X", rdsi->guidSig.Data4[i]);
226 out = QString().sprintf(
"%02X", rdsi->guidSig.Data4[i]);
231 for (
size_t i = 0; i <
sizeof(rdsi->guidSig.Data5); i++) {
233#if QT_VERSION >= 0x050000
234 out = QString().asprintf(
"%02X", rdsi->guidSig.Data5[i]);
236 out = QString().sprintf(
"%02X", rdsi->guidSig.Data5[i]);
241#if QT_VERSION >= 0x050000
242 out = QString().asprintf(
"%08X-%04X-%04X-",
245 rdsi->guidSig.Data3);
247 out = QString().sprintf(
"%08X-%04X-%04X-",
250 rdsi->guidSig.Data3);
252 return "{" + out + chunk4 +
"-" + chunk5 +
"}";
255 DEBUG_NB10* dbg = parentDir->
getNB10();
258#if QT_VERSION >= 0x050000
259 out = QString().asprintf(
"%04X", dbg->Signature);
261 out = QString().sprintf(
"%04X", dbg->Signature);
270 DEBUG_RSDSI* rdsi = (DEBUG_RSDSI*)this->
getPtr();
271 if (!rdsi)
return "";
274#if QT_VERSION >= 0x050000
275 out = QString().asprintf(
"%.4s", (
char*)&rdsi->dwSig);
277 out = QString().sprintf(
"%.4s", (
char*)&rdsi->dwSig);
295 DEBUG_RSDSI* rdsi = parentDir->
getRDSI();
296 DEBUG_NB10* dbg = parentDir->
getNB10();
297 if (!rdsi && !dbg)
return "";
300 if (rdsi) pdb = (
char*)rdsi->szPdb;
301 if (dbg) pdb = (
char*)dbg->PdbFileName;
offset_t getDirEntryAddress()
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()
QString translateFieldContent(size_t fieldId)
QString translateType(int type)
virtual bufsize_t getSize()
virtual QString getName()
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
virtual QString getFieldName(size_t fieldId)
virtual void * getFieldPtr(size_t fieldId, size_t subField)
pe::DEBUG_NB10 * getNB10()
friend class DebugDirCVEntryWrapper
IMAGE_DEBUG_DIRECTORY * debugDir()
std::vector< ExeNodeWrapper * > entries
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)