源码调试较高版本的glibc编译的c++程序
有时候做pwn题会遇libc-2.31.so的c++程序
但是我们的环境是libc-2.23,指定libc后又遇到找不到libstdc++.so.6的情况
在另一博客(https://www.cnblogs.com/zq10/p/14314952.html)的基础上,采用以下方法解决这个问题
跟踪一个正常的c++程序,发现它加载了一些 /usr/lib/x86_64-linux-gnu 和 /lib/x86_64-linux-gnu/目录下的文件
而我指定libc编译的c++程序,strace 跟踪显示,找不到/home/zq/Desktop/glibc-2.31/64/libs/x86_64/x86_64/目录下的文件
那我们就把缺失的文件链接过来:
cd /home/zq/Desktop/glibc-2.31/64/lib/tls/x86_64/ sudo ln -s /usr/lib/x86_64-linux-gnu/ ./x86_64 sudo ln -s /lib/x86_64-linux-gnu/ ./x86_64_2 sudo cp -fr ./x86_64_2/* ./x86_64/ sudo rm -r ./x86_64_2
编译一个c++程序测试一下:
#include<iostream> #include<vector> using namespace std; int main(){ vector<int> vec; for (int i=0;i<10;i++){ vec.push_back(i); } return 0; }
编译命令:
g++ -g -L /home/zq/Desktop/glibc-2.31/64/lib -Wl,--rpath=/home/zq/Desktop/glibc-2.31/64/libs -Wl,-I /home/zq/Desktop/glibc-2.31/64/lib/ld-2.31.so hello.cc -o hello
可以顺利编译,下图是c++标准库源码和示例程序源码: