LINUX.ORG.RU
ФорумTalks

Ламерский вопрос


0

0
Что мешает зная как работает компилятор получить заново из бинарников исходный код программы? (не на асемблере, а на том же С).
anonymous
отображение между сишным кодом и ассемблерным не есть взаимно однозначное.
anonymous
()
А что мешает из песка сотворить раковину или из пыли камень ? =)

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

anonymous
()
Ответ на: комментарий от anonymous
Стоп, но ведь исходный код преобразуется в бинарный по чёткому алгоритму, или я что-то не понимаю?
anonymous
()
Ответ на: комментарий от anonymous
Да ну? Прямо таки для любой программы? И что значит "хорошо структурированный"? ЯА для i8086 "хорошо структурирован"?
anonymous
()
Ответ на: комментарий от anonymous
> Хорошо структурированный ассемблер

Это что за чудо такое?

anonymous
()
Ответ на: комментарий от anonymous
Попробую пояснить на пальцах: 2 разных по смыслу и содержанию строки на языке С могут быть транслированы в идентичный ассемблерный код. Если ты захочешь по этому ассемблерному коду восстановить С-шный возникнет неоднозначность. Теперь понятно?
anonymous
()
Дело еще усложняется тем, что разные версии одного и того же компилятора (gcc например), могут компилировать один и тот же код по-разному. Потом еще есть различные флаги оптимизации по скорости, флаги оптимизации под конкретный процессор, различные версии линкуемых библиотек и пр. затрудняющие "декомпилирование" программы. Но самая фундаментальная сложность - неоднозначность.
anonymous
()
Ответ на: комментарий от anonymous
То, что код на С ты можешь преобразовать в несколько вариантов ассемблерного кода, дающего 1 и тот же результат (например, оптимизации и использование разных инструкций, делающих одно и то же) тебя не смущает?
Shaman007 ★★★★★
()
Ответ на: комментарий от Shaman007
Спасибо. Помогли ламеру :) избавили от головной боли :)
anonymous
()
Ответ на: комментарий от anonymous
a+b=c - очень чёткий алгоритм. А теперь, ламер, восстанови из того, что c=4, точные значения a и b. Понял?
anonymous
()
Ответ на: комментарий от anonymous
>Стоп, но ведь исходный код преобразуется в бинарный по чёткому >алгоритму, или я что-то не понимаю
Преобразуется, а походу оптимизируется. Вообщем это необратимый процесс, другое дело что изучив ассемблерный текст ты можешь понять алгоритм и написать другую программу с этим алгоритмом, но исходную программу ты получить не сможешь.

Дизассемблирование программ написаных даже на ассемблере невозможно автоматизировать, что уж говорить о C/C++.
cpu
()
там все правильно сказали, почему этого нелья в принципе сделать
автоматически; но есть такой инструмент как IDA (под винды точно
есть, под линукс не уверен), который пытается эту задачу с переменным
успехом решать. И в некоторой степени, для кода который не был
специально особенно запутан, Си-конструкции восстанавливаются.
Кстати для java по скомпилированному коду исходный текст восстанавливается
практически однозначно, и защита от дизассемблирования там довольно
острая проблема.
anonymous
()
Ответ на: комментарий от anonymous
IDA даже асемблер востановить автоматически не может, что уж говорить о C/C++. Я тебе могу сейчас навернуть иеархию классов которые в результате откомпилируются скажем в вызов printf - какое к чертям востановление кода ?
cpu
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.