![]() |
|
Модераторы: Poseidon |
![]()
|
|
| wolf_f |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 29.9.2006 Репутация: нет Всего: нет |
У меня дано вот такое задание: Я непрошу его решать, а просто объяснить, что из чего вычесть чтоб получить адреса блоков памяти!
Для выполнения данного задания используется компьютер с операционной системой Windows XP (Pro, SP2). Вся работа ведется в единственной запущенной виртуальной машине MS-DOS. Программа LOL.com выдала адрес системной «таблицы таблиц» - List of list location: 00A7:0026H. Указатель на первый блок управления памятью будет содержаться в ячейках: 00A7:0026H. Проследим цепочку блоков управления памятью с помощью программы PEEK.com: ║00A7:0026│ EC 15 A7 00 CE 00 A7 00 5A 00 70 00 24 00 70 00 │ь.з.╬.з.Z.p.$.p.║ ║00A7:0036│ 80 00 00 00 00 00 00 00 2A 04 00 00 20 04 00 00 │А.......*... ...║ ║00A7:0046│ 07 07 00 00 E2 02 04 80 C6 0D CC 0D 4E 55 4C 20 │....т..А╞.╠.NUL ║ Учитывая, что младший байт находиться перед старшим в памяти при работе с процессорами архитектуры Intel x86, получаем адрес первого блока управления памятью: ║0320:0000│ 26 3B 77 02 76 08 03 D6 26 8B 77 02 2B D6 26 8B │&;w.v..╓&Лw.+╓&Л║ ║0320:0010│ 47 02 26 03 47 04 2B C2 2B C6 76 02 03 D0 26 C6 │G.&.G.+┬+╞v..╨&╞║ Для получения последующих блоков памяти надо к адресу начала фрагмента памяти прибавить его величину, хранимую в третьей и четвертой ячейке блока управления памятью, признаком последнего блока в цепочке блоков управления памятью является символ “Z” в первом байте блока. Проследим всю цепочку: |
|||
|
||||
| Evjeny |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2006 Репутация: 3 Всего: 5 |
Во-первых, вычитать ничего не надо, надо складывать
Во-вторых, ты же сам уже ответил на свой вопрос: Т.е по шагам: 1. Получаем адрес векторной таблицы связи - List of list location. 00A7:0026H 2. Для получения адреса первого блока MCB надо из смещения 0026h вычесть 2. Таким образом сегментный адрес первого MCB будет находиться по адресу 00A7:0024h. Размер сегментного адреса 2 байта. Допустим по адресу 00A7:0024h будет находится 02 01. Учитывая, что младший байт располагается по младшему адресу, получаем адрес первого блока MCB - 0102:0000h. 3. Анализируем первый байт MCB, если он равен 'Z', то блок последний, и мы заканчиваем вычисления, если 'M', то блок промежуточный, переходим к следующему шагу. 4. Берем значение, имеющее смещение +3 байта от начал блока MCB, которе содержит размер блока памяти в параграфах (1 парграф = 16 байт). Умножаем это значени на 16 - получаем число байт, занимаемое этим блоком памяти. 5. Переходим на начало самого блока памяти (чтобы попасть на начало блока памяти надо к адресу MCB прибавить 16 байт - размер MCB), и прибавляем к нему полученное в пункте 4 значение. В результате получаем адрес следующего блока MCB. Возвращаемся на пункт 3. |
|||
|
||||
| wolf_f |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 29.9.2006 Репутация: нет Всего: нет |
Чет сделал адрес первого блока управления памятью 00A7:0024, а мне пишут что найдено неправильно
Это сообщение отредактировал(а) wolf_f - 18.11.2008, 21:16 |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |