glibc编译与调试
2020-11-13
编译
首先肯定是要下载glibc源码,可以去官网,国内也可以去清华镜像下载。
编译的时候要带有调试信息,并选择合适的输出目录。大概需要10min。
mkdir build
cd build
echo "CFLAGS += -fno-stack-protector" > configparms
../configure CFLAGS="-O1 -g3 -ggdb" CXXFLAGS="-O1 -g3 -ggdb" --disable-werror --prefix=/home/richar/glibc/lib --enable-cet
make
make install
生成用于调试的程序
对于一般的elf执行文件,肯定是默认到系统目录去找libc。有两种方式可以自己指定链接的libc位置,一种是在编译的时候加上选项,但这只能用于自己编译的程序。
gcc -g3 -ggdb -o hello hello.c -Wl,-rpath=/home/richar/glibc/lib/lib -Wl,--dynamic-linker=/home/richar/glibc/lib/lib/ld-2.32.so
另一种是用patchelf
修改程序的链接位置这种更加灵活
patchelf --set-interpreter /home/richar/glibc/lib/lib/ld-2.32.so --set-rpath /home/richar/glibc/lib/lib [执行文件]
调试
调试时就可以看到libc源码了。如图
LibcSearch&libc-database
由于LibcSearch
自带的libc-database
版本太老,所以直接把github上最新的libc-database
下载下来,LibcSearch
里的libc-database
目录直接替换成软链接这样就可以方便的更新libc库了。命令如下
rm -rf LibcSearch/libc-database
ln -s libc-database LibcSearch/
然后把自己编译的libc库添加进libc-database
libc-database/add glibc/lib/lib/libc-2.32.so
完工!