EN JA
I386_GET_LDT(2)
I386_GET_LDT(2) FreeBSD System Calls Manual I386_GET_LDT(2)

名称

i386_get_ldt, i386_set_ldti386 プロセスごとのローカル記述子テーブル (Local Descriptor Table) エントリを管理する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < machine/segments.h>
#include < machine/sysarch.h>

int
i386_get_ldt( int start_sel, union descriptor *descs, int num_sels);

int
i386_set_ldt( int start_sel, union descriptor *descs, int num_sels);

解説

i386_get_ldt() システムコールは、現在のプロセスの LDT の i386 記述子のリストを返します。 i386_set_ldt() システムコールは、現在のプロセスの LDT の i386 記述子のリストを設定します。両方のルーチンに関して、 start_sel は、開始する LDT のセレクタのインデックスと設定されるか、または返される num_sels 記述子の配列を指す descs を指定します。

descs 配列の各エントリは、segment_descriptor または gate_descriptor のいずれかを指定でき、 < i386/segments.h> に定義されています。これらの構造は、ビットフィールドをばらばらにするように、アーキテクチャによって定義されるので、それらを構築する際に注意しなければなりません。

start_selLDT_AUTO_ALLOC で、 num_sels が 1 で、 descs によって指される記述子が、正当であるなら、 i386_set_ldt() は、記述子を割り付けて、そのセレクタ番号を返します。

num_descs が 1 で、 start_sels が有効で、 descs が NULL であるなら、 i386_set_ldt() は、(後で再び再割り付けられることができるようにして) その記述子をを解放します。

num_descs が 0 で、 start_sels が 0 で、 descs が、NULL であるなら、特別な場合として、 i386_set_ldt() は、すべての記述子を解放します。

戻り値

成功して完了すると、 i386_get_ldt() は、LDT の現在の記述子の数を返します。 i386_set_ldt() システムコールは、成功すれば、設定された最初のセレクタを返します。カーネルが LDT の記述子を割り付けたなら、割り付けられたインデックスが返されます。そうでなければ、-1 の値が、返され、グローバル変数 errno は、エラーを示す値が設定されます。

エラー

i386_get_ldt() と i386_set_ldt() システムコールは、次の場合に失敗します:
[ EINVAL]
不適切な値が、 start_sel または num_sels のために使用されました。
[ EACCES]
呼び出し側が、保護を回避するか、または失敗を引き起こす記述子を使用することを試みました。

関連項目

i386 Microprocessor Programmer's Reference Manual, Intel

警告

実際に、これを使用して、プロセスをだますことができます。
October 14, 2006 FreeBSD