
Извлечение главной иконки из исполняемого файла

Извлечение главной иконки из исполняемого файла
В комментариях к недавней статье про замену главной иконки исполняемого файла задали очень правильный вопрос: как извлечь иконки из ресурсов исполняемого файла? Сегодня я постараюсь подробно рассказать вам, как это делается.
Начнем с описания структур, необходимых для работы с иконками. Они уже были в прошлых статьях. Так как мы будем использовать ресурсы и файлы иконок, нам понадобятся они все.
Code (Assembler) : Убрать нумерацию
- ; Структуры для работы с иконками в группе
- struct ICONDIR
- idReserved dw ? ; Зарезервировано (должно быть 0)
- idType dw ? ; Тип ресурса (1 для иконок)
- idCount dw ? ; Количество изображений в иконке
- ends
- struct GRPICONDIRENTRY
- bWidth db ? ; Ширина изображения в пикселах
- bHeight db ? ; Высота изображения в пикселах
- bColorCount db ? ; Количество цветов
- bReserved db ? ; Зарезервировано
- wPlanes dw ? ; Зарезервировано
- wBitCount dw ? ; Зарезервировано
- dwBytesInRes dd ? ; Размер данных изображения
- nID dw ? ; ID иконки в ресурсах
- ends
- struct ICONDIRENTRY
- bWidth db ? ; Ширина изображения в пикселах
- bHeight db ? ; Высота изображения в пикселах
- bColorCount db ? ; Количество цветов
- bReserved db ? ; Зарезервировано
- wPlanes dw ? ; Зарезервировано
- wBitCount dw ? ; Зарезервировано
- dwBytesInRes dd ? ; Размер данных изображения
- dwImageOffset dd ? ; Смещение данных относительно начала файла
- ends
Code (Assembler) : Убрать нумерацию
- ; Загрузить исходный файл в память
- invoke LoadLibrary,szSource
- or eax,eax
- jz loc_exit
- ; Хэн