xdata部分做什么?

时间:2017-12-22 16:29:42

标签: c++ c coff

我有一个简单的<table> <tr> <td>content 1</td> </tr> </table> <table> <tr> <td>content 2</td> </tr> </table>程序,在 dumpbin 后面带有 / headers 标志,我得到了这个输出:

hello world

xdata部分究竟做了什么以及它包含什么?没有关于msdn的信息。

2 个答案:

答案 0 :(得分:1)

供以后参考:

  • .text:代码段(考虑功能);启用功能部分或涉及comdat(例如模板)时,可以有多个选择
  • .data:datasegment(想想全局变量);启用数据部分或涉及comdat(例如模板)时,可以有多种选择。
  • .bss:数据段初始化为零(上面没有显示);启用数据部分或涉及comdat(例如模板)时,可以有多种选择。
  • .debug:调试信息;像其他功能一样,涉及功能部分时可以有多个。
  • .pdata:对于x86_64,这是方法的“异常信息”,它定义函数的开始/结束以及指向展开信息的指针(请参见.xdata);在目标文件内部,每个函数重复一次
  • .drectve:不确定;但从名称上我猜猜链接器指令。
  • .xdata:用于x86_64;这是pdata指向的展开信息部分。它包含函数的异常处理程序的位置,以及发生异常时如何解散该函数:https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64?view=vs-2019

后缀“ $”用于排序。鉴于: -.sec $ z -.sec $ data -.sec $ a

在将这些节合并到可执行文件之前先对其进行排序(因此,首先是.sec $ a,然后是数据,然后是z),这可用于为pe节创建开始/结束符号。

答案 1 :(得分:0)

重复的部分用于c ++模板之类的东西,编译器将在需要它的任何翻译单元中实例化模板,然后链接器将选择其中一个实例化(通常是第一次遇到)。

不太常见的是特定于编译器的功能,如Microsoft的__declspec(selectany),它允许多次定义变量,链接器只会选择其中一个定义并丢弃其余的定义。

gcc的ld脚本将采用所有.text *部分来创建链接可执行文件的最终.text。您可以检查这些脚本,以了解链接器如何使用目标文件创建可执行文件。