
Образ мышления: Assembler
То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал
Образ мышления: Assembler - Карта сайта

Как получить хэндл контрола, на котором находится фокус
07.11.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Очередная мелкая развлекалочка на Ассемблере. Задача: узнать хэндл контрола в чужом окне, на котором в данный момент находится фокус. С получением активного окна проблем быть не должно, для этого достаточно вызвать функцию GetForegroundWindow. А дальше можно воспользоваться следующим кодом.Code (Assembler) : Убрать нумерацию
- ; Получить ID текущего потока
- invoke GetCurrentThreadId
- mov [current],eax
- ; Получить хэндл активного окна
- invoke GetForegroundWindow
- ; Получить ID потока чужого окна
- invoke GetWindowThreadProcessId,eax,tmp
- mov [remote],eax
- ; Подключиться к обработке ввода данных
- invoke AttachThreadInput,[remote],[current],TRUE
- or eax,eax
- jz .processed
- ; Получить хэндл активного контрола
- invoke GetFocus
- or eax,eax
- jz @f
- ; EAX -> хэндл активного контрола
- @@:
- ; Отключиться от обработки ввода данных
- invoke AttachThreadInput,[remote],[current],FALSE
Читать статью целиком »
Просмотров: 375 | Комментариев: 0

Работа с регулярными выражениями на Ассемблере
02.11.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Работа с регулярными выражениями на Ассемблере
Без преувеличения, регулярные выражения - один из самых мощных инструментов для обработки как текстовой, так и двоичной информации. В настоящее время есть немало различных внешних библиотек, классов и компонентов для работы с регулярками, но не стоит забывать, что в арсенале программиста есть и встроенные в систему средства, которые позволяют реализовать практически все мощности этой технологии. Вот сегодня о них и поговорим.
Читать статью целиком »
Просмотров: 853 | Комментариев: 1

Парсинг метаданных MIDI-файлов на Ассемблере
29.10.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Парсинг метаданных MIDI-файлов на Ассемблере
MIDI - "цифровой интерфейс музыкальных инструментов" - стандарт цифровой звукозаписи на формат обмена данными между электронными музыкальными инструментами. В отличие от других форматов это не оцифрованный звук, а наборы команд (проигрываемые ноты, ссылки на проигрываемые инструменты, значения изменяемых параметров звука), которые могут воспроизводиться по-разному в зависимости от устройства воспроизведения. Это позволяет реализовывать устройства, производящие аранжировку по заданным аккордам, а также приложения для воспроизведения и визуализации звука.
Читать статью целиком »
Просмотров: 509 | Комментариев: 6

Парсинг метаданных файлов RealMedia на Ассемблере
21.10.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Парсинг метаданных файлов RealMedia на Ассемблере
Формат RealMedia уже давно используется для потокового вещания. В свое время этот формат обеспечивал приемлемое качество звука и видео при сравнительно небольшом размере файла. Но главным плюсом RealMedia является возможность перемотки при воспроизведении файлов, находящихся на сервере. Это обеспечило не только популярность, но сделало RealMedia практически стандартом для трансляции медиапотоков по каналам связи.
Читать статью целиком »
Просмотров: 503 | Комментариев: 2

