2014-10-10 4 views
2

Тест находится на 32-битной x86 Linux.Чтобы получить размер ELF, какая разница между размером и 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

+0

Поскольку файл содержит больше, чем просто содержимое разделов. –

+0

Да .. Я имею в виду .. это то, о чем я смущен, кроме разделов, что еще содержит файл ELF? – computereasy

0

Вы можете подумать о файле эльфа, который содержит различную информацию о загрузке &, связывающей программу во время выполнения. Вся информация, предоставляемая в качестве входных (.text, .data, .bss, .rel. * И т. Д.), Хранится в разных разделах эльфийского файла. Этот раздел управляется таблицей заголовка раздела, хранящейся где-то в двоичном формате.

Вы получаете размер содержания разделов по

size sha512sum 

, но, если вы хотите, чтобы получить общий размер файла (который включает в себя наряду с содержанием раздела - Эльф-заголовок, таблица программ-заголовок , и раздел заголовок таблица), то вы будете использовать

ls -la sha512sum 

Следует отметить, что, когда программа загружена (по любому адресу, а именно базовый адрес), содержимые секций отображаются на различном смещении от базового адреса , Отображение может быть не постоянным, а время выполнения программы может быть больше размера файла. Также обратите внимание, что некоторые разделы (например, .bss, содержащие только нули) даже не хранятся в файле. Программа-загрузчик отображает область памяти и заполняет в ней нули вместо копирования нулей из файла. Это экономит много дискового пространства & уменьшает размер файла (и, следовательно, время загрузки двоичного файла в память).

Таким образом, размер памяти в размере программы может быть больше размера файла.

Смежные вопросы