Можем ли мы использовать заголовок программы или другие смещения?
Информация, необходимая для запуска двоичного файла, содержится в заголовках программы (используйте readelf -Wl a.out
, чтобы увидеть, что там
Вы можете вычислить минимальный требуемый размер двоичного файла, найдя максимальное значение phdr->p_offset + phdr->p_filesz
. Если вы усекаете файл до этого размера, он должен продолжать работать (или, по крайней мере, загружаться и достигать main
).
Но файл может содержать любое количество дополнительных незагружаемых разделов, поэтому не будьте удивлены, если размер, который вы вычисляете, меньше размера файла на диске.
Требуются ли эти дополнительные разделы или нет, полностью зависит от исполняемого файла - он может иметь код, который open
s argv[0]
, seek
s до некоторого смещения и read
s данных оттуда (в этом случае приложение перестанет работать после усечения).
PS
при условии, что ... SHT - последняя часть ELF.
Это предположение не обязательно верно и, конечно, не требуется для того, чтобы файл был правильным ELF
файлом.