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



Санкт-Петербургский муниципальный институт

математико-механический факультет

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


Курсовая работа на тему

Разработка способа сбора инфы о ходе выполнения программки, который употребляет возможность модификации памяти процесса



Студент 445 группы

Булычев Иван Дмитриевич

Научный управляющий:

Педагог кафедры Системного Программирования

Баклановский Максим Викторович


Оценка Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода:


Санкт-Петербург

2010

Содержание


  1. Введение

    1. Архитектура фон Неймана

    2. История развития процессоров

    3. Организация памяти

      1. Оверлейная загрузка программ

      2. Виртуальная память

      3. Страничная организация памяти

    4. Многозадачность

    5. Процессы в ОС

    6. PE файл

  2. Постановка задачки

  3. Терминология

  4. Подобные продукты

  5. Мысль способа

    1. Методы внедрения

      1. Принципно вероятные методы внедрения

      2. Реализуемый способ

    2. Способ модификации кода

      1. Глобальный обработчик исключений

      2. Блокировка секций кода

      3. Инициализация управляющего исключения

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

      5. Пошаговый анализ тестируемого кода

      6. Внедрение T-кода

      7. Продолжение выполнения программки

      8. Маскировка внесенных конфигураций

      9. Уменьшение числа управляющих исключений

      10. Визуализация результатов профилировки

  6. Реализация способа

    1. Глобальный обработчик исключений

    2. Дизассемблер длин инструкций

    3. Фильтрация управляющих исключений

    4. Внедрение T-кода

      1. Анализ начального кода

      2. Построение измененного кода

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

    5. Продолжение выполнения

  7. Результаты внедрения

  8. Заключение

  9. Библиография

  10. Приложения

    1. Утилита №1. Разделяемая секция PE файла

    2. Утилита №2. Атрибуты прав доступа страничек памяти

    3. Утилита №3. Редактирование секции кода PE файла

    4. Дизассемблер длин инструкций

    5. Процедура анализа

    6. Внедряемые процедуры

    7. Тестовый пример


1.1. Архитектура фон Неймана

30 июня 1945 года Джон фон Нейман написал статью “First Draft of a Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода Report on the EDVAC” [$1$]. Этот отчет обрисовывает компьютер, состоящий из 4 главных частей: центрального арифметического устройства, центрального управляющего устройства, памяти и средств ввода-вывода. Это 1-ая публикация, которая содержит описание логического дизайна компьютера, реализующего Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода концепцию однородности памяти, при которой программки и данные хранятся в одной и той же памяти. Такая архитектура в предстоящем стала называться архитектурой фон Неймана.

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

Существует и другой вариант архитектуры – гарвардская архитектура. Она была разработана Говардом Эйкеном в конце Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода 1930-х годов в Гарвардском институте. Главное отличие от фон-неймановской заключается в раздельном хранении и раздельной обработке команд и данных. Этот подход имеет ряд преимуществ и недочетов. Но из-за Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода трудности таковой архитектуры, ее суровое развитие началось только с конца 70-х годов.


^ 1.2. История развития процессоров

Сейчас, более полвека спустя, практически все процессоры имеют фон-неймановскую архитектуру.

1971 год. По заказу маленькой японской компании Nippon Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода Calculating Machine, Ltd, занимающейся созданием калькуляторов, компанией Intel был выпущен 1-ый в мире процессор. Intel 4004 стал первым 4-битным коммерчески легкодоступным однокристальным процессором.

1972 год. Компания Intel разрабатывает 1-ый 8-битный центральный микропроцессор - Intel 8008. Микропроцессор позиционировался Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода как микропроцессор для продвинутых калькуляторов общего предназначения, терминалов ввода-вывода и автоматов бутылочного разлива.

1974 год. Компания Intel выпускает 8-битный процессор Intel 8080. Представляет собой улучшенную версию микропроцессора Intel 8008. По заверениям Intel, этот микропроцессор обеспечивал Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода десятикратный прирост производительности по сопоставлению с процессором Intel 8008. Благодаря 16-разрядной адресной шине микропроцессор позволял создавать адресацию 64 Кбайт памяти, которая не делилась на память команд и данных. На базе нового процессора Intel Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода 8080 компанией MITS был выпущен 1-ый в мире миникомпьютерный набор (компьютер) Altair-8800.

