|
下面一个成员是'PhysicalAddress'和'VirtualSize'的32位联合体.在目标文件,该地址是内容被重定位的地址,在可执行文件内是内容的尺寸。实际上该域好像没有被使用,有的链接器填入尺寸有的链接器填入地址,有的链接器填入0。 下一个成员是'VirtualAddress',32位,保存当节的数据加载入内存时的RVA。 然后是32位'SizeOfRawData',是四舍五入到下个FileAlignment'倍数的大小。 下一个是'PointerToRawData',32位,它是从文件起始到节数据的偏移量。如果是0,节数据不包含在文件内,在加载时被确定。 然后是'PointerToRelocations',32位,和'PointerToLinenumbers',32位,'NumberOfRelocations',16位,'NumberOfLinenumbers',16位.所有这些信息仅仅用于目标文件。可执行文件有一个特殊的基准重定位目录,如果存在行号信息,一般包含在特殊目的的调试段或其他。 最后一个是32位的'Characteristics',它是一组标志描述如何处理节的内存。 bit5(IMAGE_SCN_CNT_CODE),置1,节内包含可执行代码。 bit6(IMAGE_SCN_CNT_INITIALIZED_DATA)置1,节内包含的数据在执行前是确定的。 bit7(IMAGE_SCN_CNT_UNINITIALIZED_DATA)置1,本节包含未初始化的数据,执行前即将被初始化为0。一般是BSS. bit9(IMAGE_SCN_LNK_INFO)置1,节内不包含映象数据除了注释,描述或者其他文档外,是一个目标文件的一部分,可能是针对链接器的信息。比如哪个库被需要。 bit11(IMAGE_SCN_LNK_REMOVE)置1,在可执行文件链接后,作为文件一部分的数据被清除。 bit12(IMAGE_SCN_LNK_COMDAT)置1,节包含公共块数据,是某个顺序的打包的函数。 bit15(IMAGE_SCN_MEM_FARDATA)置1,不确定。 bit17(IMAGE_SCN_MEM_PURGEABLE)置1,节的数据是可清除的。 bit18(IMAGE_SCN_MEM_LOCKED)置1,节不可以在内存内移动。 bit19(IMAGE_SCN_MEM_PRELOAD)置1,节必须在执行开始前调入。 Bits20to23指定对齐。一般是库文件的对象对齐。 bit24(IMAGE_SCN_LNK_NRELOC_OVFL)置1,节包含扩展的重定位。 bit25(IMAGE_SCN_MEM_DISCARDABLE)置1,进程开始后节的数据不再需要。 bit26(IMAGE_SCN_MEM_NOT_CACHED)置1,节的数据不得缓存。 bit27(IMAGE_SCN_MEM_NOT_PAGED)置1,节的数据不得交换出去。
|