【发布时间】:2015-07-18 01:59:02
【问题描述】:
首先我知道 1.Is it possible to export a dll definition from my AppDomain? 2.Is it possible to save a dynamic assembly to disk? 3.How can I extract DLL file from memory dump?
但这些似乎都没有特别回答我的问题。
考虑以下场景:C# 应用程序从内存流加载 DLL(因此 DLL 不会直接向用户公开)。是否有明确允许将特定 DLL 以原始形式从内存转储或导出到磁盘的工具?
注意:我希望有人向我展示从 C# 应用程序的内存转储中提取完整 DLL 的完整分步过程。
【问题讨论】:
-
加载dll的时候是什么格式的?你还有对“Assembly”对象或字节[]的引用吗?
-
尝试使用 MyAssembly.Location ...这为您提供了一个可以读取的文件路径。我知道这是一个 MemoryStream,但他们可能会在内部创建一个临时文件。
-
@PhilippeParé 用户永远无法访问程序集的路径。我很想知道从进程分配的内存或内存转储中提取加载的 DLL 文件的确切方法。
-
很抱歉,我认为这是不可能的。加载库后,它会加载符号。我能想到的唯一方法是使用 AssemblyBuilder 创建一个库,但这肯定不会产生你想要的原始文件。至少我不知道有什么办法。对不起!
-
@PhilippeParé 相信我,我真的很想知道这样做是不可能的,但 Hans Passant 先生(一位著名的 SO 用户)在第一条评论中另有说明。内存转储似乎确实包含大量数据,我读过有人能够从中提取 DLL,但我不知道如何正确执行。