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