为了获得ELF二进制的大小,size和ls有什么区别?

时间:2014-10-10 14:57:54

标签: linux elf

测试在32位x86 Linux上进行。

为了获得一些ELF二进制文件的大小,我尝试了这两个命令:

ls -la sha512sum
size sha512sum

但问题是尺寸输出是不同的:

ls -la sha512sum
-rwxrwxr-x 1 szw175 szw175 95856 Oct 10 07:50 sha512sum

 size sha512sum
 text      data     bss     dec     hex filename
 89644      488     452   90584   161d8 sha512sum

所以我的问题是,为了评估ELF二进制文件的大小,哪种方法更可靠?为什么这两种方法不同?

2 个答案:

答案 0 :(得分:2)

size(1)告诉您文件中各个部分的大小。 ls(1)告诉您ELF文件包含的字节数。它们服务于完全不同的目的,哪一个更“可靠”完全取决于你将如何处理文件。

答案 1 :(得分:0)

你可以想到一个精灵文件包含有关加载和放大的各种信息。在运行时链接程序。作为输入(.text,.data,.bss,.rel。*等)提供的所有信息都存储在elf文件的各个部分中。这些部分由存储在二进制文件中的section-header表管理。

您可以通过

获得部分内容的大小
size sha512sum

但是,如果你想获得文件的总大小(包括部分内容 - elf-header,program-header table和section-header table),那么你将使用

ls -la sha512sum

注意,当加载程序时(在任何地址,即基地址),段的内容将映射到基址的各种偏移量。映射可能不是连续的,并且程序的运行时映像可能大于文件大小。另请注意,某些部分(如仅包含零的.bss)甚至不存储在文件中。程序加载器映射内存区域并在其中填充零,而不是从文件中复制零。这节省了大量的磁盘空间和减少文件大小(因此,将二进制文件加载到内存中的时间)。

因此,程序的内存映像大小可能大于文件大小。