NAME
       memfrob - frobnicate (encrypt) a memory area

SYNOPSIS
       #define _GNU_SOURCE             /* See feature_test_macros(7) */
       #include <string.h>

       void *memfrob(void *s, size_t n);

DESCRIPTION
       The memfrob() function encrypts the first n bytes of the memory
       area s by exclusive-ORing each character with  the  number  42.
       The  effect can be reversed by using memfrob() on the encrypted
       memory area.

       Note that this function is not a proper encryption  routine  as
       the  XOR  constant  is  fixed,  and is suitable only for hiding
       strings.
А вот еще постом [livejournal.com profile] jakobz навеяло.

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

Короче. Решение, долженствующее невероятно продвинуть искусство коммуникации железа с драйвером, представляло собой виртуальную машину навроде ACPI, только наколеночную. То есть, из железа, натурально, вычитывались таблицы, которые потом специальный шматок кода, состоявший в основном из switch/case и goto, со скрежетом внутри себя эмулировал.

Все бы ничего, но машину-то делали на коленке, и почему-то забыли предусмотреть там методы коммуникации программы внутри виртуальной машины с хостом. Поэтому, ЛЮБАЯ ошибка, ЛЮБОЙ чих, когда коду что-то не нравилось, обрабатывались единственным доступным способом — ВПАДЕНИЕМ ПРОГРАММЫ В БЕСКОНЕЧНЫЙ ЦИКЛ. То есть, формально говоря, драйвер не вешался, энтот эмулятор там внутри себя чего-то бодро молотил, процессор уверенно грелся и всё такое. Чтобы понять, что что-то идет не так, надо было влезть дебаггером в кишки эмулятора и посмотреть, а по каким, собственно, адресам он ходит. Разумеется, разным ошибкам соответствовали разные адреса, что и было основным методом диагностики. Вишенка на торте: по какой-то прихоти судьбы, ВМ не имела команды "jmp туда-то", и поэтому реализация бесконечного цикла занимала 3-5 команд, причем, почему-то не подряд. То есть, вот прямо так взять и посмотреть что там исполняется местный эквивалент команды "10: goto 10" не получалось, надо было прокручивать в голове последние штуки три команды.

Почему? Да ни почему, because fuck you, that's why. Потому что железячники, которые ничего вокруг, кроме своего байтоёбства не видят. Правильно там в комментах сказали: выгнать и софтваризовать всё.
Читаю Столлмана: The Bug Nobody is Allowed to Understand.

When a problem occurs in the interaction of multiple proprietary software packages with different developers, none of them is allowed to study the source code of all the pertinent programs


Что я могу на это сказать? Сосунки! Когда я служил в маленькой психиатрической клинике работал в прошлой конторе, мы добились этого эффекта в рамках одного отдельно взятого департамента! Ну точнее не сразу мы, а сначала западные коллеги…

No shit, у нас был модуль типа DRM, куда можно было смотреть только одному маленькому отделу (даже их имен толком никто не знал), который модуль линковался в софт в неактивном виде и потом активировался (куда мы доступа тоже не имели). Однако же модуль иногда вносил баги, которые приходилось как-то решать, причем одной из функций модуля было противодействие отладке… :-) Ну, на самом деле он их не вносил, иначе бы с ним просто пришлось разбираться его авторам — он просто задействовал связанный с ним около-DRM'ный функционал, в котором уже сидели баги, втч и наши, а вот это уже было нашей проблемой…

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

Wat !?

Sep. 6th, 2014 11:54 pm
Мужик жжот, однако:

https://www.destroyallsoftware.com/talks/wat

А вы знаете что будет если в джаваскрипте написать []+{} и почему {}+[] даст другой результат?

PS. Да, это тот же дядя, который автор The Birth & Death of JavaScript.
Что будет если скрестить ежа с ужом функциональщика и bash? Примерно вот это:
... но боялись спросить.

Some Assembly Required.

Вот так полезешь куда-нибудь, что "просто так у всех всегда работает", а там бездны ада.
Как правильно писать lengthof1 для C++'ного окружения.




  1. типичное название для макроса, возвращающего длину статического массива

Profile

ex0_planet

July 2017

S M T W T F S
      1
2345678
9101112131415
1617 1819202122
23242526272829
3031     

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 23rd, 2017 06:42 pm
Powered by Dreamwidth Studios