当学习到堆和后面的东西读懂源码就非常重要,我们这里把源码调试的思路整理清楚
glibc源码下载
这是下载网址
找到要下载的版本 更多版本在左下角
下载 然后丢到虚拟机里面进行解压,就可以了
tar -xf filename
然后我们要找寻要调试的函数在那里
可以通过这个网站进行查询
Code browser - Explore C++ code on the web
这里我们用调试read函数作示范
先点击glibc
然后就可以在你的glibc中找到 然后pwd把路径复制到
cd
vim .gdbinit 注意这个要先cd 啥都不加 先
这个里面
然后写demo调试程序之前要先进行patch 修改版本
patchelf --replace-needed libc.so.6 ./libc-2.23.so ./exit
patchelf --set-interpreter ./ld-2.23.so ./exit
gcc -Wl,--defsym=GLIBC_2.23=1 -g -o exit exit.c
然后通过上面这个方式可以指定编译的版本号,不一定需要 但如果出了patch之后version版本不对的情况可以用
如果出现类似这样子的报错
‘
这种报错的话就需要两个步骤
1.gcc -Wl,--defsym=GLIBC_2.23=1 -g -o exit exit.c 编译的时候指定环境
2.patchelf --set-soname libc-2.23.so ./libc-2.23.so 改变libc-2.23.so的一个东西
但是我发现是不需要调整的,就既不需要patch 也不需要在编译的时候动手脚,直接编译然后调试就可以看到了 效果如下
参考文献