конвертировать исполняемый файл обратно в исходный код C

К сожалению, я потерял исходный код, и у меня только есть выходной файл, который был создан с помощью gcc в linux, и у меня нет никакого доступа к моему компьютеру. Есть ли способ конвертировать выходной файл в исходный файл (в c Linux)?

2 Solutions collect form web for “конвертировать исполняемый файл обратно в исходный код C”

Итак, у вас была корова, но вы непреднамеренно превратили ее в гамбургер, и теперь вы хотите вернуть свою корову.

Извините, это просто не работает.

Просто восстановите исходный файл из своих резервных копий.

Ах, у вас не было резервных копий. К сожалению, вселенная не дает вам передышки.

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

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

В обратном инжиниринге используется обычный инструмент.

  1. Команда «файл», которая принимает путь к файлу в качестве первого параметра, поэтому вы можете определить (в большинстве случаев), какой тип исполняемого файла у вас есть.
  2. Дисассемблеры, которые показывают ТОЧНО, что делает исполняемый файл, но их трудно прочитать для тех, кто не пишет код сборки на этой конкретной архитектуре или имеет опыт демонтажа.
  3. Декомпиляторы, такие как Boomerang, Hex-ray и Snowman, могут обеспечить некоторую большую читаемость, но они не восстанавливают фактические имена переменных или синтаксис исходной программы, и они не на 100% надежны, особенно в тех случаях, когда инженеры, которые создали исполняемый файл, эти пакеты и пытались еще более запутать безопасность.
  4. Диаграммы потока данных или таблицы. Я не знаю бесплатного инструмента для этого автоматически, но может оказаться полезным сценарий Python или Bash поверх текстового анализатора выходных данных сборки (который может быть написан в sed или Perl).
  5. Карандаш и бумага, верьте или нет, для потоков и идей.

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

  • Скомпилированный исполняемый файл
  • Системные вызовы Linux в C на OSX
  • Как обновить версию gcc-c ++ на Fedora?
  • C на Linux: запуск 25 параллельных процессов значительно быстрее, чем запуск 24
  • Изменение версии Resolv.conf DNS
  • Как заставить оболочку выполнять только внешнее эхо, а не встроенное?
  • Почему Linux имеет компилятор C по умолчанию?
  • Зачем компилировать несколько файлов .cpp в один и тот же исполняемый файл?
  • Реализуются ли потоки как процессы в Linux?
  • непрерывное тестирование проекта C ++ на github с разными дистрибутивами Linux
  • libstdc ++. so.6: open failed: нет такого файла или каталога
  • Interesting Posts

    Использование IPV6 в Hetzener при виртуализации KVM

    Проблема с настройкой iptables (заблокирован трафик LDAP)

    Сенсорная панель с постоянным отключением с функциональной клавишей

    Как определить оптимальные настройки для сенсорной панели Synaptic?

    Инструмент для заметок и списков todo для linux, который позволяет пометить

    Как сделать программу, которая запускается из оболочки, по-прежнему жить после закрытия терминала?

    vim: найдено / var / log или аналогичный

    Реабилитация Debian

    Изменение раскладки клавиатуры при использовании клавиатуры или другого

    Поиск текста в файлах, имеющих определенную папку в пути, а затем отображение соответствующих строк и разрешений файлов

    Ввод каталогов, где имена совпадают в подстроке

    Galera + systemd: wsrep_notify_cmd терпит неудачу с sudo (невозможно изменить в sudoers gid: операция не разрешена)

    Как вычислить общий размер файла, который вы искали с помощью команды «Найти»

    Инструмент для создания отчета о плохом физическом местоположении на диске

    Извлечение только китайских символов

    Linux и Unix - лучшая ОС в мире.