如何将受管.NET程序集从内存中保存为EXE / DLL文件
我想知道它是否尽可能,如果是这样 – 如何保存动态加载的.net程序集(它是从字节数组而不是文件加载)到磁盘上的文件(exe / dll取决于并且能够直接使用它(即如果它是exe,它将包含所有exe标题并且可以运行或至少“可反射”).
加载的程序集实际上也完全按照它们出现在文件中的方式存储在内存中,即所有PE EXE头文件,资源等,即内存中的exe / dll文件,或者它们以不同方式存储在内存中,因此它不会可以将一些内存区域保存为dll / exe .net程序集吗?也就是说,如果我可以使用图像中的类比:您可以将jpeg文件作为位图加载到内存中,其中表示内存中图像的实际字节将与表示jpeg文件的实际字节完全不同.加载组件也一样吗? 最后,我如何获得程序集实际位于进程内存中的内存地址(指针)? 只是为了澄清:我无法访问通过Assembly.Load()加载程序集的初始字节数组. 这是一个related question,但是从答案中不清楚是否可能有一种方法将通过字节数组加载的程序集从内存转储到磁盘上的文件. 谢谢. 解决方法
首先,在.NET中,程序集可以包含多个物理位于不同位置的模块.因此,只能在组件中保存模块.大多数情况下,您只需要主模块,因此您可以使用
Assembly.ManifestModule 来获取它.
所以现在我们有了模块的基地址.接下来要做的是确定模块的大小.最简单的方法是解析PE文件的Section Headers.例如: Name | Raw Size | Raw Address .text | 0x2000 | 0x400 .rsrc | 0x400 | 0x2400 .reloc | 0x200 | 0x2800 在这种情况下,模块的大小是最大原始地址加上相应的原始大小,即0x2A00. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Windows上使用Ubuntu上的Bash AppEngine SDK for Go
- active-directory – 为Win7和Win10创建单独的GPO
- DHCP 协议原理以及如何配置 DHCP
- windows – 禁用USB存储设备
- 从当前Windows位置C的文件I / O.
- 是否*任何人*通过SASL / GSSAPI对Windows SVNServe进行AD /
- Windows server 2016 搭建DHCP服务器
- Windows和Linux之间Java套接字的差异 – 如何处理它们?
- windows-server-2008 – 适用于SQL Server 2005的Windows S
- wpf – 如何找到最大化窗口的位置?