Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на ассемблере под Windows с нуля Выпуск№3


Информационный Канал Subscribe.Ru


В поисках истины

или программирование на ассемблере под Windows с нуля.


Выпуск №3

Сегодня в выпуске:


Обращение к подписчикам

   Сегодня мы приступаем к теме, которая закрывает цикл чисто теоритических статей. Также, подробно будут описаны необходимые нам инструменты для обучения и творчества. Вам обязательно скачать нужно будет только те программы, которые отнесены к категории "Необходимые". Программы, которые относятся к категории "Желательные", в ближайшее время, нам, скорее всего, не понадобятся, поэтому не имеет большого смысла тратить ваши деньги и время на их скачивание. А затраты могут быть значительными последняя версия IDA PRO "весит" около 30 мб. Остальные инструменты в размере не превышают нескольких мегабайт.
   Ко мне не поступило не одно письма-вопроса по первым двум выпускам, значит у вас не возникло непонимания. Что же я рад этому :-), хотя мне с трудом вериться в это ;-). У вас еще есть, пока, возможность задать мне вопросы по системам счисления, но когда мы прейдем к практическим занятиям я не стану объяснять теорию заново. Так что подумайте, действительно-ли вам все понятно. И если что-то непонятно - пишите.



Глава №1

Биты, байты, слова etc

    Сегодня на повестке дня обсуждение такой важной темы как единицы измерения информации. Как известно, наименьшей единицей информации является бит. Бит может иметь два значения - нуль и единица. Для процессора это так, но с точки зрения пользователя значение бита может иметь разный смысл, это может "да" или "нет", любое другое значение, где возможных вариантов только два. С помощью одного бита можно хранить мало информации. Большей единицей информации является байт, его размерность 8 бит. Существует ряд причин, по которым байт имеет специальное название. Элементарная ячейка памяти имеет длину 8 бит. Байт является наименьшей совокупностью данных, с которой микропроцессор может непосредственно манипулировать. Что это значит? А это значит, что если нам необходимо изменить значение всего лишь одного бита, необходимо будет обратиться ко всему байту, в который он входит. Байт можно представить в таком виде:

1 0 1 0 0 1 1 1
7 6 5 4 3 2 1 0

   Биты в байте нумеруют справа налево, от нуля до семи, нулевой бит называют младшим битом, а седьмой - старшим. Так как всего в байте восемь бит, байт может принимать до 28 или 256 разных значений. Байт используют для представления целых чисел от 0 до 255 (0...FF), целых чисел со знаком от -128 до +127 набора символов ASCII и ANSI или переменных, принимающих менее 256 значений, например для представления десятичных чисел от 0 до 99.
   До этого момента все понятно, даже многим покажется скучным :-(. Вы думаете дальше будут кило-, мега-, гига - и терабайты, а вот и не угадали =). Дальше будет "слово". Какое такое "слово"? Долго думали люди как бы им назвать два последовательных бита, думали-думали и придумали =). Решили назвать эти два бита "слово" (word). Раз в слове два байта, следовательно, в нем 16 бит и поэтому слово может принимать до 216 или 65536 разных значений. Биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность - младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова. Про адреса мы с вами поговорим попозже, эта была информация к размышлению ;-). "Рисуем", теперь, как выглядит слово:

Старший байт Младший байт
1 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

   Слово используют для представления целых чисел от 0 до 65535 (0...FFFF), целых чисел со знаком от -32 768 до +32 767, а так же для набора символов UNICODE.
   Двигаемся дальше. Еще большей единицей измерения является последовательность из четырех байт (32 бита) - двойное слово (double word), согласитесь логично =). Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й (последний) бит, - старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова. Повторяюсь, про адреса сейчас объяснять не буду, рано ещё ;-). Теперь запишем, сколько же "помещается" в двойное слово, совсем немало - целые числа без знака от 0 до 4294967295 (0...FFFFFFFF), целые числа со знаком от -2147483 648 до +2147483647.    Байты, слова и двойные слова - основные типы данных, с которыми мы будем работать. Существуют еще и другие единицы, но о них я расскажу в другой раз, на сегодня достаточно информации.
   Рассмотрев общие вопросы размерности, перейдем к частностям. Частным случаем в нашей ситуации является ОС Windows =). Как же эта ОС пользуется разными размерами. Любимым размером Окошек является двойное слово. В чем это проявляется? В том, что double word может быть и указатель на строку символов (LPCSTR), и результат, возвращаемый функцией (LRESULT), и даже, цветом (COLORREF). И как поется в одной попсовой песенке, "и это еще не придел" =). Когда будем разбираться с функциями API убедитесь, как много возложено на эти 32-бита. На этом тему о битах и байтах на сегодня закончена. Потом мы еще вернемся к ней, но уже с определенными знаниями, чтобы дополнить их новыми.



Инструментарий

   

   А сейчас очень важная тема - "инструментарий".

