Ребята, а можно так чтобы написать программу на Си, потом её оптимизировать, чтобы она стала по людски написаной, а потом вернуть на язык Си, и посмотреть какой она стала? (Краснеет). Она вообще изменится? (Тоесть как исполняемый файл, превратить в написаный на Си).
Прокачивать скилл, исследовать чужой код. Иначе никак. Ну или нанять тренера за $$, который бы сказал, как можно сделать лучше в каждом конкретном случае.
Нельзя|, потому что есть ещё такая фигня, как low-level optimizations. Но определёнными конструкциями в языке можно облегчить компилятору эти самые low-level optimizations.
Дело все в том, что скомпилированный код не соответствует условию Фано (относительно си инструкций), следовательно, его нельзя однозначно восстановить в исходный вид.
Гляньте на выхлоп HR в данном кейсе Спойлер: клац Очевидно, что исходный сорс на си так не выглядел. Это и значит, что декомпиляция неоднозначна.
Пыщ.. не путайте теплое с мягким. и не надо разводить холивар. Вы разговариваете о разных вещах. Когда есть некоторый код на Си , допустим это бинарная сортировка. Компилятор за _Несколько_ проходов генерирует код, в конечном счете получается байткод. Изучая байткод (дизассемблер) - либо сами, либо тулами, мы можем понять что там делается и сделать Си код (если точнее - алгос), тем более что нам известны компиль-паттерны. Но при этом полученный код, никогда не будет равен тому говнокоду, который мог написать Вася в своей бинарной сортировке. Но код будет очень похож. Я думю unc1e имел ввиду преобразование 1-1. Я даже больше скажу, при оптимизации, мы можем потерять большую часть конструкций, а некоторые получить совсем другими. Исходно начальным Си кодом оно никогда не будет.
Minzdrav, посмотрите цикл статей Криса Техника оптимизации под Linux::Журнал СА 2.2005, как раз о программах на Си, может быть, найдете что-нибудь полезное
Minzdrav, > Так можно оттранслировать исполняемый файл, обратно в Си? Конечно же декомпиляция вас не устраивает, так как задача не про неё так понимаю. При компиляции происходит утеря смысла(компиляторный уровень), обратное восстановление на данный момент не возможно, так как вам нужно восстановить логику и смысл работы - фактически дать смысловые имена переменным етц. Интересно откуда такая идея появилась - раз многие задачи можно обойти путём хитрых решений, то вы по этой причине решили что и эта задача может быть так решена, тоесть учить язык не нужно, а можно провернуть хитрый трюк с автоматикой и вуа ля
unc1e, > скомпилированный код не соответствует условию Фано На вики описание бредовое(не отражает смысл) данного понятия/термина, там прямо сказано что мы это не юзаем и не понимаем(в смысле термин). Это называется утерей данных в русскоязычном понимании. В математике пример - интегрирование.
Инде. Фи. Я и не собирался зарабатывать деньги таким пошлым способом. А за разъяснения - уместны. Майкл. Статья любопытная. Скачал в коллекцию. А по ходу нашёл интересную статью у Криса, по взлому все и вся: https://web.archive.org/web/20130819215757/http://www.insidepro.com/kk/099/099r.shtml Что до программы про которую пишет Реверскод: https://xakep.ru/2008/03/14/42769/ И статья, где автор пытался откомпилировать код, (оттранслированный из машинного в Си с помощью HexRays), получает: Компилятор, выдав более сотни ошибок, просто прерывает компиляцию, поскольку продолжать ее дальше нет никакого смысла. Значит пытаются сделать ПО для такой трансляции, но безуспешно. Говорят же, что на Си можно писать практически как на ассемблере. Интересно, можно листинг дезассемблера перекомпилировать в такие примтивные конструкции языка Си? Не так сильно завязаные на архитектуру, как ассемблер? Чисто гипотетически? Или я говорю глупости?
Ах_еть, ты мне просто глаза открыл! А я читал - читал, про декомпиляцию, так нихрена не мог понять, что она делает. Там столько всего умного написано.
скажите нам как гуру реверса вы еще нейросеть для автоматического узнавания высокоуровневых конструкций не запилили (в потоке процессорных инструкций дизасма) ??
так лавку за гвоздями самому придется разглядывать ??? если без стеба, я не очень слежу за идой ее приблудами типа хексрейс и их возможностями, поэтому просто интересуюсь много ли они автоматически вытаскивают из листинга дизасма.