Алгоритм хеширования MaHash8 на Ассемблере
28.09.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
MaHash8 - эффективная функция с высокой производительностью, которая позволяет выполнять операции хеширования с минимальным количеством коллизий. Она основана на простых операциях, имеет очень понятную структуру и легко реализуется на различных языках программирования.В алгоритме MaHash8 для хеширования используется таблица подстановки, позаимствованная из криптоалгоритма Skipjack. Если не хотите таскать готовую таблицу, то ее можно создавать динамически, используя формулы по приведенной ссылке.
Code (Assembler) : Убрать нумерацию
- sTable db 0a3h,0d7h,009h,083h,0f8h,048h,0f6h,0f4h,0b3h,021h,015h,078h
- db 099h,0b1h,0afh,0f9h,0e7h,02dh,04dh,08ah,0ceh,04ch,0cah,02eh
- db 052h,095h,0d9h,01eh,04eh,038h,044h,028h,00ah,0dfh,002h,0a0h
- db 017h,0f1h,060h,068h,012h,0b7h,07ah,0c3h,0e9h,0fah,03dh,053h
- db 096h,084h,06bh,0bah,0f2h,063h,09ah,019h,07ch,0aeh,0e5h,0f5h
- db 0f7h,016h,06ah,0a2h,039h,0b6h,07bh,00fh,0c1h,093h,081h,01bh
- db 0eeh,0b4h,01ah,0eah,0d0h,091h,02fh,0b8h,055h,0b9h,0dah,085h
- db 03fh,041h,0bfh,0e0h,05ah,058h,080h,05fh,066h,00bh,0d8h,090h
- db 035h,0d5h,0c0h,0a7h,033h,006h,065h,069h,045h,000h,094h,056h
- db 06dh,098h,09bh,076h,097h,0fch,0b2h,0c2h,0b0h,0feh,0dbh,020h
- db 0e1h,0ebh,0d6h,0e4h,0ddh,047h,04ah,01dh,042h,0edh,09eh,06eh
- db 049h,03ch,0cdh,043h,027h,0d2h,007h,0d4h,0deh,0c7h,067h,018h
- db 089h,0cbh,030h,01fh,08dh,0c6h,08fh,0aah,0c8h,074h,0dch,0c9h
- db 05dh,05ch,031h,0a4h,070h,088h,061h,02ch,09fh,00dh,02bh,087h
- db 050h,082h,054h,064h,026h,07dh,003h,040h,034h,04bh,01ch,073h
- db 0d1h,0c4h,0fdh,03bh,0cch,0fbh,07fh,0abh,0e6h,03eh,05bh,0a5h
- db 0adh,004h,023h,09ch,014h,051h,022h,0f0h,029h,079h,071h,07eh
- db 0ffh,08ch,00eh,0e2h,00ch,0efh,0bch,072h,075h,06fh,037h,0a1h
- db 0ech,0d3h,08eh,062h,08bh,086h,010h,0e8h,008h,077h,011h,0beh
- db 092h,04fh,024h,0c5h,032h,036h,09dh,0cfh,0f3h,0a6h,0bbh,0ach
- db 05eh,06ch,0a9h,013h,057h,025h,0b5h,0e3h,0bdh,0a8h,03ah,001h
- db 005h,059h,02ah,046h
Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша MaHash8
- ; Автор: ManHunter / PCL
- ; https://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc MaHash8 lpData:DWORD, dSize:DWORD
- locals
- hash1 dd ?
- hash2 dd ?
- endl
- push ebx ecx edx esi edi
- mov esi,[lpData]
- mov eax,[dSize]
- mov [hash1],eax
- mov [hash2],eax
- xor ecx,ecx
- .loc_loop:
- cmp ecx,[dSize]
- je .loc_done
- mov al,byte[esi]
- add eax,ecx
- movzx eax,al
- movzx edx,byte[sTable+eax]
- add [hash1],edx
- mov edx,[hash1]
- shl edx,6
- mov eax,[hash1]
- shr eax,11
- xor eax,edx
- add eax,[hash1]
- rol eax,14
- mov [hash1],eax
- lodsb
- add eax,ecx
- movzx eax,al
- movzx edx,byte[sTable+eax]
- add [hash2],edx
- mov edx,[hash2]
- shl edx,6
- mov eax,[hash2]
- shr eax,11
- xor eax,edx
- add eax,[hash2]
- rol eax,18
- mov [hash2],eax
- mov ebx,[hash1]
- mov edi,[hash2]
- mov eax,ebx
- shr eax,16
- movzx edx,ax
- mov eax,edi
- shl eax,16
- or eax,edx
- mov [hash1],eax
- mov eax,edi
- shr eax,16
- movzx edx,ax
- mov eax,ebx
- shl eax,16
- or eax,edx
- mov [hash2],eax
- inc ecx
- jmp .loc_loop
- .loc_done:
- mov eax,[hash2]
- xor eax,[hash1]
- pop edi esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 465 | Комментариев: 3
