1. Assembler / Говнокод #25491

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    Решил я значит от нехуй делать нарисовать свой пиксельный шрифт
    (кому интересно - вот промежуточный результат https://i.imgur.com/2vIJoio.png)
    и решил посмотреть, какие там вообще бывают под GNU/Linux редакторы для
    шрифтов, и какие вообще шрифты бывают
    Так вот, нашел я вот такую хрень http://mensis.sourceforge.net/overview.html
    Вижу, что там какой-то ассемблер http://mensis.sourceforge.net/ttfcv-all.png или
    байткод ебаный. Погуглил по этим говноинструкциям со скриншота:
    Оказывается в TTF шрифтах есть встроенный тьюринг-полный ЯП, используемый
    для всяких там подсказок, типа "куда дорисовать пиксель вот при таком-то условии"
    и прочая подобная херота
    А еще в шиндошс (до Windows 10) этот шрифтоговнобайткод интерпретировался в
    пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть
    https://security.stackexchange.com/a/91395 (разве могло быть иначе?)
    
    про шрифтоговнобайткод можно почитать например тут
    https://docs.microsoft.com/en-us/typography/opentype/spec/tt_instructions
    https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#instructions
    
    На кой вообще хер делать тьюринг-полный язык для отрисовки глифов? Ну и раз вы его уже
    делаете, то заебошьте там что-нибудь на основе LLVM байткода, чтоб JIT, или вообще все глифы
    сразу компилировать в натив, или даже (чего мелочиться) под GPU. Типа мы хотим
    нарисовать какую-то букву с размером 10 - вызываем функцию
    drawA(10, bufptr, x, y); - рисуется десятого размера буква в буфер. И никаких непонятных
    говнобайткодов. Четко и дерзко!

    Запостил: j123123, 01 Апреля 2019

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

    • ебить ты открыл для себя хинтинги

      в шинусе весь ГДИ в ядре я не удивлен
      Ответить
      • Ну я знал что там какое-то говно есть, но я удивлен что оно тьюринг-полное
        Ответить
        • Инструкция mov полна по Тьюрингу, проверь:
          https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf
          Ответить
          • Без циклов - нет
            Ответить
          • И тут из-за всяких косвенных говноадресаций только что-то достигается, что уже не совсем mov
            Ответить
        • а еще в ядре есть туринг полная машина AML для ACPI и кажется еще эмуляция x86
          Ответить
          • Говномуляция x86 в венде юзается только если нормальных дров на видюху нет.
            Ответить
    • @А еще в шиндошс (до Windows 10) этот шрифтоговнобайткод интерпретировался в
      @пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть

      Ты нам прям америку открыл...
      Ответить
      • >тупыыые
        А почему нельзя интерпретировать Тьюринг-полный байткод в ядре?
        Ответить
        • Потому что рано или поздно это выстрелит в ногу.
          Ответить
          • Тоесть ты против AML?
            Ответить
            • Не ну AML, конечно, лучше чем произвольный нативный код (привет UEFI рантайм сервисам).

              Но для задач, которые он решает, это оверинжиниринг имхо. Да и когда прошивка спрашивает версию венды и подстраивается под неё - это вообще нормально?
              Ответить
          • Ну, выстрелить в ногу чем угодно можно - везде, где есть буфер, его можно переполнить, и так далее... (тут, как я понял, что-то подобное как раз и произошло). Тут единственное, что можно сделать - это подвесить рендерер бесконечным циклом (кстати, интересно, как с этим борются?), и пользователь, забывший сохранить свою фотожабу после двух часов работы и перед вставкой красивой подписи скачанным из интернета шрифтом, сам испортит какое-нибудь hardware, даже не выходя из юзермода.
            (у меня как-то раз примерно так было в Гимпе, когда я случайно поставил размер шрифта 10000)
            Тут разве что общий принцип, что любой код, не требующий особых разрешений, лучше исполнять с минимальными правами - тем более сложные алгоритмы.
            Хотя, конечно, и у шрифтов есть своя специфика - после переполнения буфера нужно вернуть управление, перед этим как-нибудь внедрившись в систему, а тут оно само будет периодически вызываться, можно каждый раз исполнять вредоносный код заново, не оставляя следов и не привлекая внимание антивируса.
            Ответить
            • P.S.
              >https://security.stackexchange.com/a/91395
              Как у них там красивенько сегодня! (см. дату)
              Ответить
    • Вот если я напомню автору что в прыщах тоже есть ACPICA а еще там есть BPF который наверняка уже тоже туринг полны то он скажет что так и надо
      ведь это прыщи
      Ответить
      • > а еще там есть BPF который наверняка уже тоже туринг полны

        https://blog.cloudflare.com/bpf-the-forgotten-bytecode/
        > All this guarantees that the BPF programs executed within kernel context will run fast and will never infinitely loop. That means the BPF programs are not Turing complete, but in practice they are expressive enough for the job and deal with packet filtering very well.
        Ответить
        • All the jumps are only forward, which guarantees that there aren't any loops in the BPF
          The single BPF program has less than 4096 instructions.


          лол, такие костылп смешные
          Ответить
          • В "WebGL" тоже похожие ограничения. Но циклы целиком не забанили.
            Ответить
          • >лол, такие костылп смешные
            Вместо того чтобы просто доказать, что программа завершается за ограниченное число шагов.
            Ответить
            • Решил проблему останова? Чур после нобелевки с тебя пиво
              Ответить
    • Почему не поштшшкрипт?
      Ответить
      • пост сприпт для шрифтов юзал Adobe (Type1).
        А ябло и MS выдумали Тру тайп

        читани документаца
        https://www.adobe.com/products/type/adobe-type-references-tips/font-formats.html
        Ответить
        • Пошёл нахуй с моей ветки, гандон.
          Ответить
          • Пошёл нахуй с моей ветки, гандон.
            Ответить
            • На ветке вообще сидеть неудобно, особенно если она тонкая. То ли дело насест.
              Ответить
              • Петухи тяжеловаты для веток. То ли дело воробьи и синицы.
                Ответить
                • Цесарки сидят на ветках, а ведь они здоровенные.

                  http://dovidkam.com/wp-content/uploads/2016/06/f49d9da29e8016a955a68653ddc82df3.jpg
                  Ответить
    • вот по этому я за "растровые шрифты"
      Ответить
      • этот шрифт лучше всего выглядит в размере 8x8, ага
        Ответить

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