1
0
Fork 0

Merge pull request #2587 from Mattiwatti/pdb-use-pointertorawdata

Use PointerToRawData in debug directory if no RVA is present
This commit is contained in:
Duncan Ogilvie 2021-02-02 17:28:33 +01:00 committed by GitHub
commit 265574c670
Signed by: GitHub
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 2 deletions

View File

@ -463,7 +463,11 @@ static void ReadDebugDirectory(MODINFO & Info, ULONG_PTR FileMapVA)
const auto supported = [&Info](PIMAGE_DEBUG_DIRECTORY entry)
{
// Check for valid RVA
const auto offset = ModRvaToOffset(0, Info.headers, entry->AddressOfRawData);
ULONG_PTR offset = 0;
if(entry->AddressOfRawData)
offset = (ULONG_PTR)ModRvaToOffset(0, Info.headers, entry->AddressOfRawData);
else if(entry->PointerToRawData)
offset = entry->PointerToRawData;
if(!offset)
return false;
@ -556,7 +560,12 @@ static void ReadDebugDirectory(MODINFO & Info, ULONG_PTR FileMapVA)
}
// At this point we know the entry is a valid CV one
auto cvData = (unsigned char*)(FileMapVA + ModRvaToOffset(0, Info.headers, entry->AddressOfRawData));
ULONG_PTR offset = 0;
if(entry->AddressOfRawData)
offset = (ULONG_PTR)ModRvaToOffset(0, Info.headers, entry->AddressOfRawData);
else if(entry->PointerToRawData)
offset = entry->PointerToRawData;
auto cvData = (unsigned char*)(FileMapVA + offset);
auto signature = *(DWORD*)cvData;
if(signature == '01BN')
{