Необходимые

   Я не стану долго объяснять, почему я выбрал тот или иной ассемблер или другие инструменты доверьтесь мне ;-). Итак, главным нашим инструмент, с помощью которого мы будем создавать наши программы - это ассемблер. Мы будем использовать MASM32 - макроассемблер, от любимой =) софтверной фирмы - Microsoft. Но MASM32 не простой, а особенный, доделанный Hutch'ем. Что в этом ассемблере доделал Hutch, я скажу отдельно в другой раз.

   Следующим важным инструментом является отладчик. Что такое отладчик? Программист на ЯВУ c уверенностью ответит: "отладчик - программа, помогающая найти и исправить ошибки, допущенные при разработке программы". А ассемблерщик ещё добавит: "отладчик - это мощный инструмент, помогающий изучить язык ассемблера". Как это понять? В процессе изучения языка ассемблера очень часто пишутся программы, которые внешне себя никак не проявляют, но которые очень много делают на самом низком уровне, "общаются" с процессором и с памятью. Вот такие программы и запускаются под отладчиком, и мы можем наблюдать разные превращения, порой кажущиеся просто магическими =). Я не буду объяснять, что же мы можем увидеть там такого "магического", все равно не поймете, рано ещё. Просто знайте, отладчик в наших руках может много ;-). При выборе ассемблера я не задумывался долго, а вот при выборе отладчика, меня мучили сомнения - какой же выбрать, благо сейчас есть несколько отладчиков заслуживающих внимания. На первом месте уже давно отладчик фирмы NuMega SoftIce, это действительно мощнейший отладчик, он основной инструмент крекеров всей планеты, да и среди программистов он себя хорошо зарекомендовал. Если вас интересует этот отладчик, в любом поисковике напишите его название, вы получите кучу ссылок. Другой отладчик, который последнее время все больше и больше мне нравится - это OllyDbg. В чем отличие этого отладчика от SoftIce - он имеет привычный для нас вид Windows приложения, он более прост в обращении, работает с русским шрифтом, и еще много приятных мелочей. Поэтому я и решил его использовать.

Желательно иметь при себе

   Следующим инструментом, который желательно иметь в хозяйстве но не обязательно, является шестнадцатеричный редактор. Hex-редакторов существует еще больше чем отладчиков, но в том и другом случае есть лидеры. Один из наиболее удобных Hex-редакторов является Hex Workshop, для нас с вами сейчас главным фактором является удобство и простота использования. Когда вы наберетесь достаточного опыта, вы сможете выбрать Hex-редактор по вкусу. Опять заболтался =). Не сказал что же такое Hex-редактор, и для чего он нужен нам. Из названия понятно, раз он редактор, значит, он что-то редактирует. Редактировать он может что угодно. Конечно, это не значит что открыв в нем картинку, вы сможете что-нибудь нарисовать, или редактировать музыкальные треки. Нет, просто он может открыть любой файл и показать его "первородный" вид, то есть последовательность 0 и 1, но так как он редактор шестнадцатеричный то он выводит вместо нулей и единиц hex-цифры. Но правильно отредактировать вы в нем сможете либо исполняемы файлы, либо простой текст. Но так как мы будем писать программы, то использовать его будем только для редактирования и просмотра своих творений.

   Желательно также в хозяйстве иметь дизассемблер. Дизассемблер - это программа, позволяющая получить более-менее правильный ассемблерный листинг из исполняемых файлов. По началу он нам будет не нужен, но он нам обязательно пригодится. Как и в случае с отладчиками, среди дизассемблеров есть признанный лидер - The Interactive Disassembler (IDA Pro). Последняя версия, по-моему, 4.6. Есть еще много разных хороших и не очень дизассемблеров, но вам для начала надо знать о существовании только двух Sourcer и Wdasm. Закачивать себе их на винт в ближайшем будущем нет необходимости, это просто для вашего сведения.

   Ну и на последок, для любого ЯВУ существует интегрированная среда разработки (IDE), или даже среда быстрой разработки приложений (RAD). Естественно возникает вопрос а существует что-либо подобное для ассемблера? Могу вас обрадовать,и одновременно огорчить. Да IDE для ассемблера существует большое количество, причем, как комерческих, так и бесплатных проектов, но они все, к сожалению, по удобству не дотягивают до IDE ЯВУ. Я перепробовал около десятка полноценных IDE, не блокнотов с подсветкой синтаксиса, а настоящих интегрированных сред разработки. Но одна лишь среда мне действительно понравилась - это RadASM. Простое описание всех его достоинств заняло бы целый выпуск. Поэтому, я сейчас об этом ничего говорить не буду. Скажу лишь одно, RadASM целиком написан на ассемблере, скачав его, вы сможете убедиться что утверждение "на ассемблере не пишут большие Windows-проекты" ложно. Конечно он не лучший среди всех IDE для ассемблера, но он лучший из бесплатных!!! Все эти программы вы можете скачать на этом сайте wasm.ru, на сегодня это лучший русскоязычный сайт, посвященный программированию на ассемблере. Я специально не даю точных ссылок на расположение программ на этом сайте, так как хочу, чтобы вы по нему походили, посмотрели, пообщались в форуме. На этой оптимистичной ноте хотел с вами попрощаться до следующего выпуска.

P.S. настройка и работа с перечисленными программами будет рассмотрена подробно отдельно, в дальнейшем.

На этой оптимистичной ноте хотел с вами попрощаться до следующего выпуска.



Обратная связь

Если вы хотите что-то спросить по ассемблеру, крэку, или просто поболтать прошу на форум нашей команды, там вы сможете получить ответы от меня, и моих товарищей Mafia32, formatC Вы можете отправить письмо на мой почтовый ящик , только в том случае если вопрос имеет отношение к рассылке. Обязательно заполняйте поле "Тема", письма без темы, я не буду читать. Для вашего удобства я разместил в рассылке e-mail форму, вы можете прямо из нее отправлять свое письмо, но для этого должна быть настроена ваша почтовая программа.

Имя:
Тема:
Сообщение:



Копирайты

Вся информация, содержащаяся в рассылках, является интеллектуальной собственностью своих законных авторов.
Перепечатка и распространение материалов рассылки только с разрешения автора.

Copyright © 2004 SeDoYHg

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное