void ZapDebugDirectory::SaveNGenDebugDirectoryEntry(ZapWriter *pZapWriter) { #if !defined(NO_NGENPDB) _ASSERTE(pZapWriter); IMAGE_DEBUG_DIRECTORY debugDirectory = {0}; if (m_nDebugDirectory > 0) { memcpy(&debugDirectory, m_pDebugDirectory, sizeof(IMAGE_DEBUG_DIRECTORY)); } debugDirectory.Type = IMAGE_DEBUG_TYPE_CODEVIEW; debugDirectory.SizeOfData = m_pNGenPdbDebugData->GetSize(); debugDirectory.AddressOfRawData = m_pNGenPdbDebugData->GetRVA(); // Make sure the "is portable pdb" indicator (MinorVersion == 0x504d) is clear // for the NGen debug directory entry since this debug directory is copied // from an existing entry which could be a portable pdb. debugDirectory.MinorVersion = 0; { ZapPhysicalSection *pPhysicalSection = ZapImage::GetImage(pZapWriter)->m_pTextSection; DWORD dwOffset = m_pNGenPdbDebugData->GetRVA() - pPhysicalSection->GetRVA(); _ASSERTE(dwOffset < pPhysicalSection->GetSize()); debugDirectory.PointerToRawData = pPhysicalSection->GetFilePos() + dwOffset; } pZapWriter->Write(&debugDirectory, sizeof(debugDirectory)); #endif // NO_NGENPDB }
void ZapDebugDirectory::SaveOriginalDebugDirectoryEntry(ZapWriter *pZapWriter) { if (m_ppDebugData != nullptr) { for (DWORD i = 0; i < m_nDebugDirectory; i++) { if (m_ppDebugData[i] != nullptr) { m_pDebugDirectory[i].SizeOfData = m_ppDebugData[i]->GetSize(); m_pDebugDirectory[i].AddressOfRawData = m_ppDebugData[i]->GetRVA(); // Compute the absolute file (seek) pointer. We need to reach to the matching physical section to do that. ZapPhysicalSection * pPhysicalSection = ZapImage::GetImage(pZapWriter)->m_pTextSection; DWORD dwOffset = m_ppDebugData[i]->GetRVA() - pPhysicalSection->GetRVA(); _ASSERTE(dwOffset < pPhysicalSection->GetSize()); m_pDebugDirectory[i].PointerToRawData = pPhysicalSection->GetFilePos() + dwOffset; } else { m_pDebugDirectory[i].SizeOfData = 0; m_pDebugDirectory[i].AddressOfRawData = 0; m_pDebugDirectory[i].PointerToRawData = 0; } } pZapWriter->Write(m_pDebugDirectory, sizeof(IMAGE_DEBUG_DIRECTORY) * m_nDebugDirectory); } }
void ZapDebugDirectory::SaveNGenDebugDirectoryEntry(ZapWriter *pZapWriter) { _ASSERTE(pZapWriter); IMAGE_DEBUG_DIRECTORY debugDirectory = {0}; memcpy(&debugDirectory, &m_debugDirectory, sizeof(IMAGE_DEBUG_DIRECTORY)); debugDirectory.Type = IMAGE_DEBUG_TYPE_CODEVIEW; debugDirectory.SizeOfData = m_pNGenPdbDebugData->GetSize(); debugDirectory.AddressOfRawData = m_pNGenPdbDebugData->GetRVA(); { ZapPhysicalSection *pPhysicalSection = ZapImage::GetImage(pZapWriter)->m_pTextSection; DWORD dwOffset = m_pNGenPdbDebugData->GetRVA() - pPhysicalSection->GetRVA(); _ASSERTE(dwOffset < pPhysicalSection->GetSize()); debugDirectory.PointerToRawData = pPhysicalSection->GetFilePos() + dwOffset; } pZapWriter->Write(&debugDirectory, sizeof(debugDirectory)); }
void ZapDebugDirectory::SaveOriginalDebugDirectoryEntry(ZapWriter *pZapWriter) { if (m_pDebugData != NULL) { m_debugDirectory.SizeOfData = m_pDebugData->GetSize(); m_debugDirectory.AddressOfRawData = m_pDebugData->GetRVA(); // Compute the absolute file (seek) pointer. We need to reach to the matching physical section to do that. ZapPhysicalSection * pPhysicalSection = ZapImage::GetImage(pZapWriter)->m_pTextSection; DWORD dwOffset = m_pDebugData->GetRVA() - pPhysicalSection->GetRVA(); _ASSERTE(dwOffset < pPhysicalSection->GetSize()); m_debugDirectory.PointerToRawData = pPhysicalSection->GetFilePos() + dwOffset; pZapWriter->Write(&m_debugDirectory, sizeof(m_debugDirectory)); } }