1.虚拟内存地址VA(又名虚拟地址)
该概念属于操作系统中的概念——每个空间都有独立的4GB(32为环境下)或者2^64B的虚拟地址空间,在这个空间中定位的地址为虚拟内存地址,在PE中,进程本身的VA等于:进程的基地址+相对虚拟内存地址。
2.相对虚拟内存地址RVA
一个进程被加载到虚拟内存空间之后,其相关的动态链接库也会被加载。这些同时加载到进程地址空间的文件被称为模块。每一个模块在加载是都会有一个基地址。不同模块的基地址一般式不同的,但是也有特殊情况,如果两个的基地址相同,就有曹子系统来决定这两个模块在虚拟地址空间中的额具体位置。相对虚拟内存地址是某个特定位置相对于模块基地址的偏移量,因此RVA是针对摸个模块而存在的。
RVA与具体模块相关,他有一个范围,该范围从模块开始到模块结束。脱离这个范围的RVA是无效的,称为越界。越界的RVA地址没有任何意义。
3.文件偏移地址FOA
文件偏移地址和内存无关,它只是某个位置距离文件头的偏移量
4.特殊地址
此类地址是一种特殊地址,其计算方法不是从文件头或者内存某个某开的额基地址算起,而是从某个特定的位置算起,这种地址在PE结构中很少见,例如在资源表中就出现过这样的地址
5.指针
PE数据结构中指针的定义:如果数据结构中某个字段存储的值为一个地址,那么这个字段就是一个指针。
6.数据目录
Windows下的可执行文件是PE中的一种,这种文件除了包含代码以及数据段的相关数据以外,还包含许多与文件执行油管的其他数据,如引用外部函数的信息、PE程序的图标、内部导出函数等,这些数据可能会随着操作系统新特性的出现而增加。
PE文件有一个数据结构称为数据目录,其中记录了所有可能的数据类型,这些类型中,目前已经定义的有15种,包括导出表、导入表、资源表、异常表、属性证书表、重定位表、调试数据、Architecture、Global Ptr、线程局部存储、加载配置表、绑定导入表、IAT、延迟导入表和CLR运行时头部。
7.节
无论是结构化程序设计还是面向对象程序设