Linux Kernel Source

Menu

Linux のkernel のsystem call 関連のソースを調べる。

Fedora Linux の最新版を用いること。

OS X 上では正常にコンパイル出来ないので、Linux 上で行うこと。


Kernel 側

まず、Kernel Source を入手して、自分でcompileする。(注: Mac OS X 上で作成するには、cross compile 環境が必要である。なので、Linux 上で行う方が良い)

Kernel Source の入手は、FedoraCore では、sudo yum install kernel-devel が普通だろう。

そのソース(Kernelの)に gtags を作用させる。(これにより、tag jump が可能になる)

Qemu で Fedora Linux を起動し、Kernel 内部のシステムを gdb で break せよ。qemu の以下のオプションを使用する。

    -s              wait gdb connection to port 1234

停止したところで、stack trace を表示する。

どのような経路で、system call を受けつけてから、kerenel 内部の system call に到達したかを説明せよ。


User 側

Linux 上で、 簡単なsystem call を呼び出す例題を作って、
  
        % ldd a.out
        linux-gate.so.1 =>  (0x00110000)
        libc.so.6 => /lib/libc.so.6 (0x00ba4000)
        /lib/ld-linux.so.2 (0x00b85000)

などで、link したlibraryを調べる。(.so などは、shared library)

探している system callがlibc の中にあれば、glibc の中にある。

そこになければ、

         gcc -v exec.c

等として、何がlinkされているか調べよう。

glibc を調べるには、

glibc の最新版をmake する。(Install してはならない! system を破壊することがあるので注意すること)それをstatic link したテストプログラムを作成する。

最新版は

    http://sourceware.org/glibc/

にある。ただし、使っているOSのversionに合わせて古いものを使う必要がある場合がある。

そのソース(glibcの)に gtags を作用させる。(これにより、tag jump が可能になる)

system call trap が起きる部分まで、trace を行い、system call 直前での stack trace を示せ。

それぞれのstack tarce の関数の呼び出しと、ソースの対応を示せ。


Shinji KONO / Fri Feb 6 07:46:44 2009