Из опыта и глядя на странице человека для strip
, это выглядит как strip
не должен избавиться от любых и всех разделов и строк, которые не нужны; только символы. Quoth человека странице:
GNU strip discards all symbols from object files objfile.
Это, как говорится, из опыта, strip
, даже без --strip-all
, удаляет разделы ненужные для загрузки, такие как .symtab
и .strtab
, и вы можете, как вы обратите внимание, удалить разделы, которые вы хотите использовать с --remove-section
.
В качестве примера .notes
секции, я взял /bin/ls
из моей Ubuntu 11.10 64-битного поля:
$ 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
не может знать, что их можно удалить. Но основываясь на информации внутри той, которую я взял выше, если это ваша собственная программа, почти наверняка ее можно удалить.
Спасибо Dan. Имеет смысл для меня. – srking
Некоторые ссылки на то, что .note.gnu.build-id: https://fedoraproject.org/wiki/Releases/FeatureBuildId и что люди делают с этим: https://lkml.org/lkml/2011/12/ 15/162 – pfalcon
strip --remove-section = .note.gnu.build-id –