libc.aの中身を暴く

libc.aと言えば、普段UNIX環境でプログラミングを行うときにルーチンでリンクさせているライブラリのことです。

libc.aは実は独立した機能を持ったオブジェクトファイル(システムコールや、システムコールを呼び出すことによって実現される標準入出力関数など)がアーカイブされたものなのです。

今回は、libc.aを適当なディレクトリにコピーしてきて、そこで解凍してみて中身を検証してみました。

#libc.aのコピー
#libc.aを壊すと面倒なのでコピーしてしまうのである。

$ cp /usr/lib/libc.a .


#解凍
$ ar  -x libc.a 

#生成したオブジェクトファイルは1510個もある!
$ ls | wc
   1510    1510   17779

#代表的なシステムコールは含まれているか!?
$ ls -l open.o creat.o close.o read.o write.o lseek.o unlink.o 
-rw-r--r-- 1 kappa kappa 1136 2012-07-15 21:46 close.o
-rw-r--r-- 1 kappa kappa 1120 2012-07-15 21:46 creat.o
-rw-r--r-- 1 kappa kappa  932 2012-07-15 21:46 lseek.o
-rw-r--r-- 1 kappa kappa 1156 2012-07-15 21:46 open.o
-rw-r--r-- 1 kappa kappa 1156 2012-07-15 21:46 read.o
-rw-r--r-- 1 kappa kappa  892 2012-07-15 21:46 unlink.o
-rw-r--r-- 1 kappa kappa 1160 2012-07-15 21:46 write.o

#代表的な標準入出力関数はあるか!?
$ ls -l scanf.o fprintf.o
-rw-r--r-- 1 kappa kappa  996 2012-07-15 21:46 fprintf.o
-rw-r--r-- 1 kappa kappa 1008 2012-07-15 21:46 scanf.o
kappa@kappa:~/test/artest$ 


libc.aは頻繁に使用される関数のオブジェクトファイルを内包しているという点でとても大切であることがよくわかりました。