Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Void SetSelector(long sel,long value)

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

Максимальное допустимое количество селекторов равно 4096 (0x1000 в шестнадцатеричной системе исчисления), а индексы селекторов могут принимать любые значение от 0x0 до 0xFFFF включительно.

Аргумент sel задает 16-разрядный индекс создаваемого или модифицируемого селектора. Старшее слово, передаваемого 32-битного значения автоматически обрезается, в результате чего существует угроза непреднамеренного искажения другого селектора, что подтверждает следующий эксперимент:

SetSelector(0x1,0x666);

Message(">%X\n",AskSelector(0x1));

a) создаем селектор с индексом 0x1 и значением 0x666 и тут же проверяем его значение

>666

b) селектор имеет значение 0x666

SetSelector(0x10001,0x777);

c) пытаемся создать селектор с индексом 0x10001 и значением 0x777

Message(">%X\n",AskSelector(0x1));

d) проверяем значение селектора 0x1

>777

e) результат – значение селектора 0x1 искажено! Старшие 16 бит индекса 0x10001 были обрезаны, в результате чего был модифицирован селектор

Аргумент value содержит 32-разрядное значение базы сегмента в параграфах. Оно будет автоматически использовано для базирования сегмента базовый адрес которого равен индексу данного селектора.

Замечание: функция DeleteAll (см. описание функции DeleteAll), удаляющая все сегменты, не уничтожает селекторов и их приходится удалять «вручную» вызовом DelSelector.

??? #Верстальщику Change Table

аргумент

пояснения

sel

16-разрядный индекс селектора

val

32-разрядное значение селектора в параграфах

return

=return

пояснение

void

функция не возвращает никакого значения

Родственные функции: AskSelector, DelSelector

Интерактивный аналог: “~View\Selector”, <Insert> - создает новый, <Ctrl-E> изменяет значение уже существующего селектора.

Void DelSelector(long sel)

Функция удаляет селектор, если он существует, в противном случае ничего не происходит. Если данный селектор использовался для базирования сегмента, новый базовый адрес сегмента будет равен , а смещение первого байта в сегмента соответственно: . Создав заново уничиженный селектор вызовом SetSelector, можно все вернуть на свои места.

Аргумент sel задает 16-разрядный индекс удаляемого селектора. Старшее слово, передаваемого 32-битного значения автоматически обрезается, в результате чего существует угроза непреднамеренного уничтожения другого селектора, что подтверждает следующий эксперимент:

SetSelector(0x1,0x666);

Message(">%X\n",AskSelector(0x1));

a) создаем селектор с индексом 0x1 и значением 0x666 и тут же проверяем его значение

>666

b) селектор имеет значение 0x666

DelSelector(0x10001,0x777);

c) пытаемся удалить селектор с индексом 0x10001

Message(">%X\n",AskSelector(0x1));

d) проверяем значение селектора 0x1

>FFFFFFFF

e) результат – селектора 0x1 был уничтожен! Старшие 16 бит индекса 0x10001 были обрезаны, в результате чего был удален селектор

??? #Верстальщику Change Table

аргумент

пояснения

sel

16-разрядный индекс уничтожаемого селектора

return

=return

пояснение

void

функция не возвращает никакого значения

Родственные функции: SetSelector

Интерактивный аналог: “~View\Selectors”, <Del>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]