Низкоуровневое программирование для Дzenствующих
Вид материала | Документы |
- Низкоуровневое программирование, 108.99kb.
- Курс является базовым как для изучения других математических дисциплин, так и для более, 36.89kb.
- 1 Обобщенное программирование. Обобщенное программирование это еще одна парадигма программирования,, 55.18kb.
- Введение в линейное программирование линейное программирование (ЛП), 139.72kb.
- Учебно-методический комплекс для студентов заочного обучения специальности Прикладная, 63.23kb.
- Аттестационное тестирование в сфере профессионального образования, 72.49kb.
- Лекции по дисциплине «Социальное моделирование и программирование», 44.69kb.
- Программа дисциплины Линейное программирование Семестр, 17.93kb.
- Программа дисциплины "Программирование" для направления, 488.76kb.
- Рабочая программа по дисциплине Программирование на языке высокого уровня для специальности, 182.97kb.
* * *
Ну вот, вроде и все. По идее, теперь вы должны представлять строение PE-файла, уметь играться с Perl и Java, а также приблизительно понимать XML, и уметь применять XSLT. Также, наверняка, вам очень хочется сказать нам что-то теплое, ласковое, домашнее за ваши муки при чтении.
Хотелось бы заметить, что сам характер материала, излагаемого здесь, должен подтолкнуть вас к самостоятельным исследованиям. Нельзя верить тому, что пишут, проверяйте сами! Наверняка большая часть алгоритмов, здесь описанных, в скором времени работать перестанет! Поэтому скажем еще раз - нечего плеваться, если нашли оговорку или опечатку, они неизбежны, несмотря на все наши старания. Все надо проверять!
Теперь самое время расстаться с нашими игрушками и рассмотреть реальные случаи.

5. Благодарности
Ну, традиционный пункт, который все авторы старательно пишут, а все читатели старательно игнорируют. Можете игнорировать и вы, кусать никто не будет.
Первым пишу я, Volodya.
Хотелось бы выразить искреннюю благодарность и признательность Евгению Сусликову за данные консультации по RVA/VA и файловым оффсетам. Я также горжусь знакомством со sla-md, который дал мне очень подробные объяснения о преобразовании флагов секций PE-файла в соответствующие атрибуты, объяснил некоторые сетевые трюки и вообще, просто является гениальным человеком. Щiре дякую Quantum'у за успешную попытку статической линковки API-forward-функций. Так же обязательно стоит поблагодарить Russell Osterlund за некоторые пояснения по работе лоадера. Самые теплые слова (эх, как звучит!) надо сказать моей любимой команде - HI-TECH (wasm.ru) - Edmond, Aquila, Broken Sword, Four-F - спасибо за ценные замечания, указания, пожелания, вылавливание мелких и крупных блох в моих рассуждениях. Спасибо!
Вторым пишу я, NEOx.
Хотелось бы выразить особую благодарность Доктору Голове за его консультацию по поводу восстановления директории ресурсов, а так же всей команде uinC.

Итак, что дальше.
Вторая часть статьи будет рассказывать об алгоритмах работы элементарного пакера, самых легких случаях нахождения OEP, распаковке ручками Aspack/UPX/telock/pelock/crunch и т.п. Будет упомянут механизм SEH и некоторые антиотладочные приемы.
Третья часть посвящена очень сложным защитным системам – Armadillo, Obsidium, Asprotect.
Засим разрешите распрощаться до следующей части. Ave.

