
Быстрый поиск
Введите фрагмент названия статьи для поиска

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

Работа с метаданными MP3-файлов на Ассемблере
Во многих файлах, в частности музыкальных и видео, присутствуют особые блоки данных, так называемые метаданные или теги. Метаданные содержат информацию о названии композиции и альбома, имени исполнителя, жанре, номере трека и т.п. Их используют программные и аппаратные проигрыватели, каталогизаторы и другие средства для работы с мультимедийными файлами. Давайте посмотрим, как можно получить теги из MP3-файла или изменить их средствами самой системы без ручного парсинга внутренней структуры файла.
Читать статью целиком »
Просмотров: 1204 | Комментариев: 5

Управление громкостью звука в системе
15.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Управление громкостью звука в системе
Сегодня разберем пример, как программно изменить громкость звука в Windows. В старых версиях Windows для этого использовались waveform-функции с очень неудобными параметрами. Управлять громкостью с помощью эмуляции мультимедийных клавиш тоже не самое лучшее решение. Но, к счастью, прогресс не стоит на месте.
Читать статью целиком »
Просмотров: 1720 | Комментариев: 9

Обработка колесика мыши над иконкой в трее
12.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
"По следам наших публикаций", как любили писать в советской прессе. В предыдущей статье я обещал рассказать, каким образом можно реализовать обработку вращения колесика мыши над иконкой в системном трее. Поскольку система не отправляет иконкам в трее сообщение WM_MOUSEWHEEL, обрабатывать его мы будем при помощи хуков и описанных в предыдущей статье методов определения, что курсор находится над нужной иконкой. Начнем с локального хука. Установка и снятие хука выполняется самым обычным способом, например:Code (Assembler) : Убрать нумерацию
- proc DialogProc hwnddlg,msg,wparam,lparam
- push ebx esi edi
- cmp [msg],WM_INITDIALOG
- je .wminitdialog
- cmp [msg],WM_CLOSE
- je .wmclose
- ...
- ...
- xor eax,eax
- jmp .finish
- .wminitdialog:
- ...
- ...
- ; Показать иконку в трее
- invoke Shell_NotifyIcon, NIM_ADD,node
- ; Установить обработчик мыши
- invoke GetCurrentThreadId
- invoke SetWindowsHookEx,WH_MOUSE,MousewheelProc,NULL,eax
- mov [hhkm],eax
- mov eax,[hwnddlg]
- mov [hwmain],eax
- jmp .processed
- ...
- ...
- .wmclose:
- ; Снять обработчик мыши
- invoke UnhookWindowsHookEx,[hhkm]
- ; Удалить иконку из трея
- invoke Shell_NotifyIcon,NIM_DELETE,node
- ; Закрыть окно
- invoke EndDialog,[hwnddlg],0
- .processed:
- mov eax,1
- .finish:
- pop edi esi ebx
- ret
- endp
Code (Assembler) : Убрать нумерацию
- ; Структура для обработчика хука
- struct MOUSEHOOKSTRUCTEX
- pt POINT
- hwnd dd ?
- wHitTestCode dd ?
- dwExtraInfo dd ?
- mouseData dd ?
- ends
- ;-------------------------------------------------------------
- ; Обработка mousewheel
- ;-------------------------------------------------------------
- proc MousewheelProc nCode:dword,wParam:dword,lParam:dword
- pusha
- cmp [nCode],0
- jl .loc_ret
- ; Это сообщение от колеса мыши?
- cmp [wParam],WM_MOUSEWHEEL
- jne .loc_ret
- ; Заполнить структуру для идентификации иконки
- mov [notify.cbSize],sizeof.NOTIFYICONIDENTIFIER
- mov eax,[hwmain]
- mov [notify.hWnd],eax
- mov [notify.uID],ICON_ID
- ; Получить координаты иконки в трее
- invoke Shell_NotifyIconGetRect,notify,rc
- ; Указатель на MOUSEHOOKSTRUCT
- mov ebx,[lParam]
- ; Курсор находится внутри прямоугольника иконки?
- invoke PtInRect,rc,[ebx+MOUSEHOOKSTRUCTEX.pt.x],\
- [ebx+MOUSEHOOKSTRUCTEX.pt.y]
- or eax,eax
- ; Нет, ничего не делать
- jz .loc_ret
- ; Проверить направление поворота колесика
- mov eax,[ebx+MOUSEHOOKSTRUCTEX.mouseData]
- or eax,eax
- js .loc_down
- .loc_up:
- ; Вращение вверх
- ...
- ...
- jmp .loc_ret
- .loc_down:
- ; Вращение вниз
- ...
- ...
- .loc_ret:
- popa
- invoke CallNextHookEx,[hhkm],[nCode],[wParam],[lParam]
- ret
- endp
Читать статью целиком »
Просмотров: 980 | Комментариев: 8

Получение координат иконки в трее
06.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодняшний пример - получение координат иконки в трее. Для чего это надо, я поясню чуть ниже. Сам код основан на уже знакомом вам переборе иконок в трее, поэтому практически все структуры будут такими же. Теоретическая часть работы с треем расписана там же, дублировать ее не буду. Начнем с описания всех необходимых структур и данных:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; Структура пользовательских данных иконки
- struct EXTRADATA
- Wnd dd ?
- uID dd ?
- ends
- class1 db 'Shell_TrayWnd',0 ; Название класса окна трея
- class2 db 'TrayNotifyWnd',0 ; Название класса панели уведомлений
- class3 db 'SysPager',0 ; Трей
- class4 db 'ToolbarWindow32',0 ; Панель с иконками
- ; Структура для кнопки
- button TBBUTTON
- ; Структура для пользовательских данных иконки
- extra EXTRADATA
- ; Иконка в трее
- node NOTIFYICONDATA
- ; Координаты иконки в трее
- rc RECT
- ICON_ID = 777
- hInstance dd ? ; Хэндл приложения
- hToolbar dd ? ; Хэндл окна с иконками
- IconsCount dd ? ; Количество иконок в трее
- ProcId dd ? ; Id процесса
- hProcess dd ? ; Хэндл процесса
- lpData dd ? ; Указатель на блок памяти
- BytesRead dd ? ; Количество прочитанных символов
Читать статью целиком »
Просмотров: 903 | Комментариев: 3

Использование TLS для антиотладки
26.10.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Использование TLS для антиотладки
TLS (Thread Local Storage) - локальная память потока, предназначенная для связки данных с потоком. Эта структура изначально была создана для решения проблемы совместного доступа к данным в многопоточных приложениях. TLS бывают статичными и динамическими. Углубляться в эти дебри сейчас не будем, для этого есть Джеффри Рихтер с его книгой "Windows для профессионалов". Нас интересует только тот факт, что при использовании статичной TLS появляется возможность выполнять произвольный код до передачи управления на EP. Это можно использовать для обнаружения отладчика еще до того, как он получит управление над программой.
Читать статью целиком »
Просмотров: 2432 | Комментариев: 1
