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

Drag'n'Drop файлов в консольное окно
06.12.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Очередная порция странного. На этот раз я решил попробовать реализовать обработку перетаскивания файлов в консольное окно. Для обычных GUI-приложений с этим нет вообще никаких сложностей, а вот с консольными приложениями придется повозиться. Вопреки тиражируемым в этих ваших интернетах статьям, с консольными окнами не работают никакие стандартные способы перетаскивания данных типа манипулирования с расширенными стилями консольного окна WS_EX_ACCEPTFILES, с принудительным назначением ему DragAcceptFiles, с субклассированием на предмет обработки сообщения WM_DROPFILES или даже через реализацию интерфейса IDropTarget. Ни-че-го. В тоже время, если открыть системный командный интерпретатор cmd.exe и попытаться перетащить на его консольное окно какой-нибудь файл из Проводника или файлового менеджера, то в командной строке появится полный путь к этому файлу. Значит какие-то зачатки технологии Drag'n'Drop для консольных окон все-таки имеются.С помощью обработки событий консоли удалось выяснить, что при перетаскивании файла в консольное окно, путь к нему передается посимвольно через события KEY_EVENT. При более детальном анализе я также выяснил, что четкой системы тут нет, часть символов передается с событием нажатия и отпускания клавиши, а часть только с отпусканием клавиш. Единственные закономерности заключаются в том, что такие символы передаются обязательно со счетчиком повторений равным 1 и точно с флагом отпускания клавиш.
Также не стоит забывать про различные программы-обработчики клавиатуры типа Punto Switcher, которые самостоятельно обрабатывают введенные символы и затем могут менять их раскладку и последовательность через эмуляцию ввода с клавиатуры.
Читать статью целиком »
Просмотров: 649 | Комментариев: 4

Получение информации о шрифте с помощью функции GetFontResourceInfo
29.11.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

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

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

Парсинг метаданных DSF-файлов на Ассемблере
Во время очередного пиратского набега на торренты мне попался музыкальный альбом в формате DSF. Это контейнер для аудиопотока в супер-мега качестве, разработанный компаниями Sony и Philips. В результате и файлы получаются по 400-500 мегабайт на одну песню. Может быть для аудиофилов такое качество как-то можно обосновать, но для меня этот формат представляет исключительно спортивный интерес. А точнее, как из таких файлов извлечь метаданные.
Читать статью целиком »
Просмотров: 419 | Комментариев: 0

Как защитить DLL от выгрузки через FreeLibrary
07.11.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Небольшой трюк, позволяющий защитить вашу DLL от выгрузки из процесса при помощи функции FreeLibrary. Например, если процесс обнаружил инжект посторонней библиотеки в свое адресное пространство и пытается от нее избавиться.Сперва немного теории. При вызове функции LoadLibrary увеличивается на единицу внутренний счетчик загрузок, но повторной загрузки библиотеки не выполняется. При вызове функции FreeLibrary, соответственно, этот счетчик уменьшается. При достижении счетчиком нулевого значения библиотека выгружается из памяти. На этом основан метод "защиты" от выгрузки, когда в самой DLL несколько раз дополнительно вызывается LoadLibrary, тем самым увеличивая счетчик загрузок. Но ведь никто не мешает вызвать FreeLibrary сто или сто тысяч раз подряд, пока счетчик не будет обнулен. Поэтому я взял слово "защита" в кавычки.
Правильным способом защититься от выгрузки DLL из целевого процесса будет использование функции GetModuleHandleEx с флагом GET_MODULE_HANDLE_EX_FLAG_PIN. Функция должна вызываться из DLL. В этом случае загруженный модуль будет оставаться в памяти вплоть до завершения основного процесса, независимо от того, сколько раз будет вызвана функция FreeLibrary.
Просмотров: 447 | Комментариев: 2

Как получить список поддерживаемых кодировок
05.11.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодняшний небольшой пример кода - получение списка всех поддерживаемых кодировок в системе. Примерно такой список можно увидеть в меню сохранения в текстовых редакторах или в браузерах, когда надо выбрать кодировку страницы. Если ваше приложение умеет работать с разными кодировками, то значит должно уметь и получать их список.Начинаем с констант и структуры, которые отсутствуют в FASM.
Code (Assembler) : Убрать нумерацию
- CP_SUPPORTED = 0x00000002
- MAX_LEADBYTES = 12
- MAX_DEFAULTCHAR = 2
- struct CPINFOEX
- MaxCharSize dd ?
- DefaultChar rb MAX_DEFAULTCHAR
- LeadByte rb MAX_LEADBYTES
- UnicodeDefaultChar dw ?
- CodePage dd ?
- CodePageName rb MAX_PATH
- ends
Code (Assembler) : Убрать нумерацию
- ; Получить список поддерживаемых кодировок
- invoke EnumSystemCodePages,CodePageEnumProc,CP_SUPPORTED
Читать статью целиком »
Просмотров: 595 | Комментариев: 0
