fslasht (3370) の日記

2004 年 02 月 18 日
午後 09:47

LKMまだまだハマリ中

STATUS: 故障中

 前回の続き

 とりあえずいろいろ試してみましたが、まだうまくいかないや。

(1) _syscall2マクロを使ってみました。
 こんな感じでいのでしょうか。

_syscall2( int , open , const char *,pathname, int ,flags);

 コンパイルすると次のようなエラーになるので、
(上記のマクロは24行目にあります。)

$ gcc -c hook_uname.c
hook_uname.c: In function `open':
hook_uname.c:24: `errno' undeclared (first use in this function)
hook_uname.c:24: (Each undeclared identifier is reported only once
hook_uname.c:24: for each function it appears in.)

 errno.hをインクルードしてみましたが、

#include

 モジュールを組み込むにエラーにになってしまいました。

#insmod -f hook_uname.o
hook_uname.o: unresolved symbol errno

(2) sys_openを使ってみました。
fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT );

 コンパイルは成功しましたが、モジュールを組み込むにエラーにになってしまいました。

#insmod -f hook_uname.o
hook_uname.o: unresolved symbol sys_open

(3) sys_call_tableのアドレスを呼び出してみました
int (*func_sys_open)(const char *pathname, int flags);
func_sys_open = sys_call_table[SYS_open];
fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT );

 コンパイル、insmodとも成功しましたが、実行すると
func_sys_openの呼び出し中に失敗し -9 が返ってきました。
 -1ならともかく、-9ってなんだよ。違うエントリ呼んでしまってりうのかなあ。

 やっぱりカーネル内からの呼び出しはだめですか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...