Google

星期三, 一月 23, 2008

PE Format(12)

6-9)然后,我们得到“PointerToRelocations”(意味“重定位指针”,32位)和“PointerToLinenumbers”(意味“行数指针”,也是32位),以及“NumberOfRelocations”(意味“重定位数”,
16位)和“NumberOfLinenumbers”(意味“行数数”,也是16位)。所以这些都是只用于目标文件的信息。可执行文件拥有一个特殊的基址重定位目录,并且行数信息(如果真的存在的话)通常包含在有一个特殊目的的调试段中或者别的什么地方。

  10)节头的最后一个成员是32位的“Characteristics”(意味“特性”),它是一串描述节的内存如何被处理的标志:

  如果位5IMAGE_SCN_CNT_CODE(含有代码的节)被置1,表示节中包含可执行代码。

  如果位6IMAGE_SCN_CNT_INITIALIZED_DATA(含有初始化数据的节)被置1,表示节中包含执行开始前即取得已定义值的数据。换言之:文件中节的数据就是有意义的。

  如果位7IMAGE_SCN_CNT_UNINITIALIZED_DATA(含有未初始化数据的节)被置1,表示节中包含未初始化数据,并需于执行开始前被初始化为全0。这通常是BSS节。

  如果位9IMAGE_SCN_LNK_INFO(链接器信息节)被置1,表示节中不包含映象数据,只有一些注释、描述或者其他的文档。这些信息是目标文件的一部分,并有可能是提供给链接器的信息,比如需要哪些库文件。

  如果位11IMAGE_SCN_LNK_REMOVE(链接可删除节)被置1,表示数据是目标文件的、被预定于可执行文件被链接后丢弃掉的节的一部分。常和位9连用。

  如果位12IMAGE_SCN_LNK_COMDAT(链接通用块节)被置1,表示节中包含“commonblockdata”(通用块数据),也即某种形式的打包函数。

  如果位15IMAGE_SCN_MEM_FARDATA(内存远程数据节)被置1,表示我们拥有远程数据----意味着什么。此位的含义不明。

  如果位17IMAGE_SCN_MEM_PURGEABLE(内存可清除节)被置1,表示节中的数据可清除----但我认为它和“可丢弃”不是一回事,可丢弃拥有自己的标志位,参见后面。同样,它也明显的不是用来指示16位信息的,因为它也有一个IMAGE_SCN_MEM_16BIT定义。此位的含义不明。

  如果位18IMAGE_SCN_MEM_LOCKED(内存被锁节)被置1,表示节不应该被从内存中移除?抑或表明没有重定位信息?此位的含义不明。

  如果位19IMAGE_SCN_MEM_PRELOAD(内存预载入节)被置1,表示节在执行开始前应该被页载入?此位的含义不明。

标签: , ,

0 条评论:

发表评论

<< 主页

辽ICP备05003652号
流风洄雪听天籁,轻云蔽日看落花

Powered by Blogger