我有一个简单的 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/