Образ мышления: Assembler
То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал
Образ мышления: Assembler - Карта сайта
Запись в архивы SAR, PRS и CAR без помощи архиватора
11.02.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter
В предыдущих трех частях цикла статей о записи информации в архивы различных форматов без помощи архиваторов были рассмотрены как популярные форматы, так и более редкие. Настало время совсем экзотических архиваторов, результатов работы которых вы вообще нигде не встретите. Поэтому разбор их внутренних форматов можно рассматривать исключительно как разминку для ума, никакой практической пользы от этих исследований ждать не надо. Тем более, что документации по некоторым архиваторам нет, все данные пришлось получать на основании готовых архивов.Первый и самый простой из виденных архивов - SAR, сокращенное название от "Streamline Arching Utility" производства компании Streamline Design. Единственная существующая версия датируется 1993 годом. Файлы в архиве предваряются небольшим заголовком, общего заголовка архива нет, признак завершения архива - нулевой байт вместо следующего заголовка.
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; SAR Header
- ;---------------------------------------------
- shlen db ? ; Header length
- shcrc db ? ; CRC of header
- smeth rb 5 ; Compression method (' LH0 ' = store)
- sosize dd ? ; Original file size
- scsize dd ? ; Compressed file size
- db ? ; unknown
- db ? ; unknown
- db ? ; unknown
- db ? ; unknown
- sunkn1 db ? ; File attribute? (20h)
- sunkn2 db ? ; unknown (01h)
- slen db ? ; Filename size
- sfname rb (?) ; Filename (ASCII)
- sfcrc dw ? ; 16-bit CRC
- sunkn3 db ? ; unknown (20h)
- db ? ; unknown
- shend db ? ; unknown
Code (Assembler) : Убрать нумерацию
- ; Признак окончания архива - нулевой байт
- tail db 0
- tail_length = $-tail
Читать статью целиком »
Просмотров: 5097 | Комментариев: 12
Функции urldecode и urlencode на Ассемблере
30.01.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter
Функции urldecode и urlencode на Ассемблере
Моя реализация функций PHP urldecode и urlencode, а также двух их разновидностей rawurldecode и rawurlencode на Ассемблере. Алгоритм их работы описан в документации. Единственное отличие от оригинальной функции rawurlencode в том, что кодируется вся строка целиком, а не только буквенно-цифровые символы. На мой взгляд, это более логичное поведение функции с приставкой "raw". В остальном никаких отличий нет.
Читать статью целиком »
Просмотров: 5295 | Комментариев: 0
Расчет CRC24 на Ассемблере
05.01.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter
CRC24 - еще одна разновидность контрольной суммы. Как можно увидеть из названия, ее размер составляет 24 бита, или 3 байта. Я пока не нашел практического применения этому хешу, так же как и программ, использующих его. Но раз есть алгоритм, то почему бы его не реализовать на Ассемблере? Начнем с наиболее компактной реализации без использования таблицы.Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша CRC24
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc CRC24 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi
- CRC24_POLYNOM = 1864CFBh
- ; Инициализация
- mov eax,0B704CEh
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- ; Указатель на начало строки
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov ebx,[lpData]
- movzx edx,byte [ebx+ecx]
- shl edx,16
- xor eax,edx
- xor esi,esi
- .loc_cycle:
- shl eax,1
- test eax,1000000h
- jz .loc_next
- xor eax,CRC24_POLYNOM
- jmp .loc_next
- .loc_next:
- inc esi
- cmp esi,8
- jb .loc_cycle
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- and eax,0FFFFFFh
- pop esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 5617 | Комментариев: 6
Обработка и эмуляция мультимедийных кнопок клавиатуры
22.11.2014 | Категория: Образ мышления: Assembler | Автор: ManHunter
Обработка и эмуляция мультимедийных кнопок клавиатуры
Практически все современные клавиатуры имеют несколько специальных, так называемых мультимедийных кнопок для управления громкостью звука, навигацией браузера, плеером, запуска почтовой программы или калькулятора и так далее. Их количество и функционал зависит от производителя и модели клавиатуры. Особенностью этих кнопок является то, что при нажатии они не генерируют скан-кодов, не порождают события типа WM_KEYDOWN, не отслеживаются в полях ввода типа msctls_hotkey32.
Читать статью целиком »
Просмотров: 8868 | Комментариев: 8
Как преобразовать кириллическую строку из UTF-8 в cp1251
26.10.2014 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как преобразовать кириллическую строку из UTF-8 в cp1251
При разработке одной программы мне понадобилось преобразовать строки на русском языке из формата UTF-8 в формат cp1251. Внезапно выяснилось, что никакие средства WinAPI не позволяются выполнить эту операцию "одной строкой". Пришлось рассматривать даже варианты с табличным преобразованием, но потом нашлось более простое решение задачи. Алгоритм преобразования получился необычный, но зато гарантированно рабочий. Может быть это поможет сохранить время и нервы кому-нибудь еще.
Читать статью целиком »
Просмотров: 9609 | Комментариев: 10