Быстрый поиск
Введите фрагмент названия статьи для поиска
Получение размера динамической памяти приложения (Heap)
05.09.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
Heap или куча - особая структура данных, с помощью которой приложению выделяется динамически распределяемая память. Крайне удобная штука, когда надо быстренько выделить немного памяти под сиюминутные нужды. Но при активной работе с кучей может возникнуть ситуация, когда надо узнать размер оставшейся памяти, общий размер кучи или максимальный размер непрерывных данных, которые туда можно записать. Что-то из этого можно узнать при помощи штатных функций, а что-то придется получать копанием в недрах системы. Но сперва несколько структур и констант для работы. Их нет даже в MSDN, не говоря уже о FASM.Code (Assembler) : Убрать нумерацию
- struct DEBUG_BUFFER
- SectionHandle dd ?
- SectionBase dd ?
- RemoteSectionBase dd ?
- SectionBaseDelta dd ?
- EventPairHandle dd ?
- Unknown rd 2
- RemoteThreadHandle dd ?
- InfoClassMask dd ?
- SizeOfInfo dd ?
- AllocatedSize dd ?
- SectionSize dd ?
- ModuleInformation dd ?
- BackTraceInformation dd ?
- HeapInformation dd ?
- LockInformation dd ?
- Reserved rd 8
- ends
- struct DEBUG_HEAP_INFORMATION
- Base dd ?
- Flags dd ?
- Granularity dw ?
- Unknown dw ?
- Allocated dd ?
- Committed dd ?
- TagCount dd ?
- BlockCount dd ?
- Reserved rd 7
- Tags dd ?
- Blocks dd ?
- ends
- PDI_HEAPS = 0x04
- PDI_HEAP_BLOCKS = 0x10
Code (Assembler) : Убрать нумерацию
- ; Зарезервировать буфер для отладочной информации
- invoke RtlCreateQueryDebugBuffer,0,FALSE
- mov [debug_buf],eax
- ; Получить информацию о кучах текущего процесса
- invoke GetCurrentProcessId
- invoke RtlQueryProcessDebugInformation,eax,\
- PDI_HEAPS+PDI_HEAP_BLOCKS,[debug_buf]
- mov eax,[debug_buf]
- ; Указатель на информацию о кучах
- mov eax,[eax+DEBUG_BUFFER.HeapInformation]
- ; Количество записей
- mov ecx,[eax]
- ; Пропустить заголовок
- add eax,4
- .loc_heap_scan:
- or ecx,ecx
- jz .loc_heap_done
- ; Это наша куча?
- mov edx,[eax+DEBUG_HEAP_INFORMATION.Base]
- cmp edx,[hHeap]
- jne .loc_heap_next
- ...
- ; В структуре DEBUG_HEAP_INFORMATION информация о куче
- ...
- jmp .loc_heap_done
- .loc_heap_next:
- add eax,sizeof.DEBUG_HEAP_INFORMATION
- dec ecx
- jmp .loc_heap_scan
- .loc_heap_done:
- ; Прибраться за собой
- invoke RtlDestroyQueryDebugBuffer,[debug_buf]
Читать статью целиком »
Просмотров: 1343 | Комментариев: 0
Вывод изображения на Ассемблере с помощью WIC
13.08.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
На сайте уже есть две статьи про загрузку и вывод изображения с помощью GDI+ и OLE, сегодня расскажу про еще очередной способ загрузки изображений, на этот раз с помощью WIC (Windows Imaging Component). Эта технология позволяет не привязываться к конкретным форматам изображений, а делегировать большую часть рутинной работы системе. Если установлен соответствующий графический кодек и система в принципе может открыть изображение во встроенном Просмотрщике фотографий, значит его можно будет прочитать и при помощи Windows Imaging Component. Например, популярный формат WebP в чистой Windows 7 не открывается, но если поставить кодеки, то все сразу заработает.Переходим к программированию. Поскольку это COM-технология, то нам понадобится описание множества GUID, констант и интерфейсов. Надо ли говорить, что FASM про них ничего не знает? А множество действительно внушительное.
Code (Assembler) : Убрать нумерацию
- ; GUID {CACAF262-9370-4615-A13B-9F5539DA4C0A}
- CLSID_WICImagingFactory dd 0CACAF262h
- dw 09370h
- dw 04615h
- db 0A1h, 03Bh, 09Fh, 055h, 039h, 0DAh, 04Ch, 00Ah
- ; GUID {EC5EC8A9-C395-4314-9C77-54D7A935FF70}
- IID_IWICImagingFactory dd 0EC5EC8A9h
- dw 0C395h
- dw 04314h
- db 09Ch, 077h, 054h, 0D7h, 0A9h, 035h, 0FFh, 070h
- ; IID_IWICImagingFactory Interface
- struct IWICImagingFactory
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICImagingFactory
- CreateDecoderFromFilename dd ? ; 00Ch
- CreateDecoderFromStream dd ? ; 010h
- CreateDecoderFromFileHandle dd ? ; 014h
- CreateComponentInfo dd ? ; 018h
- CreateDecoder dd ? ; 01Ch
- CreateEncoder dd ? ; 020h
- CreatePalette dd ? ; 024h
- CreateFormatConverter dd ? ; 028h
- CreateBitmapScaler dd ? ; 02Ch
- CreateBitmapClipper dd ? ; 030h
- CreateBitmapFlipRotator dd ? ; 034h
- CreateStream dd ? ; 038h
- CreateColorContext dd ? ; 03Ch
- CreateColorTransformer dd ? ; 040h
- CreateBitmap dd ? ; 044h
- CreateBitmapFromSource dd ? ; 048h
- CreateBitmapFromSourceRect dd ? ; 04Ch
- CreateBitmapFromMemory dd ? ; 050h
- CreateBitmapFromHBITMAP dd ? ; 054h
- CreateBitmapFromHICON dd ? ; 058h
- CreateComponentEnumerator dd ? ; 05Ch
- CreateFastMetadataEncoderFromDecoder dd ? ; 060h
- CreateFastMetadataEncoderFromFrameDecode dd ? ; 064h
- CreateQueryWriter dd ? ; 068h
- CreateQueryWriterFromReader dd ? ; 06Ch
- ends
- ; IID_IWICBitmapDecoder Interface
- struct IWICBitmapDecoder
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICBitmapDecoder
- QueryCapability dd ? ; 00Ch
- Initialize dd ? ; 010h
- GetContainerFormat dd ? ; 014h
- GetDecoderInfo dd ? ; 018h
- CopyPalette dd ? ; 01Ch
- GetMetadataQueryReader dd ? ; 020h
- GetPreview dd ? ; 024h
- GetColorContexts dd ? ; 028h
- GetThumbnail dd ? ; 02Ch
- GetFrameCount dd ? ; 030h
- GetFrame dd ? ; 034h
- ends
- ; IWICBitmapFrameDecode Interface
- struct IWICBitmapFrameDecode
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICBitmapFrameDecode
- GetSize dd ? ; 00Ch
- GetPixelFormat dd ? ; 010h
- GetResolution dd ? ; 014h
- CopyPalette dd ? ; 018h
- CopyPixels dd ? ; 01Ch
- GetMetadataQueryReader dd ? ; 020h
- GetColorContexts dd ? ; 024h
- GetThumbnail dd ? ; 028h
- ends
- ; IID_IWICFormatConverter Interface
- struct IWICFormatConverter
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICFormatConverter
- GetSize dd ? ; 00Ch
- GetPixelFormat dd ? ; 010h
- GetResolution dd ? ; 014h
- CopyPalette dd ? ; 018h
- CopyPixels dd ? ; 01Ch
- Initialize dd ? ; 020h
- CanConvert dd ? ; 024h
- ends
- ; IID_IWICBitmap Interface
- struct IWICBitmap
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICBitmap
- GetSize dd ? ; 00Ch
- GetPixelFormat dd ? ; 010h
- GetResolution dd ? ; 014h
- CopyPalette dd ? ; 018h
- CopyPixels dd ? ; 01Ch
- Lock dd ? ; 020h
- SetPalette dd ? ; 024h
- SetResolution dd ? ; 028h
- ends
- ; IID_IWICBitmapLock Interface
- struct IWICBitmapLock
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IWICBitmapLock
- GetSize dd ? ; 00Ch
- GetStride dd ? ; 010h
- GetDataPointer dd ? ; 014h
- GetPixelFormat dd ? ; 018h
- ends
- ; GUID {6FDDC324-4E03-4BFE-B185-3D77768DC910}
- GUID_WICPixelFormat32bppPBGRA dd 06FDDC324h
- dw 04E03h
- dw 04BFEh
- db 0B1h, 085h, 03Dh, 077h, 076h, 08Dh, 0C9h, 010h
- CLSCTX_INPROC_SERVER = 0x01
- WICBitmapDitherTypeNone = 0x00000000
- WICBitmapPaletteTypeCustom = 0x00000000
- WICBitmapCacheOnDemand = 0x00000001
- WICBitmapLockWrite = 0x00000002
- WICDecodeMetadataCacheOnDemand = 0x00000000
Читать статью целиком »
Просмотров: 913 | Комментариев: 5
Как определить уровень UAC своего процесса
07.08.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как известно, контроль учетных записей (UAC) является основополагающим компонентом общей концепции безопасности Microsoft. UAC помогает уменьшить воздействие вредоносных программ и защищать данные от несанкционированного доступа. Если для работы ваших приложений понадобится доступ к защищенным объектам, то система выдаст соответствующее предупреждение с запросом о предоставлении таких прав. Особенно это актуально для системы Win10 и выше, где Проводник всегда запускается в контексте безопасности обычного пользователя и, соответственно, все запущенные в нем процессы также будут иметь обычные права. Для повышения прав приложения можно запускать от имени Администратора.Для того, чтобы определить, как именно было запущено ваше приложение, то есть в нормальном режиме или от имени Администратора, есть специальные функции. Но сперва, как обычно, не известные FASM константы.
Code (Assembler) : Убрать нумерацию
- TOKEN_QUERY_SOURCE = 0x0010
- TOKEN_QUERY = 8h
- TokenElevationType = 18
- TokenElevationTypeDefault = 1
- TokenElevationTypeFull = 2
- TokenElevationTypeLimited = 3
Code (Assembler) : Убрать нумерацию
- invoke GetCurrentProcess
- invoke OpenProcessToken,eax,TOKEN_QUERY,hToken
- invoke GetTokenInformation,[hToken],TokenElevationType,tet,4,dSize
Читать статью целиком »
Просмотров: 904 | Комментариев: 6
32-bit ASM Calculator 1.12
27.07.2022 | Категория: Мои программы | Автор: ManHunter
Скриншот программы 32-bit ASM Calculator
32-битный калькулятор, написан как обычно для личных нужд, потому что "ксорить дворды в уме" уже поднадоело :) Позволяет выполнять арифметические и битовые команды Ассемблера, в том числе команды, использующие при вычислениях значение Carry Flag. Результат операции отображается в шестнадцатеричном виде с возможностью реверса байт, в десятичном виде с возможностью знакового отображения, в бинарном с разбивкой на октеты и в текстовом, если есть такая возможность. Кроме этого калькулятор показывает состояние флагов процессора сразу после выполнения выбранной операции и условные переходы, которые сработают при этой комбинации флагов. Состоянием флагов можно также управлять и вручную. Встроенный конвертер позволяет быстро переводить числа из десятичной, шестнадцатеричной, двоичной и других систем счисления, текстовых строк и битового представления. Вы можете сразу устанавливать полученное число в качестве значений операндов.
Читать статью целиком »
Просмотров: 49737 | Комментариев: 201
Встроенный браузер в приложении на Ассемблере
06.07.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter
Встроенный браузер в приложении на Ассемблере
Сегодня будем рисовать свой браузер, а точнее внедрять фрейм web-браузера в интерфейс нашего приложения. Нечто подобное мы уже делали, но там были отдельные страницы, а сейчас полноценный браузер, встроенный в приложение. Языком исполнения, естественно, будет Ассемблер.
Читать статью целиком »
Просмотров: 1261 | Комментариев: 9