...ночь была теплой. Запахи пьянили. Гарри привлек к себе Гермиону и их губы встретились. Открыв глаза, Гарри увидел за спиной Гермионы две красных звездочки. Они были похожи на ... были похожи на... ! "Герми...", прошептал Поттер, чувствуя озноб. "М-м?" - отозвалась она, прижимаясь к нему. Красные точки начали приближаться. Гарри сбросил оцепенение и отодвинул Гермиону в сторону, закрывая собой. Из темноты показалось невероятное существо. - Да это же тот самый "электронный философ", - хрипло сказал Гарри. - Помнишь, мы искали, кто такой Эвклид?
Существо сделало большой шаг и сжало металлической рукой плечо Гермионы. Та завизжала. Гарри непослушными пальцами пытался вытащить палочку, запутавшуюся в складках мантии. Существо произнесло медным голосом всего два слова. В словах чувствовался вопрос:
- Са-ра--Кон-нор?
(окончание следует...)
Руководство по проектированию макросов в MASM32
(часть 1.1)
Пойми в Хаосе Разное, и стань человеком.
Осознай Единое в Различном – и будь Богом.
Автор
I. От автора
I.1. Для тех, кто впервые...
I.2. Примечания (обо всём понемногу)
I.3. Особенности терминологии
I.4. Благодарности
II. Лень – двигатель Макро
III. Макромир MASM
III.1. Функционирование макросов
III.2. Определение макро переменных и строк
III.3. Обработка выражения в MASM
III.4. Вычисление рекурсивных выражений
III.5. Встроенные макрофункции и директивы
III.6. Символ макроподстановки
III.7. Макроблоки
III.8. Отладка макроопределений и заключение
III.9. Абстрактный алгоритм анализа строки MASM (Дополнение)
I. От автора
В этом руководстве раскрывается тема создания, использования (а главное – проектирования) макросов и макрофункций в проектах на MASM32.
Что не так важно в ЯВУ, то очень важно в программировании на ассемблере. Если выстроить по приоритетам недостатки программирования на ассемблере, то первым недостатком будет не объём строк написанного кода (как нестранно), а отсутствие средств, обеспечивающих хороший стиль написания кода.
Что значит стиль? А что значит плохой или хороший? Это можно быстро понять на простом примере.
Допустим, у вас есть процедура объёмом на несколько экранов. Вы её написали месяц назад, а теперь вам нужно несколько изменить её поведение. Для того, чтобы сделать это, вам необходимо:
- Вспомнить её алгоритм (если забыли)
- Вспомнить особенности реализации (у вас должны быть комментарии)
- Вспомнить какой участок кода, чем занимается.
Если код процедуры был прооптимизирован, вероятней всего вам захочется, чтобы после модификации он остался настолько же оптимальным, а поэтому вы должны вспомнить все тонкости кода, или только того участка, который подлежит модификации.
А это не так то просто, даже если исходник написан вами, в вашем неповторимом стиле.
Если этот стиль будет хорошим, вы потратите меньшее время, если бы стиль был бы плохим.
Хороший стиль программирования – это сэкономленное время, которое можно потратить на понимание, модификацию или, как это называют, сопровождение кода. Стиль программирования – это архитектура исходного кода – не только его внешнее оформление, но и использование констант, разбиения кода на функции или процедуры, способы вызова функций и процедур, согласованность структур, их потенциал к расширению, гибкость алгоритмов и многое другое. Стиль программирования сложно отделить от архитектуры самой программы, так как хорошо спроектированная программа не может иметь плохого стиля программирования. |
Конечно же, на ЯВУ легче писать качественно оформленные программы, хотя бы, потому что ЯВУ уже имеет готовые средства выражения, и шаблоны мышления.
Что такое шаблоны мышления? Всё чем вы так активно пользуетесь: - типы - функции - классы - массивы - указатели на типы - пространства имён - шаблоны (С++) Всё это направляет ваше понимание программирования как пространства сотканного из таких абстракций. |
Недавно я прочёл следующую мысль на форуме ссылка скрыта:
Да, зачем вы пишите программы на asm под Win32, лучше уже писать под DOS, там хоть нет этого бесконечно однообразного кода создания окон и обработки сообщений. |
Такое заявление говорит, что программист не желает писать проекты более чем на 6 000 строк (или 3 000 :)). Вместо того чтобы извлечь великую выгоду из единообразия кода, мы ругаем его. А ведь это первый звонок к автоматизации программирования.
Неужели программирование asm может быть похоже на Delphi (ох как его не любят некоторые)? Снова интегрированная среда? Конечно!!! (Жаль, её всё-таки нет!) Но это не значит, что она играет отрицательную роль. Хотя о средствах автоматизации и их создании мы поговорим в другой работе. |
Ассемблер не определяет шаблонов мышления, и практически не имеет средств выражения каких либо шаблонов (из-за чего автор пользуется им).
Очень сложно назвать директиву proc средством выражение процедурной модели программирования. |
Однако я могу ручаться, если вы научитесь писать качественно стилизированные программы на ассемблере, то на ЯВУ… ?.
Об искусстве стилизации или проектировании архитектуры написано слишком мало, а рассказать хотелось бы слишком много. Только нельзя объять необъятное, и потому цель этого руководства рассказать об использовании макросов в MASM32, а также о том, как их можно либо нужно использовать, чтобы более качественно стилизировать код.