Что означает «DS: » означает в сборке?

0040103A CALL DWORD PTR DS:[40207A] USER32.MessageBoxA 

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

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

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

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

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

Дескрипторэто, в основном , пара {начало-адрес, размер} – для этого есть больше, но это выходит за frameworks этой публикации.

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

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

EDIT 2:

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

ИЗМЕНИТЬ 3:

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

EDIT 4:

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

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

Давайте будем гением компьютера.