MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / GetPdbSignature

Method GetPdbSignature

WinArk/SymbolFileInfo.cpp:59–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

57}
58
59bool SymbolFileInfo::GetPdbSignature(ULONG_PTR imageBase,PIMAGE_DEBUG_DIRECTORY entry) {
60 if (entry->SizeOfData < sizeof(CV_INFO_PDB20))
61 return false;
62
63 ULONG_PTR offset = 0;
64
65 offset = entry->PointerToRawData;
66 auto cvData = (unsigned char*)(imageBase + offset);
67 auto signature = *(DWORD*)cvData;
68
69 if (signature == '01BN') {
70 auto cv = (CV_INFO_PDB20*)cvData;
71 _pdbSignature.Format(L"%X%X", cv->Signature, cv->Age);
72 std::string file((const char*)cv->PdbFileName, entry->SizeOfData - FIELD_OFFSET(CV_INFO_PDB20, PdbFileName));
73 _pdbFile = Helpers::StringToWstring(file).c_str();
74 _pdbValidation.signature = cv->Signature;
75 _pdbValidation.age = cv->Age;
76 }
77 else if (signature == 'SDSR') {
78 auto cv = (CV_INFO_PDB70*)cvData;
79 _pdbSignature.Format(L"%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X%X",
80 cv->Signature.Data1, cv->Signature.Data2, cv->Signature.Data3,
81 cv->Signature.Data4[0], cv->Signature.Data4[1], cv->Signature.Data4[2],
82 cv->Signature.Data4[3], cv->Signature.Data4[4], cv->Signature.Data4[5],
83 cv->Signature.Data4[6], cv->Signature.Data4[7], cv->Age);
84 std::string file((const char*)cv->PdbFileName, entry->SizeOfData - FIELD_OFFSET(CV_INFO_PDB70, PdbFileName));
85 _pdbFile = Helpers::StringToWstring(file).c_str();
86 memcpy(&_pdbValidation.guid, &cv->Signature, sizeof(GUID));
87 _pdbValidation.signature = 0;
88 _pdbValidation.age = cv->Age;
89 }
90 return true;
91}
92
93downslib_error SymbolFileInfo::Download(std::string url, std::wstring fileName, std::string userAgent,
94 unsigned int timeout,downslib_cb cb, void* userdata){

Callers 1

InitSymbolsFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected