@@ -1722,11 +1722,11 @@ ClrDataAccess::GetModuleData(CLRDATA_ADDRESS addr, struct DacpModuleData *Module
1722
1722
1723
1723
ZeroMemory (ModuleData,sizeof (DacpModuleData));
1724
1724
ModuleData->Address = addr;
1725
- ModuleData->PEAssembly = HOST_CDADDR (pModule-> GetPEAssembly ());
1725
+ ModuleData->PEAssembly = addr; // Module address in .NET 9+ - correspondingly, SOS-DAC APIs for PE assemblies expect a module address
1726
1726
COUNT_T metadataSize = 0 ;
1727
1727
if (!pModule->GetPEAssembly ()->IsDynamic ())
1728
1728
{
1729
- ModuleData->ilBase = (CLRDATA_ADDRESS)(ULONG_PTR) pModule->GetPEAssembly ()->GetIJWBase ( );
1729
+ ModuleData->ilBase = TO_CDADDR (dac_cast<TADDR>( pModule->GetPEAssembly ()->GetLoadedLayout ()-> GetBase ()) );
1730
1730
}
1731
1731
1732
1732
ModuleData->metadataStart = (CLRDATA_ADDRESS)dac_cast<TADDR>(pModule->GetPEAssembly ()->GetLoadedMetadata (&metadataSize));
@@ -2125,13 +2125,14 @@ ClrDataAccess::GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, _Inout_u
2125
2125
}
2126
2126
2127
2127
HRESULT
2128
- ClrDataAccess::GetPEFileName (CLRDATA_ADDRESS addr , unsigned int count, _Inout_updates_z_ (count) WCHAR *fileName, unsigned int *pNeeded)
2128
+ ClrDataAccess::GetPEFileName (CLRDATA_ADDRESS moduleAddr , unsigned int count, _Inout_updates_z_ (count) WCHAR *fileName, unsigned int *pNeeded)
2129
2129
{
2130
- if (addr == 0 || (fileName == NULL && pNeeded == NULL ) || (fileName != NULL && count == 0 ))
2130
+ if (moduleAddr == 0 || (fileName == NULL && pNeeded == NULL ) || (fileName != NULL && count == 0 ))
2131
2131
return E_INVALIDARG;
2132
2132
2133
2133
SOSDacEnter ();
2134
- PEAssembly* pPEAssembly = PTR_PEAssembly (TO_TADDR (addr));
2134
+ PTR_Module pModule = PTR_Module (TO_TADDR (moduleAddr));
2135
+ PEAssembly* pPEAssembly = pModule->GetPEAssembly ();
2135
2136
2136
2137
// Turn from bytes to wide characters
2137
2138
if (!pPEAssembly->GetPath ().IsEmpty ())
@@ -2182,20 +2183,25 @@ ClrDataAccess::GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, _Inout_up
2182
2183
}
2183
2184
2184
2185
HRESULT
2185
- ClrDataAccess::GetPEFileBase (CLRDATA_ADDRESS addr , CLRDATA_ADDRESS *base)
2186
+ ClrDataAccess::GetPEFileBase (CLRDATA_ADDRESS moduleAddr , CLRDATA_ADDRESS *base)
2186
2187
{
2187
- if (addr == 0 || base == NULL )
2188
+ if (moduleAddr == 0 || base == NULL )
2188
2189
return E_INVALIDARG;
2189
2190
2190
2191
SOSDacEnter ();
2191
2192
2192
- PEAssembly* pPEAssembly = PTR_PEAssembly (TO_TADDR (addr));
2193
+ PTR_Module pModule = PTR_Module (TO_TADDR (moduleAddr));
2194
+ PEAssembly* pPEAssembly = pModule->GetPEAssembly ();
2193
2195
2194
2196
// More fields later?
2195
2197
if (!pPEAssembly->IsDynamic ())
2196
- *base = TO_CDADDR (pPEAssembly->GetIJWBase ());
2198
+ {
2199
+ *base = TO_CDADDR (dac_cast<TADDR>(pPEAssembly->GetLoadedLayout ()->GetBase ()));
2200
+ }
2197
2201
else
2202
+ {
2198
2203
*base = (CLRDATA_ADDRESS)NULL ;
2204
+ }
2199
2205
2200
2206
SOSDacLeave ();
2201
2207
return hr;
0 commit comments