探讨Windows PE与.net assembly加载机制持续进展?

2026-05-27 04:130阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计844个文字,预计阅读时间需要4分钟。

探讨Windows PE与.net assembly加载机制持续进展?

在Firelong撰写的近期文章中,探讨了……

在firelong写的关于近期C#大论战的回应的评论中有许多观点。有些话题当时没有看清楚。后来抽时间看了一下。那些评论里面的观点实在太多,没有办法一一验证。我只谈我的发现。

1. SizeOfImage对Windows PE内存加载的影响

我开始建立起来的概念是Windows PE都会全部加载进内存执行。当那个评论中有人提到了RAR自解压EXE。我当时是想当然地认为RAR自解压EXE同样也会全部加载进内存. 后来经其他人的指出,还有做试验,证实即使物理内存不够大同时没有页面文件的情况下也能解压一个很大的文件。我真有点想不透是什么原因。当时有一个网友gussing提到了SizeOfImage参数, 让我有点启发。后来经过进一步的查看,才知道RAR自解压EXE是Windows PE的一种特例。这个特别之处就在SizeOfImage参数上。用Windbg装入一个35M的RAR自解压EXE, 然后用RAMMap查看其物理内存占用.发现其内存占用大约是0x00020000.再用CFF explorer VII查看其PE文件, 果然SizeOfImage字段是0x00020000.

其他的Windows PE文件呢,如ntdll.dll,其SizeOfImage是0x00127000, 其文件大小是1,202,168, 十六进制是0x1257F8. 看来SizeOfImage刚好和文件大小相匹配,刚刚足以装下这个ntdll.dll本身。再看Windows文件夹下许多其他的EXE/DLL, 很多都是SizeOfImage与其文件大小刚好相匹配。

综上所述, SizeOfImage决定了PE加载到内存里的大小。

阅读全文

本文共计844个文字,预计阅读时间需要4分钟。

探讨Windows PE与.net assembly加载机制持续进展?

在Firelong撰写的近期文章中,探讨了……

在firelong写的关于近期C#大论战的回应的评论中有许多观点。有些话题当时没有看清楚。后来抽时间看了一下。那些评论里面的观点实在太多,没有办法一一验证。我只谈我的发现。

1. SizeOfImage对Windows PE内存加载的影响

我开始建立起来的概念是Windows PE都会全部加载进内存执行。当那个评论中有人提到了RAR自解压EXE。我当时是想当然地认为RAR自解压EXE同样也会全部加载进内存. 后来经其他人的指出,还有做试验,证实即使物理内存不够大同时没有页面文件的情况下也能解压一个很大的文件。我真有点想不透是什么原因。当时有一个网友gussing提到了SizeOfImage参数, 让我有点启发。后来经过进一步的查看,才知道RAR自解压EXE是Windows PE的一种特例。这个特别之处就在SizeOfImage参数上。用Windbg装入一个35M的RAR自解压EXE, 然后用RAMMap查看其物理内存占用.发现其内存占用大约是0x00020000.再用CFF explorer VII查看其PE文件, 果然SizeOfImage字段是0x00020000.

其他的Windows PE文件呢,如ntdll.dll,其SizeOfImage是0x00127000, 其文件大小是1,202,168, 十六进制是0x1257F8. 看来SizeOfImage刚好和文件大小相匹配,刚刚足以装下这个ntdll.dll本身。再看Windows文件夹下许多其他的EXE/DLL, 很多都是SizeOfImage与其文件大小刚好相匹配。

综上所述, SizeOfImage决定了PE加载到内存里的大小。

阅读全文