Действительно ли нужен раздел ELF .notes? - PullRequest
7 голосов
/ 22 февраля 2012

В Linux я пытаюсь раздеть статически связанный файл ELF до самого необходимого.Когда я запускаю:

strip --strip-unneeded foo

или

strip --strip-all foo

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

Раздел .notes действительно нужен, или я могу безопасно отключить его с помощью --remove-section?

Спасибо за любую помощь.

1 Ответ

7 голосов
/ 23 февраля 2012

По опыту и просмотру справочной страницы для 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 не может знать, что их безопасно удалить.Но, основываясь на информации внутри той, которую я взял выше, если это ваша собственная программа, ее почти наверняка можно удалить.

...