Как извлечь исходный код C из .so файла? - PullRequest
14 голосов
/ 09 мая 2011

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

Спасибо, Ravi

Ответы [ 5 ]

17 голосов
/ 09 мая 2011

Нет. После того, как вы скомпилируете свой код, в двоичном коде его не останется, только машинный код.

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

2 голосов
/ 10 мая 2011

Отказ от ответственности: я работаю в Hex-Rays SA.

Декомпилятор Hex-Rays - единственный коммерчески доступный декомпилятор, который мне известен, который хорошо работает с реальным x86 и кодом ARM.,Это правда, что вы не получаете первоисточник, но вы получаете что-то, что эквивалентно этому.Если вы не удалили свой двоичный файл, вы могли бы даже получить имена функций или, если повезет, даже типы и локальные переменные.Однако, даже если у вас нет информации о символах, вам не нужно придерживаться первого раунда декомпиляции.Декомпилятор Hex-Rays - интерактивный - вы можете переименовывать любую переменную или функцию, изменять типы переменных, создавать типы структур для представления структур в исходном коде, добавлять комментарии и так далее.С небольшой работой вы можете восстановить много .И довольно часто вам нужен не весь исходный файл, а какой-то критический алгоритм или функция - и эти шестнадцатеричные лучи обычно могут предоставить вам.

Посмотрите на demo видео и сравнение страницы .Все еще думаете, что «пялиться на сборку» - это то же самое?

2 голосов
/ 09 мая 2011

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

objdump -D --disassembler-options intel sjt.o для получения синтаксической сборки Intel

objdump -D --disassembler-options att sjt.o или objdump -D sjt.o для получения синтаксической сборки AT & T

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

0 голосов
/ 21 октября 2013

Вы не можете. Но вы можете открыть его как архив в 7-Zip. Вы можете увидеть тип файла и размер каждого файла отдельно в этом. Вы можете заменить файлы в нем вашими пользовательскими файлами.

0 голосов
/ 09 мая 2011

Нет.В общем, это невозможно.Исходный код не упакован в скомпилированные объекты или библиотеки.

...