1978 год. Intel 8086 — 1-ый 16-битный процессор выпущенный компанией Intel. Микропроцессор имел набор команд, который применяется и в современных микропроцессорах, конкретно от Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода этого микропроцессора берёт своё начало популярная на сей день архитектура x86. Размер шины адреса был увеличен с 16 бит до 20 бит, что позволило адресовать 1 Мбайт памяти

Для того чтоб адресовать больший, чем i8080, объём памяти Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода, потребовалось поменять метод адресации памяти. Потому для адресации 1 Мбайт памяти применили последующую схему. На шину адреса подавался физический адресок размером 20 бит, который формировался оковём сложения содержимого 1-го из сегментных регистров (16 бит Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода), умноженного на 16, с содержимым указательного регистра: таким макаром, адресация ячейки памяти выполнялась по номеру сектора и действенному адресу ячейки в секторе (именуемому также смещением). Этот способ потом окрестили реальным режимом адресации микропроцессора Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода, таковой режим позволяет адресовать до 1 Мбайт памяти.

1982 год. Intel 80286 (также узнаваемый как i286) — 16-битный x86-совместимый процессор второго поколения компании Intel.

В микропроцессоре i286 было реализовано два режима работы — защищённый режим и реальный Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода режим. В реальном режиме работы микропроцессор был вполне совместим с микропроцессорами x86, выпускавшимися ранее, другими словами микропроцессор мог делать программки, созданные для Intel 8086/8088/8018x с наименьшими модификациями. В формировании адреса участвовали только Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода 20 линий шины адреса, потому наибольший объём адресуемой памяти, в этом режиме, остался прежним — 1 Мбайт.

В защищённом режиме микропроцессор мог адресовать до 16 Мбайт виртуальной памяти, за счёт конфигурации механизма адресации памяти. Программер и разрабатываемые им Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода программки употребляют логическое адресное место (виртуальное адресное место), размер которого может составлять 16 Мбайт. Логический адресок преобразуется в физический адресок аппаратно при помощи блока управления памятью (MMU). Благодаря защищённому режиму, в памяти Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода можно хранить только ту часть данных, которая нужна на этот момент, а остальная часть могла храниться во наружной памяти (к примеру, на жёстком диске). Когда программка обращается к тем данным Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода, которых нет в физической памяти, операционная система может остановить ее выполнение, загрузить требуемую секцию из наружной памяти и возобновить выполнение программки.

Для защиты от выполнения привилегированных команд, которые могут обрушить всю систему Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода, для защиты доступа к данным и для защиты частей кода в микропроцессоре i286 была введена защита по привилегиям [$8$]. Было выделено 4 уровня приемуществ (кольца защиты, режимы работы): от самого привилегированного 0 уровня (Ring 0, режим ядра Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода), созданного для ядра системы, до менее привилегированного 3 уровня (Ring 3, пользовательский режим), созданного для прикладных программ.

1985 год. Intel 80386 - 32-битный x86-совместимый микропроцессор третьего поколения конторы Intel.

Микропроцессор i386 на сто процентов совместим со Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода своими предшественниками — микропроцессорами 8086-80286. Он делает программки, созданные для их без необходимости модификации кода и перекомпиляции (либо с наименьшими модификациями).

Адресация в защищенном режиме стала 32-битной (с возможностью сотворения 16-битных частей, для сопоставимости с 80286). Она Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода позволила в первый раз со времени возникновения 8086 запамятовать о сегментации, а поточнее, ограничении размера сектора 64 кб (ограничение 16-битного адреса). До возникновения i386 программки и операционные системы использовали несколько моделей Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода организации памяти, различающихся по организации в памяти частей кода, стека и данных. 32-битный адресок позволил заместо их использовать одну ординарную плоскую модель, в какой все сегменты задачки находятся в одном и том Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода же месте адресного места памяти. Плоская модель расширяет размер такового “общего” сектора до 4 Гбайт. И для того, чтоб иметь возможность адресовать таковой большой по тем временам объем данных, был разработан механизм виртуальной памяти Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода.

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


