.Net程序集的不同加载方式,以及其在内存中格式

.Net程序集除了正常的有框架自动按需载入外,我们还可以通过反射手动载入程序集。
其中反射载入程序集有一种方式就是 以字节流的方式载入程序集。而不是直接从磁盘文件载入。
很多.Net压缩壳,和整体保护壳都采用了这种方式。

这种方式载入的程序集和从磁盘文件载入的程序集,其内存属性是不一样的。
字节流载入的内存属性是 MEM_MAPPED .
文件方式载入的内存属性是  MEM_IMAGE 。
(注:指使用api函数 VirtualQuery 获取的内存信息)

在 .Net 1.1中 这两种内存影像的布局是一样的,都是按照pe header的sections进行了内存映射的。

但是在 .Net 2.0 中这种情况变化了,字节流加载的程序集。在内存中的布局和它原始的字节流一样。没有按照pe header进行section的映射。

如果要进行程序集的整体dump,就需要考虑这两种不同的加载模式。
字节流加载的程序集,在获取Assembly的Location属性时会异常。

加密壳加密后的程序集,如果需要兼容后续使用压缩壳或整体加密壳再次保护,也需要在运行时考虑这种情况。
DNGuard 从2.6起就已经考虑处理了这种情况。

时间: 2024-11-13 06:41:31

.Net程序集的不同加载方式,以及其在内存中格式的相关文章

.Net 加密原理,加密壳运行库的加载方式(九)

.Net加密壳的运行库加载方式目前主要分两种.用得比较多的一种是 向程序集中注入Loader代码,然后给程序集中的每个类型添加静态构造函数.在静态构造函数中调用Loader代码. 目前的加密壳大部分都是这种模式.这种模式,利用了静态构造函数的特性. 应该注意到静态构造函数和Loader代码执行时 运行库是还没有加载的,所以这部分代码是却对不能加密的. 程序集执行起来后,运行库才会被载入. 另外一种,是直接利用windows pe加载器来自动加载加密壳的运行库. 这个熟悉win32的,应该知道修改

jQuery常用的4种加载方式分析[原创]_jquery

本文实例分析了jQuery常用的4种加载方式.分享给大家供大家参考,具体如下: 1. 页面加载之前执行,与嵌入的js加载方式一样: (function($){})(jquery) 示例: (function($){ alert('Hello jb51'); })(jquery); 2. 页面加载后执行: $(document).ready(function(){}) 示例: $(document).ready(function(){ alert('Hello jb51'); }); 3. 页面加

ajax-页面数据加载方式问题

问题描述 页面数据加载方式问题 位大侠,我目前写的是一个社区o2o,页面上所有数据全是用ajax异步加载,请问这样好么? 解决方案 类似瀑布流方式动态加载数据到页面(类似QQ空间加载数据) 解决方案二: http://blog.csdn.net/kira1999/article/details/7858975

Android的Activity加载方式实例分析_Android

本文实例分析了Android的Activity加载方式.分享给大家供大家参考,具体如下: 前面分析过Android中activity的加载方式(参考前面一篇<Android编程之四种Activity加载模式分析>),这里进一步分析一下. 关于Activity加载方法,无非就是 Intent intent = new Intent(); intent.setClass(ActA.this, ActA.class); startActivity(intent); 以前遇到的一个问题:不停运行这段代

php自动加载方式集合_php技巧

php加载文件方式: 1.include,include_once,requice,requice_one常规加载 2.__autoload() 3.spl_autoload_register() 常规加载方式 假设我们有一个类文件A.php,里面定义了一个名字为A的类: <?php class A { public function __construct() { echo 'Got it.'; } } 然后我们有一个index.php需要用到这个类A,常规的写法就是 <?php requi

Javascript 异步加载详解(浏览器在javascript的加载方式)_javascript技巧

一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像).渲染.代码执行. js 之所以要同步执行,是因为 js 中可能有输出 document 内容.修改dom.重定向等行为,所以默认同步执行才是安全的. 以前的一般建议

android最新的动态加载 方式secureDexClassLoader

问题描述 android最新的动态加载 方式secureDexClassLoader android最新的动态加载 方式secureDexClassLoader,谁能详细讲解一下呢,没找到 中文资料,英文有些细节还有点模糊! 解决方案 难道就没有人会么????????????

Android中Fragment的加载方式与数据通信详解

一.加载方式 1. 静态加载 1.1 加载步骤 (1) 创建fragment:创建自定义Fragment类继承自Fragment类,同时将自定义Fragment类与Fragment视图绑定(将layout转换成View) View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) inflater用于绑定Fragment的布局文件,同时将该布局转换成View对象并返回:con

Android的Activity加载方式实例分析

本文实例分析了Android的Activity加载方式.分享给大家供大家参考,具体如下: 前面分析过Android中activity的加载方式(参考前面一篇<Android编程之四种Activity加载模式分析>),这里进一步分析一下. 关于Activity加载方法,无非就是 Intent intent = new Intent(); intent.setClass(ActA.this, ActA.class); startActivity(intent); 以前遇到的一个问题:不停运行这段代