Google

星期三, 一月 23, 2008

PE Format(16)

典型的名称有“.bss”、“BSS”之类。

  有些节数据“没有”被数据目录指向。它们的内容和结构是由编译器而不是链接器提供。

  (栈段和堆段不是二进制文件中的节,它们是由加载器根据可选头中的栈大小和堆大小项来创建的。)

  5.版权(copyright)

  -------------------

  为了从一个简单的目录节开始讲解,让我们来看一看数据目录“IMAGE_DIRECTORY_ENTRY_COPYRIGHT”(版权目录项)项。它的内容是一个版权信息或ASCII形式的描述字符串(不是以0结尾的),象“Gonkulatorcontrolapplication,copyright(c)1848Hugendubel&Cie”这样。这个字符串,通常,是用命令行或者描述文件提供给链接器的。

这个字符串在运行时并不需要,并可能被丢弃。它是不可写的;事实上,应用程序根本不需要存取它。因此,如果已有一个可丢弃的、非可写的节存在,链接器就会找到它;如果没有,就创建一个(命名为“.descr”之类)。然后它就将那个字符串填入该节中并让版权目录项指针指向这个字符串。“IMAGE_SCN_CNT_INITIALIZED_DATA”(含有已初始化数据节)标志位应置为1。

  6.输出符号(exportedsymbols)

  ------------------------------

  (注意:本文的1993年03月12日之前的各个版本中,输出目录的描述有误。文中没有描述中转、只以序数输出、或者使用好几个名称输出等内容。)

  下一件最简单的事情是输出目录,是由“IMAGE_DIRECTORY_ENTRY_EXPORT”(输出目录项)指向的。它是一个典型的在DLL中常见到的目录;包含一些输出函数的入口点(以及输出对象等的地址)。当然可执行文件也可能拥有输出符号但一般没有。

  包含它们的节应该有“已初始化数据的”和“可读的”特性。这样的节应该是不可丢弃的,因为在运行时,进程有可能调用“GetProcAddress()”来寻找一个函数的入口点。如果单独成节的话,本节通常被称作“.edata”;更常见的是,它被并入象“已初始化数据”之类的节中。

  输出表(“IMAGE_EXPORT_DIRECTORY”)的结构由一个头和输出数据,也就是:符号名称、它们的序号和它们的入口点偏移量等构成。

  1)首先,我们有一个没被使用并通常为0的、32位的“Characteristics”(特性)。

  2)然后是一个32位的“TimeDateStamp”(时间日期戳),大概是提供此表被创建的time_t格式的时间;天呀,它的值并不总是有效(有些链接器将它设置为0)。

标签: , ,

0 条评论:

发表评论

<< 主页

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

Powered by Blogger