Manpages

名 前

modify_ldt − ldt を 設 定 ま た は 取 得 す る

書 式

#include <sys/types.h>

int modify_ldt(int func, void *ptr, unsigned long bytecount); : こ の シ ス テ ム コ ー ル に は glibc の ラ ッ パ ー 関 数 は 存 在 し な い 。 「 注 意 」 の 節 を 参 照 。

説 明

modify_ldt() は プ ロ セ ス の ロ ー カ ル デ ィ ス ク リ プ タ ー テ ー ブ ル (local descriptor table; ldt) を 読 み 書 き す る 。 ldt は i386 プ ロ セ ッ サ で 使 用 さ れ る プ ロ セ ス ご と の メ モ リ ー 管 理 テ ー ブ ル で あ る 。 こ の テ ー ブ ル に 関 し て の よ り 詳 し い 情 報 は Intel 386 processor handbook を 参 照 す る こ と 。

func が 0 な ら ば 、 modify_ldt() は ldt を ptr が 指 し て い る メ モ リ ー に 読 み 込 む 。 読 み 込 む バ イ ト 数 は 実 際 の ldt の サ イ ズ か bytecount よ り 小 さ い 方 で あ る 。

func が 1 な ら ば 、 modify_ldt() は ldt エ ン ト リ ー の 一 つ を 変 更 す る 。 ptruser_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 を エ ラ ー を 示 す 値 に 設 定 す る 。

エ ラ ー

EFAULT

ptr が ア ド レ ス 空 間 の 外 を 指 し て い る 。

EINVAL

ptr が 0 で あ る 、 ま た は func が 1 で bytecountmodify_ldt_ldt_s 構 造 体 の サ イ ズ と 等 し く な い か 、 func が 1 で 新 し い ldt エ ン ト リ ー が 無 効 な 値 で あ る 。

ENOSYS

func が 0 で も 1 で も な い 。

準 拠

こ の コ ー ル は Linux 特 有 で あ り 、 移 植 を 意 図 し た プ ロ グ ラ ム で は 使 用 し て は い け な い 。

注 意

glibc は こ の シ ス テ ム コ ー ル に 対 す る ラ ッ パ ー 関 数 を 提 供 し て い な い 。 syscall(2) を 使 っ て 呼 び 出 す こ と 。

関 連 項 目

vm86(2)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。