之前一直都用海量的虚拟机解决编译等问题 如图:) 学到现在发现不是LTS版本的ubuntu维护起来极其麻烦
以下实现一虚拟机下使用不同版本glibc
首先先下载源码https://ftp.gnu.org/gnu/glibc/
之后解压到目录下
1 tar zxvf glibc-2.32.tar.gz
//以下:~/Desktop/glibc-2.32/glibc-2.32 = /path/to/your/libc
1 2 3 4 5 mkdir buildcd build ~/Desktop/glibc-2.32/glibc-2.32/configure --build=x86_64-pc-linux-gnu --prefix=$HOME /Desktop/glibc-2.32/build make -j8 make install
这里configure的时候可能会提示需要某些依赖或者软件,根据提示信息下载就行 比如我这里提示缺少gawk 那么就
make时间较长,不报错就行
这里有一点需要注意 貌似make成功与否与gcc版本有关系,如下是我的尝试信息 成功 失败 20.04可行 22.04不可行,猜测为低版本gcc能编译高版本glibc源码 待测试
成功走完这里能用了 gcc编译示例。
1 gcc -Wl,-rpath,~/Desktop/glibc-2.32/glibc-2.32 kiwi.c -o k1w1 -static -z noexecstack -fstack-protector-all -pie -z now -masm=intel
若要在gdb中启用,则需要进入gdb后手动指定,如下 若使用pwntools脚本启动,则在启动时如下使用
1 2 from pwn import * p = process(["/home/str1k3/Desktop/glibc-2.32/elf/ld.so" ,"./pwnfile" ],env={"LD_PRELOAD" :"/home/str1k3/Desktop/glibc-2.32/libc.so.6" })
可以使用xclibc项目来切换运行libc环境,以下来自项目的README: 这个脚本是基于最新版的glibc-all-in-one ,我建议你将其安装到~
目录
1 2 3 git clone https://github.com/matrix1001/glibc-all-in-onecd glibc-all-in-one ./update_list
xclibc脚本配置
1 2 3 4 5 git clone https://github.com/ef4tless/xclibc.gitcd xclibc sudo rm /usr/local/bin/xclibc sudo mv ./xclibc /usr/local/bin sudo chmod +x /usr/local/bin/xclibc
本地libc库部署(*可选)
1 2 xclibc -d all xclibc -d old
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 xclibc [选项] [参数] -s [libc文件] -x [-n] [文件] [libc文件] -c [-n] [文件] [libc大版本号] [libc小版本环境路径] -d <-r/-u> [version]/[all]/[old] -e [deb包] -r [文件] -h -v
好用爱用 xclibc能下载到的东西比glibc-all-in-one多,大赞