Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为了获得ELF二进制文件的大小,需要什么';尺码和尺码有什么区别?_Linux_Elf - Fatal编程技术网

Linux 为了获得ELF二进制文件的大小,需要什么';尺码和尺码有什么区别?

Linux 为了获得ELF二进制文件的大小,需要什么';尺码和尺码有什么区别?,linux,elf,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

测试在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二进制文件的大小,哪种方法更可靠?为什么这两种方法不同?

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

您可以认为elf文件包含有关在运行时加载和链接程序的各种信息。作为输入(.text、.data、.bss、.rel.*等)提供的所有信息都存储在elf文件的各个部分中。这些节由存储在二进制文件中某处的节头表管理

您可以通过

size sha512sum
但是,如果您想获得文件的总大小(包括节内容-elf头、程序头表和节头表),那么您将使用

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


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

那么,您能告诉我为什么这两个大小不同吗?因为文件包含的不仅仅是节的内容。是的。。我是说。。这就是我所困惑的,除了小节之外,
ELF
文件还包含哪些标题。符号表。加载和/或链接和/或调试ELF所需的所有其他内容。