^ 1.3. Организация памяти

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

Работа с оперативной памятью в фон-неймановских архитектурах имела собственный свой особенный путь развития:

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

  2. С возникновением защищенного режима неувязка малого объема оперативки отважилась сама собой (4-х Гб адресного места хватало для всех мыслимых задач). Был реализован механизм виртуализации Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода памяти, а с ним появилось огромное количество задач по его оптимизации.


^ 1.3.1. Оверлейная загрузка программ

Микропроцессоры компании Intel, начиная с версии 8086, вплоть модели Intel 80286 использовали реальный режим адресации. Объем памяти в этом режиме был ограничен одним мб Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода. Также нереально было создание всеполноценных многозадачных операционных систем. Но все таки такие компы в свое время обширно использовались. Естественно, тогда программки были по размеру существенно меньше, чем современные, но очень нередко Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода появлялась такая ситуация, что мб для их было или недостаточно, или они занимали такое существенное место в памяти, что такая трата была просто неприемлемой. Потому появлялись разные способы частичной загрузки Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода приложения в оперативку. Отметим какой-то из них – оверлейную загрузку программ. Ранее она была очень всераспространена. К примеру, ее поддержка была введена в Turbo Pascal 3.0.

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

Один из примеров использования механизма оверлеев:



Тут в оперативки всегда находится только один оверлей, и, при вызове процедуры из другого оверлея, происходит замещение в памяти 1-го другим.

Уделялось Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода много внимания тому, как распределять процедуры меж оверлейными модулями: т.к. доступ к наружной памяти производится всегда в разы подольше, чем к оперативной, то необходимо стремиться к минимизации загрузок модулей с Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода диска. Для этого нужно, чтоб каждый оверлейный модуль был как можно более самодостаточным. Если это нереально, стараются вынести процедуры, на которые ссылаются из нескольких оверлеев, в отдельный модуль, именуемый резидентной частью Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода либо резидентным ядром. Это модуль, который всегда находится в памяти и не делит свои адреса ни с каким другим оверлеем. Естественно, оверлейный менеджер должен быть частью этого ядра.

Потребность в таком Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода методе загрузки возникает, если у нас виртуальное адресное место не достаточно, к примеру 1 Мбайт либо даже всего 64 Кбайт, а программка относительно велика. На современных 32-разрядных системах виртуальное адресное место измеряется гб, и Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода большинству программ этого хватает, а задачи с нехваткой можно решать совершенно другими методами. Все же, есть разные системы, даже и 32-разрядные, в каких нет устройства управления памятью, и размер виртуальной не может превосходить Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода объема оперативки, установленных на плате.

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


^ 1.3.2. Виртуальная память

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

Для адресации операндов в физическом адресном пространстве прикладные программки употребляют логическую Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода адресацию, т.е. адреса, применяемые программером, необязательно совпадают с физическими. Блок управления памятью передает логические адреса программ в физические и отправляет их на системную шину. Все это происходит на аппаратном уровне. Логическое адресное место организуется Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода как набор из простых структур - байтов, частей, страничек. Более популярны последующие модели:


^ 1.3.3. Страничная организация памяти

В текущее время очень обширно всераспространен вариант Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода страничной организации памяти. Поддержка такового режима находится в большинстве 32-битных и 64-битных микропроцессоров. Таковой режим является традиционным для практически всех современных ОС, в том числе Windows и семейства UNIX. Он в первый раз Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода был реализован компанией DEC в микропроцессорах VAX и ОС VMS в конце 70-х годов. В семействе x86 поддержка появилась с поколения 386, оно же 1-ое 32-битное поколение.

