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起就已经考虑处理了这种情况。
  • 相关阅读:
    sha256 in C language
    制作带动画效果的状态栏
    带进度条的任务栏
    在状态栏中显示当前系统时间
    在状态栏中显示当前操作员
    在状态栏中显示复选框
    设计浮动工具栏
    可以拉伸的菜单
    任务栏托盘菜单
    带历史信息的菜单
  • 原文地址:https://www.cnblogs.com/rick/p/1199197.html
Copyright © 2011-2022 走看看