一个伟大的程序员应该知道他所写代码的每一个字节的意义,这句话说的有点夸张,但是体现了程序员应该知道其所写代码的生成的程序或软件是由什么组成的,用反汇编工具打开一个可执行文件,里面一大堆不是我们自己写的代码,那些代码是怎么来的?研究程序的PE文件,发现结构很严密,除了PE的头部(当然加载到内存中的PE文件是不包括PE的头部的,一般情况下,它的排列方式还是按照PE在磁盘中的逻辑顺序的,或者说是是按照PE被加载器生成的中间部分内存映像的逻辑结构。实际上,在内存中我们的程序是一个个节排列着的,一般情况下,代码段(.text)排在最前面,如下图是一个一般的PE结构的段:
这是使用PEID打开并查看的段的信息,是属于未加载至内存的情况下的信息,当然了,进过计算还是可以计算出加到内存中的信息的,我们看到的相关的虚拟地址就是经过计算出来的。
实际上,在内存中是没有最后的这个.reloc重定位段的,因为在内存中它是没有必要的,在把程序映射到进程的地址空间之后,重