Сущность его состоит в том, что оперативка Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода делится на области памяти фиксированной длины (к примеру, 4096 б), которые являются малой единицей выделяемой памяти. Процесс обращается к памяти при помощи адреса виртуальной памяти, который содержит внутри себя номер странички и Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода смещение снутри странички. Операционная система конвертирует виртуальный адресок в физический, по мере надобности подгружая страничку из наружной памяти в оперативную. При запросе на выделение памяти либо при загрузке сохраненной странички операционная система Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода может “скинуть” на жёсткий диск странички, к которым издавна не было воззваний.

На данный момент разглядим процесс трансляции виртуального адреса в физический. Для 32-битных систем, адресок делится на три части Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода: старшие 10 бит, средние 10 бит и младшие 12 бит. 1-ое число определяет номер записи в каталоге страничек. Каталог страничек состоит из 1024 записей по 4 б – PDE (page directory entries), любая из которых адресует подобающую таблицу страничек Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода. Последующее 10-битное число в виртуальном адресе определяет номер записи в таблице страничек. Любая такая запись также состоит их 4-х б и является дескриптором виртуальной странички (PTE – page table entries). В этом дескрипторе хранится номер Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода соответственной странички в физической памяти и поле флагов, описывающих состояние и атрибуты защиты странички. Последние 12 бит определяют смещение снутри странички.

На долю микропроцессора в этом механизме виртуализации приходится порождение исключений Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода #PF (PAGE FAULT) и #GP (GENERAL PROTECTION FAULT), доступ к памяти в согласовании с опциями дескрипторов страничек, хранящимися в иерархичной структуре в физической памяти, и внедрение буфера ассоциативной трансляции – TLB [$7$].

В семействе операционных Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода систем Windows виртуальная память зародилась, начиная с версии 3.0 [$2$]. В реализациях, которые есть на данный момент, операционная система отвечает за загрузку и выгрузку страничек во внешнюю физическую память: обрабатывая исключения #PF, в оперативку загружается Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода отсутствующая страничка, а если места для нее там нет, другая страничка, внедрение которой не ожидается в последнее время, выгружается на наружный носитель. Так, в Windows NT на избранных разделах Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода создаются страничные файлы pagefile.sys, в которые и записываются неиспользуемые в текущее время странички. В неких других операционных системах для таких нужд создаются целые отдельные разделы.


1.4. Многозадачность

Существует другой вид виртуализации – многозадачность. Вытесняющая многозадачность Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода, при которой сама операционная система решает, когда и сколько процессорного времени дать задачке, у Microsoft в ОС Windows в первый раз появилась в версиях 3.x, в последующих – неоднократно совершенствовалась. И то Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода совпадение, что начало развития виртуальной памяти совпадает с началом развития многозадачности, не случаем – эти два понятия очень плотно сплетены и совместно составляют мощнейший инструмент управления ресурсами компьютера. За более чем 20 лет этот механизм Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода виртуализации перетерпел значимые конфигурации, появилось много достойных реализаций в других операционных системах.


^ 1.5. Процесс в ОС

Попробуем раскрыть понятие процесса для последних операционных систем серии Windows NT: Windows 2000 и следующих версиях.

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


1.6. PE файл

Portable Executable – формат исполняемых Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода файлов, объектного кода и динамических библиотек, применяемый в 32- и 64-битных версиях операционной системы Microsoft Windows. Формат PE представляет собой структуру данных, содержащую всю информацию, нужную загрузчику для пуска программки, которая находится в Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода данном файле. Более нередко встречаются три вида файлов в формате PE: исполнимые модули (*.EXE), динамически подключаемые библиотеки (*.DLL), драйверы устройств, работающие в режиме ядра (Kernel mode drivers).

Общеизвестно, что Windows NT Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода почти все унаследовала от VAX VMS и UNIX. И эталон PE не является исключением – за базу был взят формат COFF (Common Object File Format — стандартный формат объектного файла), который в первый раз был Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода введен в UNIX. Но COFF к тому времени несколько устарел, и, чтоб удовлетворить потребностям новых операционных систем, было решено внести в него маленькие конфигурации и дать ему заглавие PE.

