Scroll to navigation

MODIFY_LDT(2) Руководство программиста Linux MODIFY_LDT(2)

ИМЯ

modify_ldt - получает или устанавливает ldt

ОБЗОР

#include <sys/types.h>

int modify_ldt(int func, void *ptr, unsigned long bytecount);

ОПИСАНИЕ

Вызов modify_ldt() читает или записывает локальную таблицу дескрипторов (ldt) процесса. Ldt — это таблица управления памятью процесса, используемая в процессорах i386. Подробнее о содержимом этой таблицы читайте в руководствах по процессору Intel 386.

Если значение func равно 0, то modify_ldt() читает ldt в память по адресу ptr. Количество прочитанных байт меньше bytecount и равно реальному размеру ldt.

Если значение func равно 1, то modify_ldt() изменяет элемент ldt. Значение ptr указывает на структуру user_desc, а bytecount должно быть равно размеру этой структуры.

Структура user_desc определена в <asm/ldt.h> следующим образом:

struct user_desc {

unsigned int entry_number;
unsigned long base_addr;
unsigned int limit;
unsigned int seg_32bit:1;
unsigned int contents:2;
unsigned int read_exec_only:1;
unsigned int limit_in_pages:1;
unsigned int seg_not_present:1;
unsigned int useable:1; };

В Linux версии 2.4 и более ранних эта структура называлась modify_ldt_ldt_s.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении modify_ldt() возвращается реальное количество прочитанных байт (при чтении) или 0 (при записи). При ошибке modify_ldt() возвращает -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Значение ptr указывает за пределы адресного пространства.
Значение ptr равно 0, или func равно 1, а bytecount не равно размеру структуры modify_ldt_ldt_s, или func равно 1, а новая запись ldt содержит неправильные значения.
Значение func не равно 0 или 1.

СООТВЕТСТВИЕ СТАНДАРТАМ

Данный вызов есть только в Linux и не должен использоваться в программах, которые должны быть переносимыми.

ЗАМЕЧАНИЯ

В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2).

СМОТРИТЕ ТАКЖЕ

vm86(2)

2007-06-01 Linux