Что разделяется и не - разделенные исполняемые файлы в Unix?

Для ext3/ext4 можно попытаться восстановить инструменты использования файлов как extundelete или ext3grep, или даже пойти, смешав со структурами низкого уровня вручную (не для слабонервных); для многих файловых систем можно попытаться искать еще перезаписанные блоки определенными шаблонами (например, magicrescue может искать заголовки JPEG среди других вещей). Обратите внимание, что они используют эвристику для восстановления файлов с оставленных позади метаданных, таким образом, полное восстановление не гарантируется - это - больше последней случайной ставки (поскольку они требуют, чтобы некоторые трассировки файлов остались в журнале, и что блоки еще не были перезаписаны).

Так, во всех отношениях, файлы, удаленные с rm не стали - Вы могли попробовать такую некромантию как эти инструменты предложение, но не зависите от него: это инструменты для попытки, когда все остальное перестало работать. Лучше откопайте свои последние резервные копии (Вы делали резервные копии, правильно? О, хорошо, живой и учатся...).

37
07.11.2010, 23:20
1 ответ

При компиляции исполняемого файла с флагом-g gcc он содержит отладочную информацию. Это означает для каждой инструкции существует информация, какая строка исходного кода генерировала ее, название переменных в исходном коде сохраняется и может быть связано с памятью соответствия во времени выполнения и т.д. Полоса может удалить эту отладочную информацию и другие данные, включенные в исполняемый файл, который не необходим для выполнения для сокращения размера исполняемого файла.

50
27.01.2020, 19:36
  • 1
    См. также полосу (1) страница справочника. Обычно полоса удаляет все символы, так как они не строго необходимы; это удаляет информацию об отладке также, но символы являются большой вещью –  Michael Mrozek♦ 11.10.2010, 10:15
  • 2
    Понятие делает вывод к наиболее форматам исполняемых файлов, это не характерно для gcc или даже для Unix. –  Gilles 'SO- stop being evil' 07.11.2010, 23:20
  • 3
    у меня был исполняемый файл 40 МБ, который при разделении был уменьшен до 6 МБ - именно так, Вы понимаете вид пространства, что отладочные данные поднимают. –  Nathan Osman 10.08.2011, 05:47
  • 4
    Так, делает разделение исполняемого файла prog.e это было создано с gcc -g -o prog.e prog.c получает Вас эквивалент компиляции с gcc -O0 -o prog.e prog.c? –  ysap 10.07.2015, 16:53
  • 5
    @ysap не, это не имеет никакого отношения к оптимизации (-O). Ассемблерный код остается таким же, разделяется ли файл. Вы получаете исполняемый файл без информации об отладке (таким образом, Вы правы относительно потери "-g"), и без всех символов (то есть, имена функций, имена глобальной переменной...). Это - эквивалент "gcc-s-o prog.e prog.c". Когда программа выполнена, символы не имеют никакого значения. Но например собственному программному обеспечению всегда разделяли символы, потому что иначе все могли знать настоящие имена функций и их местоположений. –  Pikrass 26.07.2015, 19:59

Теги

Похожие вопросы