glibcをデバッグしてみよう

gnuのmallocも読んでみましょう。

まずはダウンロード

http://ftp.gnu.org/gnu/glibc/

最新を取ってきましょう。

そうしたらコンパイル

とここでちょっと手間取ります。

glibcを展開したフォルダーに入って./configureとやると

configure: error: you must configure in a separate build directory

と怒られてしまいました。

色々と調べてみるとglibcのフォルダーとは別にbuild用のフォルダーを作らなければならないようです。

homeに~/build/glibc_2_21/など作ってそこから

~/download/glibc-2.21/configure --prefix=/usr

と打ってconfigureしましょう。

今度はずらずらとconfigureが出来ました。

それではmakeですね。

makeが終わるとlibc.aができています。これを使ってテストを作ってみましょう。

glibcのフォルダー内にmytestというフォルダーを作ります。

その中にtest.cを作り

#include "malloc.h"
void * __gcc_personality_v0=0;
void * _Unwind_GetIP=0;
void * _Unwind_GetGR=0;
void * _Unwind_GetCFA=0;
void * _Unwind_Backtrace=0;
void * _Unwind_Resume =0;
void * __divdi3=0;
void * __moddi3=0;
int main(){
malloc(100);
return 0;
}

 

と入れてコンパイルしてみましょう。mainの上のポインター=0はgccの何かと関係してエラーがでるのを避けるためのおまじないです。

cc -g -o test test.c -L ../ -lc -I /path_to_source/glibc-2.21/malloc/

testが出来たでしょうか。

ではできたてのglibcがきちんとリンクされているかを確認してみましょう。

nm test

をしてglibcにある関数の名前がずらずら出てきたら成功です。

次回はglibcに何か関数を足してみることにしましょう。