LINUX.ORG.RU
ФорумTalks

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


0

0

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

anonymous

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

отображение между сишным кодом и ассемблерным не есть взаимно однозначное.

anonymous ()

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

А что мешает из песка сотворить раковину или из пыли камень ? =)

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

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

Да ну? Прямо таки для любой программы? И что значит "хорошо структурированный"? ЯА для i8086 "хорошо структурирован"?

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

> Хорошо структурированный ассемблер

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

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

Попробую пояснить на пальцах: 2 разных по смыслу и содержанию строки на языке С могут быть транслированы в идентичный ассемблерный код. Если ты захочешь по этому ассемблерному коду восстановить С-шный возникнет неоднозначность. Теперь понятно?

anonymous ()

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

Дело еще усложняется тем, что разные версии одного и того же компилятора (gcc например), могут компилировать один и тот же код по-разному. Потом еще есть различные флаги оптимизации по скорости, флаги оптимизации под конкретный процессор, различные версии линкуемых библиотек и пр. затрудняющие "декомпилирование" программы. Но самая фундаментальная сложность - неоднозначность.

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

То, что код на С ты можешь преобразовать в несколько вариантов ассемблерного кода, дающего 1 и тот же результат (например, оптимизации и использование разных инструкций, делающих одно и то же) тебя не смущает?

Shaman007 ★★★★★ ()
Ответ на: Re: Ламерский вопрос от Shaman007

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

Спасибо. Помогли ламеру :) избавили от головной боли :)

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

a+b=c - очень чёткий алгоритм. А теперь, ламер, восстанови из того, что c=4, точные значения a и b. Понял?

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

>Стоп, но ведь исходный код преобразуется в бинарный по чёткому >алгоритму, или я что-то не понимаю
Преобразуется, а походу оптимизируется. Вообщем это необратимый процесс, другое дело что изучив ассемблерный текст ты можешь понять алгоритм и написать другую программу с этим алгоритмом, но исходную программу ты получить не сможешь.

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

cpu ()

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

там все правильно сказали, почему этого нелья в принципе сделать
автоматически; но есть такой инструмент как IDA (под винды точно
есть, под линукс не уверен), который пытается эту задачу с переменным
успехом решать. И в некоторой степени, для кода который не был
специально особенно запутан, Си-конструкции восстанавливаются.
Кстати для java по скомпилированному коду исходный текст восстанавливается
практически однозначно, и защита от дизассемблирования там довольно
острая проблема.

anonymous ()
Ответ на: Re: Ламерский вопрос от anonymous

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

IDA даже асемблер востановить автоматически не может, что уж говорить о C/C++. Я тебе могу сейчас навернуть иеархию классов которые в результате откомпилируются скажем в вызов printf - какое к чертям востановление кода ?

cpu ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.