将内存映射到CLSID结构

时间:2014-06-16 09:08:27

标签: types windbg

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 REFCLSIDdt CLSIDdt LPCLSIDdt _CLSID并使用Google搜索。

如何在WinDbg中转储类ID以找出哪个对象加载.NET 4运行时?

1 个答案:

答案 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信息中,您可以找到供应商。