Как оттранслировать с Си на Си?

Тема в разделе "WASM.BEGINNERS", создана пользователем Minzdrav, 18 дек 2017.

  1. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Ребята, а можно так чтобы написать программу на Си, потом её оптимизировать,
    чтобы она стала по людски написаной, а потом вернуть на язык Си, и
    посмотреть какой она стала? (Краснеет).
    Она вообще изменится?
    (Тоесть как исполняемый файл, превратить в написаный на Си).
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Прокачивать скилл, исследовать чужой код. Иначе никак.
    Ну или нанять тренера за $$, который бы сказал, как можно сделать лучше в каждом конкретном случае.
     
  3. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Да это понятно.
    Так можно оттранслировать исполняемый файл, обратно в Си?
    Есть такой транслятор?
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.328
    [​IMG]
     
    Dr.Pepper нравится это.
  5. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Ну мне интересно что получится...

    (Это я типо как блондинка)?
     
  6. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Короче я уже понял, нильзя ни_рена оттранслировать.
    Как несовершенен этот мир.
     
  7. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Нельзя|, потому что есть ещё такая фигня, как low-level optimizations.
    Но определёнными конструкциями в языке можно облегчить компилятору эти самые low-level optimizations.
     
  8. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    Дело все в том, что скомпилированный код не соответствует условию Фано (относительно си инструкций), следовательно, его нельзя однозначно восстановить в исходный вид.
     
    Indy_ нравится это.
  9. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    "его нельзя однозначно восстановить в исходный вид"
     
  10. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    Гляньте на выхлоп HR в данном кейсе
    [​IMG]
    Очевидно, что исходный сорс на си так не выглядел. Это и значит, что декомпиляция неоднозначна.
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Пыщ..
    не путайте теплое с мягким. и не надо разводить холивар.

    Вы разговариваете о разных вещах.

    Когда есть некоторый код на Си , допустим это бинарная сортировка. Компилятор за _Несколько_ проходов генерирует код, в конечном счете получается байткод.
    Изучая байткод (дизассемблер) - либо сами, либо тулами, мы можем понять что там делается и сделать Си код (если точнее - алгос), тем более что нам известны компиль-паттерны.
    Но при этом полученный код, никогда не будет равен тому говнокоду, который мог написать Вася в своей бинарной сортировке. Но код будет очень похож.

    Я думю unc1e имел ввиду преобразование 1-1.

    Я даже больше скажу, при оптимизации, мы можем потерять большую часть конструкций, а некоторые получить совсем другими. Исходно начальным Си кодом оно никогда не будет.
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Minzdrav,

    > Так можно оттранслировать исполняемый файл, обратно в Си?

    Конечно же декомпиляция вас не устраивает, так как задача не про неё так понимаю. При компиляции происходит утеря смысла(компиляторный уровень), обратное восстановление на данный момент не возможно, так как вам нужно восстановить логику и смысл работы - фактически дать смысловые имена переменным етц.
    Интересно откуда такая идея появилась - раз многие задачи можно обойти путём хитрых решений, то вы по этой причине решили что и эта задача может быть так решена, тоесть учить язык не нужно, а можно провернуть хитрый трюк с автоматикой и вуа ля :preved::sarcastic_hand:
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    unc1e,

    > скомпилированный код не соответствует условию Фано

    На вики описание бредовое(не отражает смысл) данного понятия/термина, там прямо сказано что мы это не юзаем и не понимаем(в смысле термин). Это называется утерей данных в русскоязычном понимании. В математике пример - интегрирование.
     
  15. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Инде.
    Фи. Я и не собирался зарабатывать деньги таким пошлым способом. :)
    А за разъяснения - уместны. :)

    Майкл.
    Статья любопытная. Скачал в коллекцию. А по ходу
    нашёл интересную статью у Криса, по взлому все и вся:
    https://web.archive.org/web/20130819215757/http://www.insidepro.com/kk/099/099r.shtml

    Что до программы про которую пишет Реверскод:
    https://xakep.ru/2008/03/14/42769/
    И статья, где автор пытался откомпилировать код, (оттранслированный из машинного в Си с помощью HexRays), получает:
    Компилятор, выдав более сотни ошибок, просто прерывает компиляцию, поскольку продолжать ее дальше нет никакого смысла.
    Значит пытаются сделать ПО для такой трансляции, но безуспешно.

    Говорят же, что на Си можно писать практически как на ассемблере.
    Интересно, можно листинг дезассемблера перекомпилировать в такие
    примтивные конструкции языка Си? Не так сильно завязаные на архитектуру,
    как ассемблер? Чисто гипотетически? Или я говорю глупости?
     
    Последнее редактирование: 19 дек 2017
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    ну ну.
     
  17. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Ах_еть, ты мне просто глаза открыл! А я читал - читал,
    про декомпиляцию, так нихрена не мог понять, что она делает.
    Там столько всего умного написано.
     
  18. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    скажите нам как гуру реверса вы еще нейросеть для автоматического узнавания высокоуровневых конструкций не запилили (в потоке процессорных инструкций дизасма) ??
     
    Indy_ нравится это.
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    так лавку за гвоздями самому придется разглядывать ???

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