Blog. Just Blog

Быстрый поиск

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

"FASM и UPX: созданы друг для друга"

25.03.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сразу скажу, утро и кофе к этой статье отношения не имеют, все необычные решения приходят ко мне обычно по ночам. Однажды я экспериментировал с FASM, и обнаружил один интересный момент. Ниже приведен ассемблерный листинг самой простейшей программы, она выводит на экран сообщение и сразу же завершает работу, вроде бы ничего необычного.
  1. section '.code' code readable executable
  2.  
  3.   start:
  4.         ; Вывести окно сообщения и выйти из программы
  5.         invoke  MessageBox, NULL, szMess, szTitle, MB_OK
  6.         invoke  ExitProcess,0
  7.  
  8.         ; Куча пустого места, чтобы можно было упаковать файл
  9.         rd      1000h
  10.  
  11. szTitle db      'Title',0
  12. szMess  db      'Hello, UPX ;)',0
  13.  
  14. ;---------------------------------------------
  15.  
  16. section '.idata' import data readable writeable
  17.  
  18. ; Обратите внмание, user32.dll прописан дважды
  19. library kernel32,'kernel32.dll',\
  20.         user32,'user32.dll',\
  21.         user32,'user32.dll'
  22.  
  23. include 'apia\kernel32.inc'
  24. include 'apia\user32.inc'
Но обратите внимание, что в секции импорта user32.dll прописан дважды. Это и есть та самая фишка, которую я случайно обнаружил. Блок нулевых байт в середине нужен, чтобы файл получился большой и его можно было упаковать. В реальных приложениях, скорее всего, такие избыточные данные не понадобятся.

Читать статью целиком »
Просмотров: 6098 | Комментариев: 10

Использование иконок разных размеров в ресурсах

12.02.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Большим плюсом Flat Assembler является то, что при разработке создается минимальное количество файлов. Описания ресурсов хранятся прямо в исходнике ASM, что тоже очень удобно. Например, в официальной документации и исходниках описание главной иконки в ресурсах исполняемого файла выглядит примерно так:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data
  8.  
  9.   resource group_icons,\
  10.            1, LANG_NEUTRAL, main_icon
  11.  
  12.   ; Описание одиночной иконки
  13.   icon main_icon, icon_data, 'main_icon.ico'
Проблема в том, что одиночной иконки в приложениях часто бывает недостаточно. Система Windows в разных ситуациях отображает разные иконки файлов. Например, при просмотре папки Проводником в режиме "Таблица" или "Значки" иконки исполняемых файлов будут разного размера. Если в исполняемом файле только одна маленькая иконка, то она будет растянута до нужного размера. Аналогично, при компактном режиме просмотра одиночная большая иконка будет сжата. Качество изображения после масштабирования в большинстве случаев оставляет желать лучшего. После усиленных поисков было найдено такое вот простое, но неочевидное решение. Почему оно не описано в документации и не реализовано ни в одном примере, непонятно. Создаете несколько файлов иконок нужных размеров и описываете их в ресурсах следующим образом:
  1. section '.rsrc' resource data readable
  2.  
  3.   directory RT_ICON, icons,\
  4.             RT_GROUP_ICON, group_icons
  5.  
  6.   resource icons,\
  7.            1, LANG_NEUTRAL, icon_data1,\
  8.            2, LANG_NEUTRAL, icon_data2,\
  9.            3, LANG_NEUTRAL, icon_data3
  10.  
  11.   resource group_icons,\
  12.            1, LANG_NEUTRAL, main_icon
  13.  
  14.   ; Описание иконок разных размеров, объединенных в одну
  15.   icon main_icon,\
  16.            icon_data1, 'icon_16x16_32bit.ico',\
  17.            icon_data2, 'icon_32x32_32bit.ico',\
  18.            icon_data3, 'icon_48x48_32bit.ico'
Теперь наше приложение будет красиво отображаться в разных режимах просмотра. Количество иконок не ограничено, и вы можете использовать даже монохромные или 16-цветные иконки. Но лично я считаю, что для программ на Ассемблере вполне достаточно двух полноцветных иконок размерами 16х16 и 32х32 пикселов.

Читать статью целиком »
Просмотров: 7692 | Комментариев: 5

Установка и настройка Flat Assembler (FASM)

01.11.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter

Установка и настройка Flat Assembler (FASM)

Программирование на Ассемблере я начинал с Turbo Assembler (TASM) под MS-DOS, сейчас пишу на Flat Assembler (FASM) под Windows. Это очень удобный и мощный пакет для разработки, бесплатный для любого использования. Написан полностью на самом себе, исходники прилагаются. Мне он нравится тем, что позволяет хранить код и описания ресурсов в одном ASM-файле, поддерживает макросы, генерит чистый машинный код без всякой незаявленной самодеятельности, не требует лишней рутинной работы типа прописывания каждой задействованной функции в секцию импорта и еще множество приятных мелочей, облегчающих жизнь программисту. Единственным недостатком является отсутствие достаточного количества готовых исходников, например по сравнению с тем же MASM'ом, а портирование исходников с других платформ на FASM иногда вызывает затруднения. Но на мой взгляд портирование, в отличие от копирования, помогает гораздо лучше изучить язык. Несколько исходников-примеров есть в самом дистрибутиве FASM, еще несколько примеров можно скачать с офсайта или поискать в Интернете. Ответы на многие возникающие вопросы можно найти на официальном форуме FASM. Форум англоязычный, но на нем немало наших соотечественников. К новичкам на форуме относятся хорошо и отвечают даже на самые глупые вопросы.

Читать статью целиком »
Просмотров: 79571 | Комментариев: 56

01 02 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 3 (0.0023 сек.) / Память: 4.5 Mb
Наверх