Получение исходного кода из объектного файла - PullRequest
17 голосов
/ 27 февраля 2010

Есть ли способ получить исходный код, используя объектный файл в C?

Например, у меня есть исходный код simple.c

cc simple.c

Теперь у меня есть a.out (объектный файл). По этому a.out могу ли я получить источник?

код simple.c

Ответы [ 5 ]

48 голосов
/ 27 февраля 2010

Нет. Превратить корову в гамбургер довольно легко. Превратить гамбургер в живую корову несколько сложнее.

12 голосов
/ 27 февраля 2010

Существует множество полезных инструментов для извлечения информации из вашего исполняемого файла. Ни один из них не может вернуть вам исходный код (как указал другой пользователь, это невозможно для C), но вы можете попробовать некоторые инструменты обратного инжиниринга. Мой любимый:

  • Objdump (часть пакета "binutils")
  • hte (debian упаковывает его как "ht")

С первым вы можете получить все экспортированные символы и их относительный исполняемый код в терминах сборки (очевидно, это верно только для секций .text). Второй предназначен для работы с архитектурами Intel, но вы сможете анализировать каждый исполняемый файл и получать информацию о разделах и символах ELF.

1 голос
/ 27 февраля 2010

Слова для программ, которые вы ищете: " дизассемблер " (превращение машинного языка в a.out в язык ассемблера) и " декомпилятор " (перевод языка ассемблера C, как объяснил Dacav, это намного сложнее, и результат никогда не удовлетворяет).

Но использование поисковой системы в Интернете с этими словами может дать результаты.

1 голос
/ 27 февраля 2010

Нет.

С помощью обратного инжиниринга (чтения разборки) можно восстановить логику, но имена переменных, комментарии и т. Д. Обычно теряются.

0 голосов
/ 15 июля 2016

Если вы используете Linux, используйте gdb

$ gdb a.out

(ГБД) list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...