人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linuxのシステムコールの発行方法についての質問です。

http://www-06.ibm.com/jp/developerworks/linux/library/l-system-calls/
や "Binary Hacks" #25 を読むと、
「unistd.h で _syscall0, _syscall1 などのマクロが定義されており、そのマクロを使うことで、
libc を使わずに直接システムコールを発行できる」と書いてあります。

ところが、自分のシステム (ubuntu 7.04, AMD Athlon(tm) 64 X2 Dual Core Processor 4600+) の、
/usr/include/unistd.h (と、そこで include されているヘッダファイル) を見たところ、_syscallN の定義はありません。
また、Linux kernel のソースそのものを見ても、そのような定義はありません。

最近の Linux ではシステムコールの発行のしくみが代わったのでしょうか?
現在のしくみと参考文献を教えてください。

●質問者: imsut
●カテゴリ:コンピュータ
✍キーワード:AMD Athlon Dual Core kernel Linux
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● ? ????<だ
●19ポイント

当該記事を見ました。


× /usr/include/unistd.h

○ /usr/include/linux/unistd.h


ではないですか?(もしくは、/usr/include/asm/unistd.h)

※RHEL4/RHEL5で確認したので、Ubuntuでは違うかもしれませんが。

◎質問者からの返答

すみません。unistd.h のパスを書き間違えました。パスについてはご指摘の通りです。

ただし、/usr/include/unistd.h, /usr/include/linux/unistd.h のどちらにも _syscallN の定義はありません。

CentOS5にもなかったので、RHEL5にもないと思うのですが・・・。


2 ● karasimiso
●19ポイント

OpenSUSE10.1を使用しております。

カーネルのバージョンは2.6系です。


私の環境の場合、

/usr/include/unistd.h は /usr/include/asm/unistd.h をインクルードしており、その中に_syscallNをインラインアセンブラで記述しているようです。

ですので、システムコールの仕組みは昔と変わらず、「int 0x80」から変わっていないと思います。

◎質問者からの返答

そうですか・・・。ディストリビューションによって変わるとは思えないんですが・・・。

何か大きな勘違いをしているのかもしれません。


3 ● znz
●18ポイント

sysenter/sysexitという方法もあるようなので、x86_64ではsysenter/sysexitを使っているのではないでしょうか?

◎質問者からの返答

消去法で考えればそうなんですが、ソースを知りたいんですよね・・・。


4 ● kmd
●18ポイント

当方のUbuntsu 7.04 (amd64)では、 定義本体は

/usr/include/asm-x86_64/unistd.h

のようですが、上記の他

/usr/include/linux/unistd.h

/usr/include/asm/unistd.h

を探しても、__SYSCALL(a,b)はあっても、_syscallNはありませんでした。

また、system callは、/usr/include/unistd.hに定義されているsyscall()を使えば同じことができるような気がします。

御参考まで。

◎質問者からの返答

syscallは、システムコールを発行するためのwrapper functionだと思うので、「libcを使わずにシステムコールを発行できる」ことにはなりませんよね。


5 ● masahikokimoto
●18ポイント

source codeを読んでいない上での回答で申し訳ないのですが、当該の書籍であるBinary Hacksを読むと、Hack #59にLinux 2.6からはsystenterがサポートされたとあります。

◎質問者からの返答

sysenterを使っている積極的な証拠が見たいです。

glibcのソースかなぁ・・・。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