Быстрый поиск
Введите фрагмент названия статьи для поиска
Системные генераторы случайных чисел
13.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Системные генераторы случайных чисел
На сайте уже выложено несколько различных алгоритмов генераторов псевдослучайных чисел. Какие-то генераторы лучше, какие-то похуже. Но когда надо сгенерировать всего пару-тройку чисел или результаты генерации не используются в критических участках кода, можно воспользоваться системными источниками псевдослучайных чисел.
Читать статью целиком »
Просмотров: 2302 | Комментариев: 26
Генератор xoshiro128 на Ассемблере
05.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Семейство xoshiro (xoroshiro) - это высокоскоростные и очень эффективные алгоритмы генерации псевдослучайных чисел общего назначения с хорошим распределением. Свое название генераторы получили от используемых в них операций XOR/Shift/Rotate. Разные варианты генераторов используют для рабочего буфера разные объемы памяти, а также реализованы как в 64-битной, так и в 32-битной версии. У меня тут будет 32-битный вариант xoshiro128 с периодом 2128.На всякий случай сразу уточню, что если в тексте встречается термин "случайное число", то имеется в виду "псевдослучайное число". У любого алгоритма генерации все равно есть зависимость и период, пусть даже очень большой, а создавать истинно случайные числа они не в состоянии.
Переходим к программированию. Как можно догадаться из суффикса названия, для работы генератора потребуется 128 бит, то есть 4 DWORD'а.
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; Данные для генератора случайных чисел
- s rd 4
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; Инициализация генератора случайных чисел
- ; stdcall long_jump,seed
- ;---------------------------------------------
- proc long_jump seed:DWORD
- locals
- s0 dd ?
- s1 dd ?
- s2 dd ?
- s3 dd ?
- endl
- pusha
- ; Начальное "засеивание" генератора
- mov edi,s
- mov eax,[seed]
- rol eax,1
- xor eax,0x1C580662
- stosd
- rol eax,3
- add eax,0x0B6F099F
- stosd
- rol eax,5
- xor eax,0xB523952E
- stosd
- rol eax,7
- sub eax,0xCCF5A0EF
- stosd
- ; Холостая прокрутка генератора для инициализации
- lea edi,[s0]
- push edi
- xor eax,eax
- stosd
- stosd
- stosd
- stosd
- xor ebx,ebx
- .loc_for_1:
- xor ecx,ecx
- .loc_for_2:
- mov eax,[.lj+ebx*4]
- and eax,1
- shl eax,cl
- jz @f
- mov esi,s
- lodsd
- xor [s0],eax
- lodsd
- xor [s1],eax
- lodsd
- xor [s2],eax
- lodsd
- xor [s3],eax
- @@:
- stdcall next
- inc ecx
- cmp ecx,32
- jb .loc_for_2
- inc ebx
- cmp ebx,4
- jb .loc_for_1
- pop esi
- mov edi,s
- movsd
- movsd
- movsd
- movsd
- popa
- ret
- .lj: dd 0xB523952E
- dd 0x0B6F099F
- dd 0xCCF5A0EF
- dd 0x1C580662
- endp
Читать статью целиком »
Просмотров: 1177 | Комментариев: 3
Обработка изменения иконок в системном трее
19.06.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
С обновлением иконок в системном трее разобрались, теперь давайте разберем, как можно отслеживать изменения в трее. Причем изменения касаются не только добавления-удаления иконок, но также изменения всплывающих подсказок и изменения иконки с сохранением ее индекса.Code (Assembler) : Убрать нумерацию
- CLSCTX_LOCAL_SERVER = 0x04
- S_OK = 0
- struct NOTIFYITEM
- pszExeName dd ?
- pszTip dd ?
- hIcon dd ?
- hWnd dd ?
- dwPreference dd ?
- uID dd ?
- guidItem rd 4
- ends
- ; GUID {D782CCBA-AFB0-43F1-94DB-FDA3779EACCB}
- IID_INotificationCB dd 0D782CCBAh
- dw 0AFB0h
- dw 043F1h
- db 094h, 0DBh, 0FDh, 0A3h, 077h, 09Eh, 0ACh, 0CBh
- ; INotificationCB interface
- struct INotificationCB
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; INotificationCB
- Notify dd ?
- ends
- ; GUID {FB852B2C-6BAD-4605-9551-F15F87830935}
- IID_ITrayNotify dd 0FB852B2Ch
- dw 06BADh
- dw 04605h
- db 095h, 051h, 0F1h, 05Fh, 087h, 083h, 009h, 035h
- ; ITrayNotify interface
- struct ITrayNotify
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; ITrayNotify
- RegisterCallback dd ?
- SetPreference dd ?
- EnableAutoTray dd ?
- ends
- ; GUID {25DEAD04-1EAC-4911-9E3A-AD0A4AB560FD}
- CLSID_TrayNotify dd 025DEAD04h
- dw 01EACh
- dw 04911h
- db 09Eh, 03Ah, 0ADh, 00Ah, 04Ah, 0B5h, 060h, 0FDh
- ; GUID {00000000-0000-0000-C000-000000000046}
- IID_IUnknown dd 000000000h
- dw 00000h
- dw 00000h
- db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
Читать статью целиком »
Просмотров: 927 | Комментариев: 1
Генератор Mersenne Twister на Ассемблере
13.06.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Mersenne Twister (Вихрь Мерсенна) - высокоэффективный генератор псевдослучайных чисел, разработанный Makoto Matsumoto и Takuji Nishimura. К математику Марену Мерсенну название имеет отношение потому, что период генерации равняется числу 219937-1, которое, в свою очередь, является числом Мерсенна. Несмотря на то, что Mersenne Twister является одним из наиболее тщательно протестированных генераторов ПСЧ из ныне существующих, а выдаваемые им последовательности проходят статистические тесты, использование Mersenne Twister в криптографии не рекомендуется без дополнительного шифрования.Для работы генератора требуется достаточно объемная структура, в которой сохраняется текущее состояние каждого измерения.
Code (Assembler) : Убрать нумерацию
- MT_SIZE = 624
- PERIOD = 397
- DIFF = MT_SIZE-PERIOD
- struct MT_STATE
- index dd ?
- mt rd MT_SIZE
- mt_tempered rd MT_SIZE
- ends
- state MT_STATE
Читать статью целиком »
Просмотров: 1142 | Комментариев: 1
Работа с сервисами Windows на Ассемблере
27.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Работа с сервисами Windows на Ассемблере
Давно хотел поэкспериментировать с сервисами Windows, наконец дошли руки. Еще со времен Windows XP я пользуюсь программой Service Tree от А.Н.Гусарова, но в ней имеются досадные косяки, поэтому есть большое желание написать что-нибудь подобное. А в этой статье будут складироваться все наработки по теме сервисов.
Читать статью целиком »
Просмотров: 1738 | Комментариев: 15