Portable Executable – дословно Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода переводится как “переносимый исполняемый”. Этот формат именуется переносимым, потому что все реализации Windows NT в разных системах (Intel 386, MIPS, Alpha, Power PC и т.д.) употребляют один и тот Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода же исполняемый формат. Естественно, имеются различия, к примеру, связанные с двоичной шифровкой команд микропроцессора. Нельзя запустить на Intel исполняемый РЕ-файл, откомпилированный в MIPS. Все же, значительно, что нет нужды на сто процентов переписывать загрузчик Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода операционной системы и программные средства для каждого нового микропроцессора.

Самое принципиальное из того, что необходимо знать о РЕ-файлах, это то, что исполняемый файл на диске и модуль, получаемый после загрузки, очень Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода похожи. Предпосылкой этого будет то, что загрузчик просто употребляет отображение файлов в память, чтоб загрузить надлежащие части РЕ-файла в адресное место программки. После того как ЕХЕ (либо DLL Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода) модуль загружен, Windows обращается с ним так же, как и с другими отображенными в память файлами.

Еще одним принципиальным понятием является секция. Конкретно из секций состоит большая часть PE файла. Они содержат или Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода код программки, или данные. Некие секции содержат код и данные, конкретно объявляемые и применяемые программками, тогда как другие секции данных создаются компоновщиками специально для юзера и содержат информацию, нужную для работы операционной системы.

Для Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода работы с PE-файлами употребляются три разных схемы адресации: физические адреса (именуемые также смещениями raw pointers либо raw offset), отсчитываемые от начала файла, виртуальные адреса (virtual address либо VA), отсчитываемые Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода от начала адресного места процесса и относительные виртуальные адреса (relative virtual address либо RVA), отсчитываемые от базисного адреса загрузки модуля.

Итак, структура PE-файла имеет последующий вид:

Заголовок MS-DOS и программа-заглушка (Stub Program) служит только для выдачи сообщения о том, что программка не может работать в среде MS-DOS, при попытке ее вынудить Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода работать в этом режиме. Заголовок представляет собой запись типа IMAGE_DOS_HEADER (структура, объявленная в WinNT.h). Поле e_lfanew – ключевое в этой структуре, оно содержит смещение (от начала файла) основного PE Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода-заголовка.

Итак, отступив e_lfanew б от начала файла, мы получим основной заголовок PE файла. Он вполне описывается структурой IMAGE_NT_HEADERS:

Сходу после Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода “опционального” заголовка один за одним идут заглавия секций. Каждый заголовок представляет собой структуру IMAGE_SECTION_HEADER. Принципиальные поля в этой структуре:

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

Принципиальная особенность микропроцессоров конторы Intel: при 32-битной страничной адресации атрибуты чтения и выполнения вполне эквивалентны [$3$].

Вот мы разглядели структуру заголовка секции. По нему системный загрузчик находит в PE файле секцию и определяет, в какую область виртуальной памяти и как ее нужно показать стандартными средствами мэппинга [$4$].


^ 2. Постановка задачки

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

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

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

Способ накладывает Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода последующие ограничения:

Вобщем, ограничения, накладываемые на исполняемый модуль, можно сузить только до части кода, который мы желаем проанализировать. Не непременно пробовать проанализировать весь модуль.

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

