glibc 编译(转载)


0x01 下载源码

1
http://ftp.gnu.org/gnu/glibc/

0x02 指定安装与源码存放的位置

1
2
3
4
# 如安装在
/usr/local/glibc/glibc2.23
# 源码存放
/home/thonsun/Desktop/glibc/glibc-2.23/

0x03 新建build文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在下载源码的文件夹解压进入源码
cd build文件夹
### x64的编译配置
CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og"
CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og"
../configure --prefix=/path/to/install
# ../configure --prefix=/usr/local/glibc/glibc2.23 我的配置
mkdir build # 要在新的空的文件夹进行configure配置,存放makefile文件
# configure编译时提示:configure: error: you must configure in a separate build directory
### x32的编译配置
# 在前面的已经生成64位的情况下,再同保留两个版本的要新建一个build32/,和安装文件夹x32/
# /usr/local/glibc/glibc2.23/x32
# /home/thonsun/Desktop/glibc/glibc-2.23/bulid32
###!!!!! 32位下的编译要一起执行 !!!!
CC="gcc -m32" CXX="g++ -m32" \
CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" \
CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og" \
../configure --prefix=/usr/local/glibc/glibc2.23/x32 --host=i686-linux-gnu
#### 切换到root
su
make && make install

0x04修改加载#TODO:list1

1
2
3
4
export LD_LIBRARY_PATH=/usr/local/glibc2121/xxx 
export LD_LIBRARY_PATH=`pwd`
export LD_PRELOAD=你的libc
最后不用了在:unset LD_PRELOAD

(可选loader)


1
2
3
4
5
6
7
8
9
10
11
# ubuntu16.04的更新源
https://blog.csdn.net/lym152898/article/details/79100507
# 安装pathelf
sudo apt-get install patchelf
# pathelf使用 https://nixos.org/patchelf.html
# 修改要调试的程序
# x64
patchelf --set-interpreter /usr/local/glibc/glibc2.23/lib/ld-linux-x86-64.so.2 --set-rpath /usr/local/glibc/glibc2.23/lib/ double_free
# x32
patchelf --set-interpreter /usr/local/glibc/glibc2.23/x32/lib/ld-linux.so.2 --set-rpath /usr/local/glibc/glibc2.23/x32/lib/ double_free32
# 注:ld-linux-x86-64.so.2为一个编译生成的lib库中的loader的ld-so.2的连接文件,会默认加载当前的libc

未注意问题

在配置如下环境变量的时候,没有将如下环境变量一次写入,而是分行写入的,导致在进行动态调试的时候,不能看到宏定义相关的符号,将如下变量一行写入即可解决该问题

1
2
3
CC="gcc -m32" CXX="g++ -m32" \
CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" \
CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og" \

未解决宏加载问题
解决宏加载问题

文章主要copy于thonsun 师傅的文章,仅用作参考学习,记录 !!!

https://thonsun.github.io/2019/07/15/%E8%87%AA%E9%80%89%E6%8B%A9glibc%E5%B8%A6%E7%AC%A6%E5%8F%B7%E7%89%88%E6%9C%AC%E8%B0%83%E8%AF%95/

可参考

1
2
3
4
5
6
http://look3little.blogspot.com/2017/12/debug-symbolglibc.html
https://bbs.pediy.com/thread-225849.htm
http://brieflyx.me/2018/linux-tools/handling-so-hell/
https://www.cnblogs.com/xingzherufeng/p/9682660.html
https://0xffff.one/d/337 有详细介绍
https://bbs.pediy.com/thread-254868.htm