Удаление ELF выполняется с помощью панели инструментов gnu binutils со страницы руководства по полосам:
В полосе GNU все символы из объектных файлов objfile удаляются.Список объектных файлов может включать в себя архивы.Необходимо указать хотя бы один объектный файл.
Когда вы говорите, что файл ELF извлекается, что именно происходит?
Удаление удаляет ненужную информацию из двоичного файла.Это могут быть только данные отладки или не экспортированные символы.
Как вырезать файл ELF?
Вы можете удалить двоичный файл, используя полосу, например strip -s yourLittleBinary
- которая заменитфайл с раздетой версией.Опция -s
говорит полосе удалить все символы.Стрип может работать разными способами.Опять же, со страницы руководства:
-R sectionname
--remove-section=sectionname
Remove any section named sectionname from the output file.
Эта опция может быть указана несколько раз.Обратите внимание, что неправильное использование этой опции может привести к невозможности использования выходного файла.
-s
--strip-all
Remove all symbols.
-g
-S
-d
--strip-debug
Remove debugging symbols only.
--strip-unneeded
Remove all symbols that are not needed for relocation processing.
Можно ли каким-то образом реконструировать таблицу символов?
Насколько я знаю, это не таквозможный.Тем не менее, можно создать своего рода файл карты из исполняемого файла перед извлечением, чтобы сохранить информацию, необходимую для отладки.
Разве невозможно установить точки останова в gdb для удаленного исполняемого файла?
Это возможно.Это просто исполняемый файл - без названий символов.Однако, поскольку нет символов, единственное, что (кроме наличия файла карты, который предоставляет вам сопоставление адресов <->) остается, это установка точек останова по определенным адресам.Однако вы можете установить точки останова для любой функции общих библиотек, которую использует рассматриваемый исполняемый файл.
В файлах карты
Вы можете создать файл карты из исполняемого файла с помощью утилиты nm
:
nm -Cn myLittleExecutable > myLittleExecutable.map
Это приведет к сбросу всех символов, C ++ - с разделением (опция -C) и числовой сортировкой (параметр -n).
Ссылки
Это может дать вам некоторыеИдеи: http://www.linuxsa.org.au/meetings/reveng-0.2.pdf
Документы GNU binutils: http://sourceware.org/binutils/docs-2.21/binutils/index.html
Документация GDB: http://www.gnu.org/software/gdb/documentation/