zoukankan      html  css  js  c++  java
  • .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起就已经考虑处理了这种情况。
  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/rick/p/1199197.html
Copyright © 2011-2022 走看看