【发布时间】:2019-01-28 18:53:36
【问题描述】:
我遇到了 size 命令,它给出了 ELF 文件的部分大小。在玩弄它的同时,我为最简单的 C++ 程序创建了一个输出文件:
int main(){return 0;}
显然,我没有定义任何已初始化或未初始化的数据,那么为什么我的 BSS 和 DATA 部分的大小为 512 和 8 个字节?
我认为可能是因为int main(),我尝试为以下 C 程序创建目标文件:
void main(){}
对于 BSS 和 DATA 部分,我仍然没有得到 0。
是因为为这些部分分配了某个最小大小的内存吗?
编辑-我认为这可能是因为链接库,但我的对象是动态链接的,所以可能不应该是问题
【问题讨论】:
-
有一个用于 C 运行时的静态库,由编译器链接,其中包括调用 main() 的 real 入口点。您应该看到真正的入口点功能,例如如果你运行
objdump --disassemble。objdump -f将显示包括“起始地址”在内的信息。 -
当我在对象上运行 objdump 时,我看到一些库链接到我的对象,
file a.out的输出说它是动态链接的 ELF,所以我假设没有静态链接的库,猜我错了。 -
用-g编译它并在上面运行
nm- 你会看到elf文件中的所有符号。