- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
void decode_chunk(const char* s, uint8_t* out)
{
__m128i a = _mm_loadu_si128((const __m128i*)s);
__m128i u = _mm_and_si128(a, _mm_set1_epi8(0x74));
u = _mm_add_epi8(u, _mm_set1_epi8(0x04));
u = _mm_srli_epi32(u, 0x03);
u = _mm_and_si128(u, _mm_set1_epi8(0x0F));
u = _mm_shuffle_epi8(_mm_set_epi32(0xB9B9B9B9, 0xBFBFBFBF, 0x04041013, 0x00000000), u);
a = _mm_add_epi8(a, u);
__m128i m1 = _mm_set1_epi32(0xFF00FF00);
__m128i m2 = _mm_set1_epi32(0xFFFF0000);
a = _mm_shuffle_epi8(a, _mm_set_epi32(0x00010203, 0x04050607, 0x08090A0B, 0x0C0D0E0F));
a = _mm_or_si128(_mm_srli_epi32(_mm_and_si128(m1, a), 2), _mm_andnot_si128(m1, a));
a = _mm_or_si128(_mm_srli_epi32(_mm_and_si128(m2, a), 4), _mm_andnot_si128(m2, a));
a = _mm_shuffle_epi8(a, _mm_set_epi32(0x80808080, 0x00010204, 0x05060809, 0x0A0C0D0E));
_mm_storeu_si128((__m128i*)out, a);
}
Байтоёбский парсинг base64 (16 символов → 12 байт).
По мотивам http://govnokod.ru/12822#comment173404
Что-то мне подсказывать, что кофе надо было пить ни до, ни после, а вместо.
Сечёшь, пидар?
Я только за.
Не надо рассуждать о читаемости кода на языке, которого не знаешь.
Ебанавт.
Чорт! Проговорился.
Вот деление на ноль –— это исключение. Оно детерминировано: каждый раз, когда мы пытаемся делить на ноль (или когда при делении возникает переполнение), срабатывает исключение. С другой стороны, само по себе оно сработать не может.
А вот событие нажатия на клавишу —– это прерывание. Мы заранее не можем предугадать, в какой момент времени юзер нажмёт клавишу.
Офигеть, его выложили в «Ютуб». Надо будет пересмотреть.
0 —– позовут при лелении на ноль
3 –— беркпонт
5 —– принт скрин/бонд
9 —– что-то связанное с клавиатурой (помоему, зовётся при ножатии клавешы)
10 –— видио хуйня
13 —– раьота с письками
16 –— получить код ножатой клавешы(ah = 0)/узнать, ножата ли клавеша и т.п.
20 —– выдох из программы
21(22,23,...? я ими не пользовался, но помоему есть) —– функции дос
29 –— вывести символ в al на ыкран
33 —– мыш (ax=0,1,2,3 —– инициалищация, показать, скрыть, получить сосояние)
40 —– сиськи оли в КолибриОС(?)
80 –— лунтикс
Насколько я ёбнутый?
0, 3, 5 –— энто исключения (тут вроде понятно, почему).
9 наглухо привязано к IRQ1 –— это прерывание (к IRQ0...IRQ7 привязаны соответственно INT 8... INT 0F). IRQ с большими номерами засунуты в какую-то жопу (что-то типа INT 70h, уже точно не помню).
То, что выше 0Fh –— это программные прерывания.
Кстати, функция ah=0 у INT 16h не работала с клавишами F11, F12 и прочими, которых нет на IBM XT. Для полноценной работы с клавиатурой нужно было звать ah=10h.
Сейчас ещё что-нибудь вспомню...
INT 31h –— DPMI. Это чтобы выделять память из программ зощищённого режима.
INT 28h —– фоновое прерывание для кооперативной многозадачности.
INT 15h –— функции PS/2, которые позже были задействованы в рахит-тинктуре ATX.
Куда ремапнешь там и будут.
На текущий момент ты здесь самый ебанутый.
В библиотеках можно всё замазать константами, в JS - и вовсе в клиентский код не допускать чисел:
ASCII-коды наверно останутся как последняя питушня, которую скорее всего так просто от программиста не скроешь. Как минимум, на клавиатуре через Alt набирать придётся.
А придумают ли что-то новое для задротов, чтобы числа запоминали?
А может и подумали, но пирфоманс на тот момент показался важнее...
Сделай свой проц с микрокодом и пиши на нём. Хотя, если ты можешь делать проц, то нафиг тебе микрокод? Лишняя абстракция.
Но мне кажется, что ничего принципиально нового там не запилить. Разве что какую-то более эффективную инструкцию удастся сложить из кусков других.
https://securiteam.com/securityreviews/5FP0M1PDFO/
> ничего принципиально нового там не запилить
Ну почему? Вот, например, установка хука на ассемблерную инструкцию из "JavaScript":
https://hsto.org/r/w390/webt/gx/af/w9/gxafw9lfzweuvhrirvuwf_qfbu0.png
(Лол, это реально работало? Какой багор))))
Картинка отсюда: https://m.habr.com/ru/post/427757/
А источник:
Philipp Koppe. Reverse Engineering x86 Processor Microcode // Proceedings of the 26th USENIX Security Symposium. 2017. pp. 1163-1180.
Надо бы читнуть.
ЗЫ. что значт "use asm"?
Сделай себе проц, который напрямую исполняет шитый код. Вроде ничего сложного, если под FPGA.
Какое-то говно, накостыленное поверх js.
Значит, я не ошибся. В «K6» никакого микрокода нет, именно поэтому я за «K6».
На AMD первые обновлялки появились позже. Для K7?
Вполне документированное, проверь. Все операционки его юзают.
А вот формат самого блоба - да, не документирован.