ptmalloc - 起步
要點
- glibc下載和安裝
- 調試ptmalloc
glibc下載和安裝
想要研究和學習一個東西,寫用例和看代碼是避免不了的,ptmalloc是屬於glibc的,下載安裝glibc不可避免,直接從http://mirrors.ustc.edu.cn/gnu/libc/找到了glibc-2.25的tar包。
cd /path/to/save/glibctar
wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.25.tar.gz
tar -xvf glibc-2.25.tar.gz
下載完了glibc就到了安裝的步驟,因爲只是用這個glibc庫做一個調試版本,所以要選擇一個新的目錄去存放編譯產物。
cd /path/to/install/glibccode
/glibc/tar/path/configure –prefix=/path/to/install/glibc
configure完成後,會生成已config.status的文件,如果想改編譯參數的話,就是直接改動這個文件
給個提示,glibc的宏很多,我爲了可以調試宏,我改動了編譯參數,在config.status中搜索CFLAGS,原本是
S[“CFLAGS”]=”-g -O2”
S[“CFLAGS”]=”-g -O2 -gdwarf-2 -g3” # 改動後可以展開和調試宏
接下來就是人見人愛的make了
make
make這一步,時間5-10分鐘。有位老鐵跟我說會碰到依賴問題,反正我是一make就過,安安穩穩。提一句我用的是fedora23,fedora大法好。
調試ptmalloc的環境算是部署好了。
調試ptmalloc
首先上一個用例吧
int main(void)
{
char *mem = malloc(10);
free(mem);
return -1;
}
gcc 編譯如下
gcc -g -Wall -Wl,-rpath=/path/to/install/glibc \
-Wl,-dynamic-linker=/path/to/install/glibc/elf/ld-linux-x86-64.so.2 \
main.c -o maingdb main
(gdb) b 3
(gdb) r
Starting program: mainBreakpoint 1, main() at main.c:3
3 char *mem = malloc(10);
(gdb) s
__GI___libc_malloc (bytes=10) at malloc.c:2879
….
看到gdb給出的信息,已經知道成功了。