- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 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); - рисуется десятого размера буква в буфер. И никаких непонятных
говнобайткодов. Четко и дерзко!
guest8 01.04.2019 01:02 # −999
j123123 01.04.2019 01:11 # 0
PACTPOBblu_nemyx 01.04.2019 01:13 # 0
https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf
j123123 01.04.2019 01:15 # 0
j123123 01.04.2019 01:17 # +2
guest8 01.04.2019 02:02 # −999
bormand 01.04.2019 13:15 # +1
cmepmop 01.04.2019 10:29 # 0
@пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть
Ты нам прям америку открыл...
Steve_Brown 01.04.2019 12:45 # 0
А почему нельзя интерпретировать Тьюринг-полный байткод в ядре?
bormand 01.04.2019 13:14 # 0
guest8 01.04.2019 13:59 # −999
bormand 01.04.2019 14:08 # +2
Но для задач, которые он решает, это оверинжиниринг имхо. Да и когда прошивка спрашивает версию венды и подстраивается под неё - это вообще нормально?
gost 01.04.2019 20:24 # 0
Steve_Brown 01.04.2019 17:16 # 0
(у меня как-то раз примерно так было в Гимпе, когда я случайно поставил размер шрифта 10000)
Тут разве что общий принцип, что любой код, не требующий особых разрешений, лучше исполнять с минимальными правами - тем более сложные алгоритмы.
Хотя, конечно, и у шрифтов есть своя специфика - после переполнения буфера нужно вернуть управление, перед этим как-нибудь внедрившись в систему, а тут оно само будет периодически вызываться, можно каждый раз исполнять вредоносный код заново, не оставляя следов и не привлекая внимание антивируса.
Steve_Brown 01.04.2019 17:22 # 0
>https://security.stackexchange.com/a/91395
Как у них там красивенько сегодня! (см. дату)
guest8 01.04.2019 13:59 # −999
j123123 01.04.2019 22:03 # +1
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.
guest8 01.04.2019 22:05 # −999
bormand 01.04.2019 22:07 # 0
Steve_Brown 02.04.2019 15:31 # 0
Вместо того чтобы просто доказать, что программа завершается за ограниченное число шагов.
guest8 12.07.2019 06:06 # −999
BOKCEJIbHblu_nemyx 01.04.2019 19:07 # 0
guest8 01.04.2019 23:10 # −999
guest8 25.05.2019 22:31 # −999
guest8 12.07.2019 06:07 # −999
TEH3OPHblu_nemyx 12.07.2019 07:44 # 0
bormand 12.07.2019 07:45 # 0
TEH3OPHblu_nemyx 12.07.2019 08:01 # 0
guest8 01.04.2019 23:11 # −999
guest8 12.07.2019 06:07 # −999
doomginho 31.07.2024 17:25 # 0