【 声明:版权所有,欢迎转载,请勿用于商业用途。
有时候看glibc一头雾水,那么多macro,也不知道哪些代码讲了什么,也不知道哪些编译了,哪些没有编译,所以总想找个机会看看glibc里面做了什么。可是调试glibc稍微有点麻烦,下面时我个人的一些经验,供大家参考。
1、hello_world依赖哪些文件
通常hello_world要想运行起来,除了依赖它自己之外,还需要ld.so和libc.so
2、glibc如何下载编译
可以找一个和你os差不多版本的glibc,直接从https://www.gnu.org/software/libc/下载
./configure 之后直接make就可以了
3、如何调试libc和ld
a,静态编译,再调试,此时就没有ld和libc了
b,利用LD_PRELOAD的方法进行调试,先运行起来,再用gdb attach过去
c,直接用ld.so运行执行文件来调试
ps:
ld.so中的信息加载都是通过bootstrap完成的,数据来源有这么几个途径:
1、通过system call向os要数据
2、读取静态文件,获取数据
3、读取链接文件中的变量来获取(这部分变量应该是编译器、连接器提供的)
4、本地函数编译的时候获取数据,这些主要是静态数据
参考:
javascript:void(0)