MSI包正在将.NET 4运行时加载到我的进程中的以下callstack:
0:000> kb
# ChildEBP RetAddr Args to Child
...
05 0020bc08 753db8a4 004e639c 0020bc48 0020bc34 ntdll!LdrLoadDll+0x92
...
08 0020be88 73d452dd 0020bee0 71c8f77e 0020bed8 fusion!InitializeVM+0x2a
09 0020be90 71c8f77e 0020bed8 0020cf38 00000001 fusion!CreateAssemblyNameObject+0x8
0a 0020bee0 71c133c5 0020cf36 0020d148 0020cec4 msi!GetFusionPath+0x8f
...
11 0020dc20 6e961d98 04454a80 0020dd04 0020dd00 msi!MsiProvideComponentFromDescriptorW+0x6b
...
13 0020dcd4 755bea87 04454a80 0020dd04 0020dd00 advapi32!CommandLineFromMsiDescriptor+0x1d5
...
1f 0020e3b8 5e4d8f0e 004e489c 00000015 00000000 ole32!CoGetClassObject+0x20
...
24 0020e5dc 045b1652 0199ce38 0199cb08 0199c9f4 mscorwks!JIT_New+0xa6
CoGetClassObject的第一个参数是REFCLSID类型,它是指向类ID的指针。我现在想将内存转储到CLSID结构中,但我找不到它。我尝试了dt REFCLSID
,dt CLSID
,dt LPCLSID
和dt _CLSID
并使用Google搜索。
如何在WinDbg中转储类ID以找出哪个对象加载.NET 4运行时?
答案 0 :(得分:3)
数据类型为_GUID。将它与CoGetClassObject的第一个参数一起使用甚至可以很好地打印它。
0:000> dt _GUID 004e489c
ntdll!_GUID
{8a385f1a-1622-4169-9010-0ad2d35f51c0}
+0x000 Data1 : 0x8a385f1a
+0x004 Data2 : 0x1622
+0x006 Data3 : 0x4169
+0x008 Data4 : [8] "???"
在HKEY_CLASSES_ROOT\CLSID\...\InProcServer32
中查找值以查找DLL。从DLL信息中,您可以找到供应商。