Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Беседа о распределении памяти
Память y меня коpоткая - 30 pin.

Вот Вы уже почти погрузились в интереснеший мир Reverse Engineering, но к сожалению, пока Вы не в состоянии что-либо сделать самостоятельно. Ничего старшного, сейчас мы вместе продолжим делать небольшие, но очень важные и нужные шаги на этом пути, постепенно углубляя знания и приобретая необходимые навыки.

Вот мы и дошли до того места, когда нам необходимо поговорить о распределении памяти в ОС Windows 95. В данной статье мы дадим Вам лишь самые простые и необходимые сведения.

Используемая в ОС Windows 95 модель (способ) распределения памяти называется непрерывной. В такой модели не существует строгого деления на сектора и сегменты (что было присуще DOS и Windows 3.x), т.е. программа может свободно обращаться к любому адресу всего адресного пространства (4 Гб, ограничение накладывается 32-разрядной адресной шиной компьютера). ОС считается многозадачной, если работающие параллельно программы не могут воздействовать друг на друга. Для этого Windows использует следующий механизм: каждой задаче предоставляется свое личное адресное пространство размером около 2-х Гб. За границы своего адресного пространства задача выйти не может, также как никакая другая задача не может работать с данным пространством - этим и определяется автономность программы.

Предоставлением адресного пространства и загрузкой в него программы занимается менеджер памяти Windows. У каждой программы существует два важных параметра:

  1. Адрес загрузки. Это адрес, начиная с которого программа будет располагаться в памяти. Запомните, программы в Windows всегда загружаются по одному и тому-же адресу - адресу загрузки, это сильно облегчит нам работу в будущем. Как было сказано выше каждой программе предоставляется свое адресное пространство размером около 2-х Гб, начиная с адреса 40000000h (символ h означает, что число записано в шестнадцатеричной системе счисления). Именно поэтому большинство программ имеют адрес загрузки 40000000h.
  2. Точка входа в программу. Это адрес, с которого начинается выполнение программы. Он может находится в любой части программы, а не обязательно в ее начале; даже наоборот в большинстве случаев он расположен практически в самом ее конце.

И под конец еще одна очень важная для нас вещь. ОС Windows не позволяет программе производить изменения в области кода (т.е. программа не способна изменять свой код), единственное, что она может - производить изменения в области данных. Это ограничение очень важно, т.к. запрещает программистам делать самомодифицируещиеся программы, что в свою очередь сильно облегчает работу нам, Исследователям Программ. Подробнее об этом мы расскажем в статье об использовании дизассемблера.

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

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay