По опыту и просмотру справочной страницы для strip
, похоже, что strip
не предполагается , чтобы избавиться от каких-либо разделов и строк, которые не нужны;просто символов .Справочная страница справочника:
GNU strip discards all symbols from object files objfile.
При этом, исходя из опыта, strip
, даже без --strip-all
, удаляет ненужные для загрузки разделы, такие как .symtab
и .strtab
, и вы можете, как вы заметили, удалить нужные разделы с помощью --remove-section
.
В качестве примера раздела .notes
я взял /bin/ls
из своего 64-разрядного блока Ubuntu 11.10:
$ readelf -Wn /bin/ls
Notes at offset 0x00000254 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.15
Notes at offset 0x00000274 with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 3e6f3159144281f709c3c5ffd41e376f53b47952
Включает раздел .note.ABI-tag
и раздел .note.gnu.build-id
.Похоже, что они содержат данные, которые не нужны для загрузки программы, но также не являются стандартными, и strip
не знает, что они не нужны для правильного запуска программы, поскольку ELF может иметь любойколичество дополнительных «неизвестных» разделов, которые небезопасно удалить.Поэтому вместо виртуального белого списка (который с треском провалится) он использует черный список разделов, от которых он знает, что может избавиться, и делает это.
Короткая версия: эти разделы не кажутся стандартнымии может использоваться для разных вещей, поэтому strip
не может знать, что их безопасно удалить.Но, основываясь на информации внутри той, которую я взял выше, если это ваша собственная программа, ее почти наверняка можно удалить.