Что означает «DS: [40207A]» в сборке? - PullRequest
21 голосов
/ 29 сентября 2010
0040103A   CALL DWORD PTR DS:[40207A]                USER32.MessageBoxA

Что означает DS:?

Ответы [ 2 ]

26 голосов
/ 29 сентября 2010

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

РЕДАКТИРОВАТЬ:

Небольшое уточнение - обратите внимание, что для простоты это происходит в контексте 32-битного защищенного режима под управлением Windows.

A регистр сегмента (CS, DS, SS, ES, FS, GS) содержит selector, указывающее на descriptor.Есть две таблицы дескрипторов: глобальная ( GDT ) и локальная ( LDT ), и селектор имеет бит, указывающий, какой использовать.Windows (почти?) Использует исключительно глобальную таблицу.

A дескриптор это в основном a {начальный адрес, размер} пара - естьподробнее, но это выходит за рамки этой статьи.

Windows использует модель с плоской памятью : каждый процесс имеет 4 ГБ адресного пространства, начиная с адреса памяти 0, и использует подкачка для изоляции процессов друг от друга.

Поскольку процессы имеют такое плоское представление о мире, они работают со всеми сегментами, используя дескрипторы {0, 4GB} - и, таким образом, вместо выделения дескрипторов для процесса,Windows может использовать только несколько глобальных дескрипторов, и все процессы используют их.

EDIT 2:

Формат Portable Executable определяет sections, которые не связаны сx86 segments - даже если есть некоторые концептуальные совпадения.PE EXE-файлы могут иметь практически любой макет раздела, который вы пожелаете, но нормальным является разделение (по крайней мере) кода (чтение / выполнение), данных (чтение / запись), ресурсов (только чтение?).Разделение исполняемого файла на разделы позволяет применить защиту памяти на уровне страниц x86 к диапазонам памяти.

РЕДАКТИРОВАТЬ 3:

Хотя обычные сегменты не меняются для каждого процесса, Windows используетрегистр FS указывает на структуру TIB .

РЕДАКТИРОВАТЬ 4:

См. this для обзора.Это из старого документа 80386, но информация по-прежнему применима.

3 голосов
/ 29 сентября 2010

Адреса памяти состоят из сегмента и смещения;DS - это регистр «сегмент данных».

...