快速业务通道

xp下用户程序空间分配(4):加载主程序

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
os    dword ptr es:[edi]
int patmatch;
………………

由此可见windows应该是把这个段的 内容原封不动地读进来了,执行时PC指针将指向这块内存的数据。

1.3 只读数据段

这是exe里面的第二个段,看看它的section head:

  .rdata name
6FD0 virtual size
5D000 virtual address (0045D000 to 00463FCF)
7000 size of raw data
5C200 file pointer to raw data (0005C200 to 000631FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only

再看内存里面 的section head:

xp下用户程序空间分配(4):加载主程序

同样,满足了文件的要求。

这个只读数据段的绝大部分数据与文件中读出的一致,但是对于导入 表之类的数据,在加载到内存之后将由windows动态更改。

1.4 数据段

先看看从文件中dump出来的section head:

SECTION HEADER #3
.data name
352C virtual size
64000 virtual address (00464000 to 0046752B)
1400 size of raw data
63200 file pointer to raw data (00063200 to 000645FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write

再看看内存里面的section head:

xp下用户程序空间分配(4):加载主程序

从这里可以看到,实际上这个段的内存是分为两部分的,第一个部分用于存放Relocation table,第 二个部分才是程序里的全局变量。因为第二个部分是允许在程序中修改的,因此它的保护标志设置成了 PAGE_READWRITE。

随便在程序里面找个全局变量,看一下地址,的确是落在这个范围的,呵呵。前几 天还使劲在想怎么取得数据段的首地址,得来全不费工夫!用VirtualQuery足矣!

1.5 .rsrc

先看看从bash.exe里面dump出来的section head:

SECTION HEADER #4
.rsrc name
2B4 virtual size
68000 virtual address (00468000 to 004682B3)
400 size of raw data
64600 file pointer to raw data (00064600 to 000649FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only

再看看内存里面的section head:

xp下用户程序空间分配(4):加载主程序

这一块的内容和从文件中读取的内容完全一致。

1.6 .reloc

先看看从文件中dump出来的头:

SECTION HEADER #5
.reloc name
58D0 virtual size
69000 virtual address (00469000 to 0046E8CF)
5A00 size of raw data
64A00 file pointer to raw data (00064A00 to 0006A3FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
42000040 flags
Initialized Data
Discardable
Read Only

再看看内存里面的section head:

xp下用户程序空间分配(4):加载主程序

比较发现它在内存中的数据和从文件中读取出来的原始数据是一致的。Reloc的过程暂且不管,再看 看其它的东西。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号