Вот Вы уже почти погрузились в интереснеший мир Reverse Engineering, но к
сожалению, пока Вы не в состоянии что-либо сделать самостоятельно. Ничего
старшного, сейчас мы вместе продолжим делать небольшие, но очень важные и нужные
шаги на этом пути, постепенно углубляя знания и приобретая необходимые навыки.
Вот мы и дошли до того места, когда нам необходимо поговорить о распределении
памяти в ОС Windows 95. В данной статье мы дадим Вам лишь самые простые и
необходимые сведения.
Используемая в ОС Windows 95 модель (способ) распределения памяти называется
непрерывной. В такой модели не существует строгого деления на сектора и сегменты
(что было присуще DOS и Windows 3.x), т.е. программа может свободно обращаться к
любому адресу всего адресного пространства (4 Гб, ограничение накладывается
32-разрядной адресной шиной компьютера). ОС считается многозадачной, если
работающие параллельно программы не могут воздействовать друг на друга. Для
этого Windows использует следующий механизм: каждой задаче предоставляется свое
личное адресное пространство размером около 2-х Гб. За границы своего адресного
пространства задача выйти не может, также как никакая другая задача не может
работать с данным пространством - этим и определяется автономность
программы.
Предоставлением адресного пространства и загрузкой в него программы
занимается менеджер памяти Windows. У каждой программы существует два важных
параметра:
- Адрес загрузки. Это адрес, начиная с которого программа будет располагаться
в памяти. Запомните, программы в Windows всегда загружаются по одному и тому-же
адресу - адресу загрузки, это сильно облегчит нам работу в будущем. Как было
сказано выше каждой программе предоставляется свое адресное пространство
размером около 2-х Гб, начиная с адреса 40000000h (символ h означает, что число
записано в шестнадцатеричной системе счисления). Именно поэтому большинство
программ имеют адрес загрузки 40000000h.
- Точка входа в программу. Это адрес, с которого начинается выполнение
программы. Он может находится в любой части программы, а не обязательно в ее
начале; даже наоборот в большинстве случаев он расположен практически в самом ее
конце.
И под конец еще одна очень важная для нас вещь. ОС Windows не позволяет
программе производить изменения в области кода (т.е. программа не способна
изменять свой код), единственное, что она может - производить изменения в
области данных. Это ограничение очень важно, т.к. запрещает программистам делать
самомодифицируещиеся программы, что в свою очередь сильно облегчает работу нам,
Исследователям Программ. Подробнее об этом мы расскажем в статье об
использовании дизассемблера.
Вот в общем-то и все, что Вы должны сейчас знать о распределении памяти. В
следующей статье мы рассмотрим интерфейс и некоторые необходимые нам команды
отладчика SoftICE.
Языки программирования: разное
|