К сожалению, я потерял свой исходный код, и у меня просто есть выходной файл, созданный с помощью gcc в linux, и у меня сейчас нет доступа к моему компьютеру. Есть ли способ конвертировать выходной файл в исходный файл (в c под linux)?
К сожалению, я потерял свой исходный код, и у меня просто есть выходной файл, созданный с помощью gcc в linux, и у меня сейчас нет доступа к моему компьютеру. Есть ли способ конвертировать выходной файл в исходный файл (в c под linux)?
Ответы:
Итак, у вас была корова, но вы случайно превратили ее в гамбургер, и теперь вы хотите вернуть свою корову.
Извините, просто так не работает.
Просто восстановите исходный файл из ваших резервных копий.
Ах, у вас не было резервных копий. К сожалению, вселенная не дает вам перерыва для этого.
Вы можете декомпилировать двоичный файл. Это не даст вам ваш исходный код, но даст вам некоторый исходный код с таким же поведением. Вы не получите имена переменных, если это не двоичный файл отладки. Вы не получите ту же логику, если не скомпилировали без оптимизации. Очевидно, вы не получите комментарии.
Я использовал Boomerang для декомпиляции некоторых программ, и результат стал более читабельным, чем машинный код. Я не знаю, лучший ли это инструмент. Во всяком случае, не ожидайте чудес.
Несколько инструментов являются общими в обратном проектировании исполняемого файла.
В большинстве случаев, которые я видел, код необходимо было переписать с нуля, поддерживать как программу на языке ассемблера или восстанавливать, повторно применяя запросы на изменение к более старой версии.
То, что вы хотите сделать, называется «декомпиляция». Существует много декомпиляторов, и нецелесообразно охватывать их все здесь.
Однако, как общее замечание: преобразование из исходного кода C в исполняемый машинный код с потерями. Например:
Редко код компилируется как написано. Большинство компиляторов в наши дни радикально изменят ваш код, чтобы оптимизировать его. Поэтому, когда вы декомпилируете, компилятор может только догадываться о том, как должен выглядеть исходный код, он не может узнать, каким был ваш код, потому что его больше нет. Если декомпилятор хорош, полученный вами код будет, по крайней мере, скомпилирован обратно в эквивалентный исполняемый файл, а затем вы можете начать медленно реорганизовывать его для удобства чтения. Но, скорее всего, декомпилятор создаст абсолютно нечитаемый код спагетти, и расшифровка будет огромной головной болью. Иногда может потребоваться меньше усилий, чтобы просто переписать программу с нуля.