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

Как программно свернуть все окна
04.09.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Есть разные способы программно свернуть все открытые окна. Простой и топорный вариант решения - эмуляция нажатия клавиш Win+M, которые и выполняют команду "Свернуть все окна". Делается это через последовательность вызовов keybd_event.Code (Assembler) : Убрать нумерацию
- ; Эмуляция нажатия клавиш Win+M
- invoke keybd_event,VK_LWIN,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,'M',0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LWIN,0,KEYEVENTF_KEYUP,NULL
Code (Assembler) : Убрать нумерацию
- ; Эмуляция нажатия клавиш Win+Shift+M
- invoke keybd_event,VK_LWIN,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LSHIFT,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,'M',0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LSHIFT,0,KEYEVENTF_KEYUP,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LWIN,0,KEYEVENTF_KEYUP,NULL
Читать статью целиком »
Просмотров: 460 | Комментариев: 3

Создание выпадающего списка (Combobox) с иконками
20.08.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я рассказывал, как сделать простой комбобокс. Сейчас давайте усовершенствуем его, а точнее дополним строки списка иконками. Я уже делал подобное с меню, тут принцип точно такой же. К стилям комбобокса в ресурсах добавляется CBS_OWNERDRAWFIXED, что в дальнейшем позволит нам самостоятельно обрабатывать процесс отрисовки каждой строки выпадающего списка. Теорию и принцип работы вы можете почитать по приведенной ссылке, повторяться я не буду. В обработчик окна, в котором находится комбобокс, добавляется реакция на два события - это WM_MEASUREITEM, которое приходит перед отрисовкой строки, и WM_DRAWITEM, при котором мы будем рисовать эту строку.Code (Assembler) : Убрать нумерацию
- cmp [msg],WM_MEASUREITEM
- je wm_measure
- cmp [msg],WM_DRAWITEM
- je wm_drawitem
Code (Assembler) : Убрать нумерацию
- wm_measure:
- ; Отрисовываем строку комбобокса?
- mov ebx,[lparam]
- cmp [ebx+MEASUREITEMSTRUCT.CtlType],ODT_COMBOBOX
- jne processed
- ; Высота строки комбобокса с учетом размера иконки
- mov [ebx+MEASUREITEMSTRUCT.itemHeight],26
- jmp processed
Читать статью целиком »
Просмотров: 418 | Комментариев: 2

Конвертирование юникодных числовых символов в цифры
05.08.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Предположим, ваше приложение работает с числами, полученными от пользователя через текстовые поля ввода. Почти со стопроцентной вероятностью это будут привычные нам цифры 0..9, но теоретически в строке ввода могут оказаться юникодные символы из национальных алфавитов, обозначающие цифры. Например, на деванагари (꣑꣒꣓), арабском (٤٥٦) или саураштра (꣗꣘꣙).Преобразование таких национальных символов в привычные нам цифры легко выполняется одной единственной функцией FoldString. FASM не в курсе о существовании нужного нам флага MAP_FOLDDIGITS, так что придется обозначить его самостоятельно. В остальном никаких сложностей.
Code (Assembler) : Убрать нумерацию
- buff rw 100h
- num rw 100h
- MAP_FOLDDIGITS = 128
- ...
- ...
- ...
- ; Получить строку из поля ввода
- invoke GetDlgItemText,[hwnddlg],ID_TXT,buff,100h
- ; Сконвертировать юникодные числовые символы в цифры
- invoke FoldString,MAP_FOLDDIGITS,buff,-1,num,100h
Читать статью целиком »
Просмотров: 364 | Комментариев: 0

Работа с Image File Execution Options на Ассемблере
17.07.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Не так давно я выкладывал статью про использование Image File Execution Options, где обещал провести эксперименты на Ассемблере. Всю теорию про IFEO вы можете прочитать по приведенной ссылке, дублировать я ее тут не буду.Начнем с установки перехватчика. Тут все просто, создаем ключ в реестре, затем в нем создаем параметр "Debugger" с указанием пути к нашему файлу.
Code (Assembler) : Убрать нумерацию
- ; Ключ реестра
- victim_key db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\'
- db 'Image File Execution Options\victim.exe',0
- ; Путь к нашему отладчику
- debug_key db 'Debugger',0
- ...
- ...
- invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,victim_key,0,0,\
- REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,phkResult,lpdwDisp
- ; Путь к отладчику
- invoke lstrlen,evil
- invoke RegSetValueEx,[phkResult],debug_key,0,REG_SZ,evil,eax
- invoke RegCloseKey,[phkResult]
Code (Assembler) : Убрать нумерацию
- invoke SHDeleteKey,HKEY_LOCAL_MACHINE,victim_key
Читать статью целиком »
Просмотров: 382 | Комментариев: 0

Запуск процессов с командой перенаправления вывода
24.06.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для перенаправления ввода и вывода консольных приложений используются специальные символы командной строки "<", ">" и "|". Например:tree c:\windows > out.txt
В этом случае вывод команды tree вполне ожидаемо будет сохранен в файл out.txt. Но если попытаться выполнить эту же команду средствами WinAPI, например, через функции WinExec, CreateProcess или ShellExecute(Ex), то нужного результата достигнуто не будет. Дело в том, что перенаправление обрабатывается только командным процессором, а функции WinAPI просто передают командную строку в неизменном виде, то есть программе "tree" будут переданы параметры "c:\windows > out.txt". В большинстве случаев они окажутся просто некорректными с точки зрения программы, а могут привести к неожиданным результатам.
Code (Assembler) : Убрать нумерацию
- ; Выполнить напрямую команду с перенаправлением
- invoke WinExec,exec_re,SW_SHOW
- ...
- ...
- exec_re db 'c:\Windows\System32\tree.com c:\Windows\System32 >out.txt',0
Читать статью целиком »
Просмотров: 444 | Комментариев: 3
