конвертировать исполняемый файл обратно в исходный код 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. Карандаш и бумага, верьте или нет, для потоков и идей.

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

  • Как работает работа на дому?
  • Перенаправление Io против производительности регистрации файлов c / c ++
  • Как вызвать фрагментацию памяти на встроенном устройстве на базе Linux?
  • libpcap отсутствует
  • Компилятор для 32-разрядной архитектуры LSB MIPS MIPS32
  • Внешняя команда для принудительного сброса потока
  • Что такое параллельное распределение памяти?
  • Как скомпилировать Solaris в Debian?
  • Как написать программное обеспечение для компиляции с внешними библиотеками?
  • Я не могу получить исходный код источника Realtek 8723
  • В чем преимущество архивирования объектных файлов C в статической библиотеке (файл .a)?
  • Linux и Unix - лучшая ОС в мире.