gpt4 book ai didi

.net - 是否可以将任意(包括动态创建的)程序集从 windbg 转储到文件中?

转载 作者:行者123 更新时间:2023-12-01 01:04:31 24 4
gpt4 key购买 nike

我有一个 .NET 应用程序的转储,它创建并加载了太多动态程序集。我想检查其中一个程序集里​​面有什么。

为此,我想将这样的程序集转储到文件中并在 Reflector 中打开它。

问题 - 我不知道该怎么做。

所以,我的问题是——给定一个完整的内存转储,我如何将任意程序集转储到文件中,以使新文件是有效的 .NET 模块或程序集本身?

一个更简单的变体 - 我如何从实时调试 session 中做到这一点?

我正在使用带有 SOS 和 SOSEX 的 WinDBG。

编辑 1

所以,3年后我再次需要它。这是来自 !DumpDomain 的相关输出:

Assembly:           007f89a0 (Dynamic) []
ClassLoader: 00877998
SecurityDescriptor: 00879410
Module Name
054d0010 Dynamic Module

从这些信息开始,我怎样才能找到这个程序集的开始和结束?然后我可以使用 .writemem命令。

最佳答案

测试代码 - http://www.dotnetspider.com/resources/22226-Creating-Dynamic-Assembly-A-Step-Ahead-Series.aspx

0:000> !DumpDomain

Assembly: 00680f48 (Dynamic) []
ClassLoader: 00681010
SecurityDescriptor: 00680eb0
Module Name
0058386c Dynamic Module

0:000> !DumpModule -mt 0058386c
Name: Unknown Module
Attributes: Reflection SupportsUpdateableMethods
Assembly: 00680f48
LoaderHeap: 00000000
TypeDefToMethodTableMap: 00581b54
TypeRefToMethodTableMap: 00581b68
MethodDefToDescMap: 00581b7c
FieldDefToDescMap: 00581ba4
MemberRefToDescMap: 00000000
FileReferencesMap: 00581bf4
AssemblyReferencesMap: 00581c08

Types defined in this module

MT TypeDef Name
------------------------------------------------------------------------------
00583c98 0x02000002 <Unloaded Type>

Types referenced in this module

MT TypeRef Name
------------------------------------------------------------------------------
726826a0 0x02000001 System.Object
72647e4c 0x02000002 System.Console
0:000> !DumpMT -md 00583c98
EEClass: 0060121c
Module: 0058386c
Name: <Unloaded Type>
mdToken: 02000002
File: Unknown Module
BaseSize: 0xc
ComponentSize: 0x0
Slots in VTable: 6
Number of IFaces in IFaceMap: 0
--------------------------------------
MethodDesc Table
Entry MethodDe JIT Name
7258a630 7227801c PreJIT System.Object.ToString()
7257f750 72278024 PreJIT System.Object.Equals(System.Object)
7257f380 72278044 PreJIT System.Object.GetHashCode()
7257f040 72278058 PreJIT System.Object.Finalize()
005f03d0 00583c90 JIT dynamicAssemblyClass..ctor()
005f03e8 00583c84 JIT dynamicAssemblyClass.HelloWorld()
0:000> !DumpIL 00583c84
FindIL failed
0:000> !U 005f03e8
Normal JIT generated code
dynamicAssemblyClass.HelloWorld()
Begin 005f03e8, size 1a
>>> 005f03e8 55 push ebp
005f03e9 8bec mov ebp,esp
005f03eb e8b856f871 call mscorlib_ni!System.Console.get_Out() (72575aa8)
005f03f0 8bc8 mov ecx,eax
005f03f2 8b15a0210703 mov edx,dword ptr ds:[30721A0h] ("Hello! This is a dynamic assembly.")
005f03f8 8b01 mov eax,dword ptr [ecx]
005f03fa 8b403c mov eax,dword ptr [eax+3Ch]
005f03fd ff5010 call dword ptr [eax+10h]
005f0400 5d pop ebp
005f0401 c3 ret

不如反射器好,但你可以看到类型和方法。

关于.net - 是否可以将任意(包括动态创建的)程序集从 windbg 转储到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com