查看C语言系统函数实现
为什么找不到实现
以malloc为例,可以很快找到malloc的头文件定义(/usr/include/stdlib.h),但是,无法找到其源文件。这是因为stdlib.h是GCC编译器提供的接口文件,不同的编译器接口标准不同,也就是说编译器只能触及到接口层。而内存由Linux内核分配,malloc属于系统函数,因此,malloc封装在内核层,以防止我们不小心修改了。
在/lib64/下,可以发现有个软连接 libc.so.6 (使用软连接是担心用户误删真正的so文件),可以看到,这个动态链接库里,就有malloc的实现
所以,如果我们只是想要查看源码实现,需要下载glibc代码
glibc下载
非root用户执行以下命令要加sudo
安装git:yum install -y git
进入目录:cd /usr/
下载地址:git clone git://sourceware.org/git/glibc.git
如果提示: fatal: 不能为 ‘glibc’ 创建工作区目录。
则执行:chmod o+w ./
/usr/的other用户添加写权限(这里的other是指的git吗?而不是当前用户在写glibc)
其中,malloc函数的代码实现在glibc/malloc/目录下(malloc.c及其相关代码),主要分为两步:
检查是否需要调用hook,调用__libc_malloc(其调用最核心的内存分配函数__init_malloc)