在学习linux pwn时,有时候需要进行glibc的源码调试,本文记录了一种源码调试的配置过程
参考: 自选择glibc带符号版本调试
编译glibc
先在 https://ftp.gnu.org/gnu/glibc/ 下载需要版本的源码
新建两个目录,一个目录放编译后的glibc,一个目录放glibc源码
1 | #存放编译后的glibc |
将下载好的源码放进/home/allforyou/local_glibc_source/
,然后直接解压,就会解压出glibc-2.23
文件夹。
进入glibc源码目录,新建两个目录,用于存放build文件。
1 | cd /home/allforyou/local_glibc_source |
然后在分别在build和build32目录下,执行configure,--prefix=
后面是要安装到的目录
1 | #64位: |
可能会提示你有些关键工具丢失或过旧,直接用apt-get install安装就行了。比如我这里有提示:
*** These critical programs are missing or too old: gawk
,那么直接sudo apt-get install gawk
即可。
最后分别在build和build32下,执行make:
1 | sudo su |
创建ld的符号链接
1 | #32位 进入/lib目录,创建指向目标ld.so的符号链接 |
可以用ls -l
看看效果:
替换ELF文件的ld
1 | vim ./a.out |
直接将elf里的ld信息字符串,改成我刚才生成的符号链接就可以了。
然后就可以进行glibc的源码调试了。
这种替换方法比较灵活,可以编译各种版本的glibc,然后强制修改pwn题里的ld,即可更换libc版本了。需要注意的是,不能改变源文件的大小,例如这里,将原来的符号链接/lib/ld-linux.so.2
改为/lib/23-linux.so.2
刚好不会改变大小,而且目标版本十分直观。