c++ - xdata 部分有什么作用?

标签 c++ c coff

我有一个简单的 hello world 程序,在使用 /headers 标志 dumpbin 后,我得到以下输出:

FILE HEADER VALUES
            8664 machine (x64)
               D number of sections
        5A3D287F time date stamp Fri Dec 22 18:45:03 2017
             48F file pointer to symbol table
              2D number of symbols
               0 size of optional header
               0 characteristics

Summary

           F .data
          A0 .debug$S
          2F .drectve
          24 .pdata
          B9 .text$mn
          18 .xdata

xdata 部分到底做什么以及它包含什么? msdn 上没有信息。

最佳答案

供将来引用:

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

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

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

关于c++ - xdata 部分有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944583/

相关文章:

c++ - 如何返回错误消息字符串

c++ - 这个简单的 pthread 代码的奇怪行为

c - 在 C 中是否可以在不移动它的情况下缩小分配的内存?

c++ - 函数的隐藏/锚定参数?

c - 反汇编 Microsoft Visual Studio 2003 编译器输出

c++ - IntelliSense:标识符 "XMFLOAT4"未定义

C++ 处理在异常中创建的对象

c - 指针错误信息

.NET 库访问 PE header