LKM 躓き中

STATUS: 故障中

 記事のとおり操作してうまくいったので簡単かもと書いた、LKM(Linux Kernel Module)の作成ですが、自分でなんか付け加えようとしたらいきなりつまずきました。

 フックした処理内で、ファイル操作をしようと思って、open,write,closeあたりの関数を呼び出してみました。
 が、コンパイル時にヘッダファイルないでコンフリクトがあると怒られてしまいました。


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

 これがいけなかったらしい。
 下の様にしたらコンパイル通りました。

#include <linux/types.h>
#include <linux/stat.h>
#include <linux/fcntl.h>

 コンパイル通ったので、組み込んでみると・・・ 

#insmod -f hook_uname.o
Warning: kernel-module version mismatch
                hook_uname.o was compiled for kernel version 2.4.4
                while this kernel is version 2.4.19
hook_uname.o: unresolved symbol open
hook_uname.o: unresolved symbol close
hook_uname.o: unresolved symbol write

(Warningは、まあいいとして)
 シンボルがunresolvedだといわれてしまいました。
 (組み込み時にリンクするのね。WindowsのDLLみたいな仕組みが単なるobjectファイルで実現しているのかあ)
 うーん、strncpyとかは使えるのに、もろシステムコールなopen関数とかは使えないのかあ。
 じゃあと、syscall関数を使ってみると

fd = syscall( SYS_open , "/tmp/hook_uname.txt",O_APPEND);

 今度は、

hook_uname.o: unresolved symbol syscall

 と怒られます。
 LKM内で使っていい関数は、いったいどれなんだろう。

コメント