2014-10-10 19 views
2

測試是在32位x86 Linux上進行的。爲了獲得ELF二進制文件的大小,size和ls有什麼區別?

爲了得到一些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

size(1)告訴你文件中各個部分的大小。 ls(1)告訴你ELF文件包含的字節數。它們服務於完全不同的目的,哪一個更「可靠」完全取決於你要對文件做什麼。

+0

那你能告訴我爲什麼這兩種尺寸不一樣? – computereasy 2014-10-11 15:13:48

+0

由於該文件不僅包含部分的內容。 – 2014-10-11 16:10:23

+0

是的..我的意思是..這是我感到困惑,除了部分,'ELF'文件還包含什麼? – computereasy 2014-10-11 18:10:26

0

你可能會想到一個精靈文件包含有關在運行時鏈接程序的各種信息。所有以輸入形式提供的信息(.text,.data,.bss,.rel。*等)全部存儲在elf文件的各個部分中。這些部分由存儲在二進制文件某處的部分表頭管理。

您可以通過

size sha512sum 

獲得的部分內容的大小,但是,如果你想獲得的文件(包括隨着部分內容的總大小 - 小精靈頭,程序頭表和節頭表),則可以使用

ls -la sha512sum 

注意,當程序被加載(在任何地址,即基址),這些部分的內容在從基地址各種偏移映射。映射可能不連續,程序的運行時映像可能大於文件大小。另外,請注意,某些部分(如只包含零的.bss)甚至不存儲在文件中。程序加載器映射一個內存區域並在其中填充零,而不是從文件中複製零。這節省了大量的磁盤空間,減少了文件大小(從而減少了將二進制文件加載到內存中的時間)。

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

相關問題