glibcをデバッグしてみよう
gnuのmallocも読んでみましょう。
まずはダウンロード
最新を取ってきましょう。
そうしたらコンパイル
とここでちょっと手間取ります。
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に何か関数を足してみることにしましょう。