Вычисление размера файла ELF на основе информации заголовка - PullRequest
2 голосов
/ 06 мая 2020

Я понимаю, что можно вычислить размер файла ELF (то есть, где он заканчивается) на основе информации , найденной в заголовке (т.е. e_shoff + (e_shentsize * e_shnum)), при условии, что существует таблица заголовков раздела ("SHT"), а SHT - последняя часть ELF.

Однако SHT не требуется для загрузки двоичного файла, и мне было интересно, можно ли было бы вычислить ту же информацию, если бы SHT отсутствовал (например, разделенный двоичный файл). Можем ли мы использовать заголовок программы или другие смещения для программного вычисления размера?

1 Ответ

3 голосов
/ 06 мая 2020

Можем ли мы использовать заголовок программы или другие смещения?

Информация, необходимая для запуска двоичного файла, содержится в заголовках программы (используйте readelf -Wl a.out, чтобы увидеть, что там

Вы можете вычислить минимальный требуемый размер двоичного файла, найдя максимальное значение phdr->p_offset + phdr->p_filesz. Если вы усекаете файл до этого размера, он должен продолжать работать (или, по крайней мере, загружаться и достигать main).

Но файл может содержать любое количество дополнительных незагружаемых разделов, поэтому не будьте удивлены, если размер, который вы вычисляете, меньше размера файла на диске.

Требуются ли эти дополнительные разделы или нет, полностью зависит от исполняемого файла - он может иметь код, который open s argv[0], seek s до некоторого смещения и read s данных оттуда (в этом случае приложение перестанет работать после усечения).

PS

при условии, что ... SHT - последняя часть ELF.

Это предположение не обязательно верно и, конечно, не требуется для того, чтобы файл был правильным ELF файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...