1. Си / Говнокод #22651

    −18

    1. 1
    https://aww.moe/0fmynm.mp4

    Интересно, зачем он там редактирует выхлоп из hex-rays (32 секунда)? Исходники потеряли?

    Запостил: j123123, 21 Марта 2017

    Комментарии (26) RSS

    • показать все, что скрытоВообще, код из hex-rays часто оказывается некомпилябельным забагованным говном с кучей UB
      Ответить
    • показать все, что скрытоВ одном из говнокодов была ссылка на книжку. Автор рассказывал, что в одной известной старинной американской корпорации когда нужно было внести изменения в программу, правили сразу бинарник (программы тогда были не такими большими, как сейчас, и найти нужный фрагмент было легче), так что в итоге весь софт не соответствовал исходникам.

      Увы, ссылку потерял.
      Ответить
      • http://www.lib.ru/ANEKDOTY/non_pas.txt эта?
        Ответить
        • Спасибо! Оно!

          Они считают более простым непосредственно латать двоичный объектный код, используя прекрасную программу под названием SuperZap (или ее эквивалент на не-IBM машинах). Этот метод настолько хорош, что многие программы, работающие на ЭВМ фирмы ИБМ, не имеют ничего общего со своим собственным текстом на Фортране. В большом количестве случаев первоначальный символьный текст программы вообще не существует. Когда наступает время подправить такого рода программу, никакой администратор даже не думает послать на эту работу кого-либо, кроме настоящего программиста - никакой сосунок (структурный программист) не будут знать даже с чего начать. Это называется защита от несанкционированного доступа.
          Ответить
          • показать все, что скрытоПрошло 65 лет.

            Многие ПХП программисты идут на сайт по ФТП и там латают HTML, CSS и PHP
            В итоге их код не имеет ничего общего с тем что лежит у них в VCS
            Ответить
            • > код не имеет ничего общего с тем что лежит у них в VCS

              Ты хочешь сказать, что они используют VCS?!

              Разве что заливают в git архивы Versia1.zip Versia2.zip, примерно как этот умник
              https://github.com/George66/Textbook
              Ответить
              • Да, настоящий программист помнит, какая версия где используется, и если ему нужна старая версия, он взламывает кастомера и скачивает своё код у него.
                Ответить
              • показать все, что скрытоа еще они прикольно мёрджатся

                "Алё, Вась? Слыш, не выкладывай ничего на сайт 15 минут, хорошо? Мне там надо кое-чо поправить'
                Ответить
                • показать все, что скрытоОткуда Вы знаете про Васю?

                  http://govnokod.ru/17307#comment259930

                  Это ещё пустяки. Гораздо интереснее, когда в какой-нибудь организации бухгалтеры звонят друг другу по телефону: «Алё, Люсь! Ты можешь не делать никаких операций 15 минут? Мне нужно платёж провести». Транзакции придумали задроты.
                  Ответить
      • Jeff Dean writes directly in binary. He then writes the source code as a documentation for other developers.
        Ответить
    • показать все, что скрытоhttps://habrahabr.ru/post/215375/ кстати, через hex-rays однажды смогли портировать старкрафт на ARM
      Жаль что нет нормального декомпилятора для 16-бит интел, тогда б вот такого http://govnokod.ru/22504#comment374388 возможно не пришлось делать
      Ответить
      • показать все, что скрыто[quote]
        > На самом деле, современные версии HexRays (плагин
        > для превращения кода в C-код для IDA Pro)
        > восстанавливают код достаточно точно.
        [/quote]
        ахахахахахахааа

        Jeff Dean написал плагин к IDA который генерирует код си сразу с комментариями
        Ответить
      • показать все, что скрытоА джампы в середину инструкции, которые были популярны во времена 16-битного Интела, как будем декомпилировать?

        http://govnokod.ru/13242

        Боюсь, что для процессоров с переменным размером инструкций и для программ, использующих царские оптимизации, нормального декомпилятора не будет.
        Ответить
        • показать все, что скрыто>>А джампы в середину инструкции,
          это какой-то царский способ экономить место?

          >>, что для процессоров с переменным размером инструкций и для программ, использующих царские оптимизации

          да ну конечно не будет
          поди мне -O4 декомпилируй
          Ответить
          • > это какой-то царский способ экономить место?

            Это способ вые продемонстрировать своё превосходство.

            На самом деле в некоторых случаях он действительно может быть полезен. Например, для прошивок и для всяких embedded-приложений.
            Ответить
        • > А джампы в середину инструкции, которые были популярны во времена 16-битного Интела, как будем декомпилировать?
          С этим как раз особых проблем быть не должно. Допустим, есть некая последовательность байт и есть знание того, что будет именно происходить при прыжке в то или иное место. Скажем, вот такой пример для 64-битного Intel/AMD проца:
          https://camo.githubusercontent.com/492cd868bcdb4e9651dc76aa5886c0058f061cbd/68747470733a2f2f692e696d6775722e636f6d2f4b394b484737572e706e67

          Есть множество мест, в которые можно прыгнуть, и при этом будет выполнятся та или иная цепочка инструкций. Это все можно скомипилировать в некую лапшу из кусков кода, которые друг в друга прыгают, и зная длины инструкций, можно их таким способом связать. Скажем, тот пример можно декомпилировать примерно так
          label0x00:
            rax = 0x18048d48c0314801;
            goto label0x0a;
          label0x01:
            eax = 0xc0314801;
            goto label0x06;
          label0x02:
            {
              питушня с указателями, которую мне лень писать
            }
            ...

          Сложнее будет декомпилировать какую-нибудь питушню с самомодифицирующимся кодом, динамически-распаковывающимся кодом, всякой хуитой с сегментными регистрами (например https://ru.wikipedia.org/wiki/Unreal_mode ) и прочими подобными извращениями
          Ответить

    Добавить комментарий