3. Терминология

  1. Исполняемый модуль – файл, готовый к конкретному выполнению (производится на микропроцессоре либо интерпретируется другой программкой).

  2. Тестируемый код – код, который подвергается анализу Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода и тестированию. Генерируется компилятором.

  3. Начальный код – тестируемый код, загруженный в память и находящийся в секциях кода PE-файла. При работе метода блокируется вызовом функции VirtualProtect с параметром PAGE_NOACCESS (см. параграф 5.2.2, “Блокировка секций кода Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода”).

  4. Начальный текст программки – программка на одном из языков программирования (С / С++, Pascal, JAVA и т.д.)

  5. T-код (T-инструкции) – код, который внедряется в тестируемый код. Собирает информацию о ходе выполнения Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода программки.

  6. Измененный (либо сгенерированный) код – тестируемый код с внедренными в него T-инструкциями. Он уже расположен в памяти и готов к выполнению.

  7. Управляющие исключения – исключения, которые инициализируются при воззвании к заблокированным Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода секциям кода (параграф 5.2.2, “Блокировка секций кода”). Необходимы для управления процессом построения нового кода.

  8. Глобальный обработчик исключений – функция, которая вызывается при появлении всех исключений хоть какого вида (параграф 5.2.1, “Глобальный обработчик исключений”). Нужен, в Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода главном, для обработки управляющих исключений.

  9. Сплайсинг [$22$] функции – метод перехвата вызовов функции, сущность которого заключается в изменении первых ее б. Подробнее будет описан в параграфе 5.2.1 “Глобальный обработчик исключений”.

  10. Исключение типа Access Violation – исключение нарушения прав доступа Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода. Появляется, к примеру, при воззвании к невыделенной памяти либо при попытке записи в область памяти, для которой разрешено только чтение.

  11. Регистр EIP – регистр микропроцессора, содержащий адрес-смещение последующей аннотации, подлежащей Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода выполнению.

  12. Точка останова – это намеренное прерывание выполнения программки, при котором производится вызов отладчика.

  13. Функция KiUserExceptionDispatcher – функция системной динамической библиотеки ntdll.dll. Является принципиальной частью механизма обработки исключений в пользовательском режиме. Более подробное Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода описание в параграфе 5.2.1 “Глобальный обработчик исключений”.

  14. Профилирование – сбор черт работы программки, таких как время выполнения отдельных фрагментов (обычно подпрограмм), число правильно предсказанных условных переходов, число кэш промахов, инфы об использовании памяти Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода и прочее.

  15. Профайлер (профилировщик) – инструмент, выполняющий профайлинг (профилирование) программ.

  16. Семплирование (в профайлинге) – статистический способ, который выявляет узенькие места в производительности. Сбор сведений производится с определенной частотой либо при появлении определенных событий.

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

  18. Аннотации Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода перехода – аннотации типа CALL, JMP, Jxx, LOOP / LOOPxx и RET.

^ 4. Подобные продукты

Начнем обзор с традиционных отладчиков. В текущее время очень популярны последующие разработки для ОС Windows:

Как ни удивительно, они тоже занимаются модификацией исполняемого кода: даже самый простой отладчик Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода умеет оперировать точками останова. Существует два вида точек останова: аппаратные [$9$] и программные (аннотация INT_3). Но из-за того, что количество аппаратных точек ограничено 4-мя, то в большинстве случаев употребляют Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода аннотацию INT_3. Практически происходит внедрение этих аннотации в программный код, и с помощью их приложение останавливается в определенный момент и делается его анализ. А это и есть тема курсовой работы.

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

Intel VTune Performance Analyzer [$10$] – коммерческое приложение для анализа производительности программ на компьютерах, использующих микропроцессоры компании Intel. Инструмент делает огромное количество функций профилировки:

Большая часть Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода из перечисленных функций делает и продукт AMD CodeAnalyst [$11$] компании AMD, хотя по способностям до профайлера VTune ему еще очень далековато. В отличие от VTune, он делает профилировку лишь на микропроцессорах Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода AMD. Является бесплатным.

Разглядим другие профиляторы, в базе которых лежит динамическая рекомпиляция. Вот некие из их:

Лицезреем, что динамическая перекомпиляция удачно применяется для анализа производительности программ и анализа использования памяти (поиск утечек и др.). По сути, использовать технику перекомпиляции кода можно еще Продолжение исполнения программы Маскировка внесенных изменений Уменьшение числа управляющих исключений Визуализация результатов профилировки Реализация метода обширнее. В качестве примера можно отметить виртуальные машины, такие как VMware и VirtualBox, которые употребляют эту технику для эмуляции привилегированных инструкций [$16$].

^ 5. Мысль способа

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



prodolzhitelnost-zanyatij.html
prodolzhitelnost-zhizni-i-ekologiya-gubok-6.html
prodovolstvennaya-bezopasnost-i-kachestvo-pitaniya-programma-po-perehodu-kirgizskoj-respubliki-k-ustojchivomu-razvitiyu.html