由chroot引发的思考:kernel和glibc的关系是什么?用不同的kernel会影响glibc的使用?
系统调用最终是要用int
0x80的,将调用号压入eax,参数压入其他一串寄存器中(看有多少个参数了),然后会执行system_call程序(系统初始化时候设置的
set_system_gate(SYSCALL_VECTOR,
&system_call);)接下来一系列调整内核栈的操作以及环境的设置后,就会用eax表示的系统调用号为索引,在系统调用跳转表中寻找
系
统调用的处理函数了,fork的就是跳转到sys_fork(),glibc其实就是把这个东西封装了一下。
用户空间程序没有任何理由直接使用内核头文件,仅应使用 glibc、libstdc++
提供的系统头文件,所谓的“净化”只是为了提供一套稳定的内核头文件给 glibc,使其不必跟着 linux-kernel 的升级而升级,这个读读
glibc 的历史会有帮助。
曾经有一段时间,每当 linux-kernel-header 有变化,libc
就要做相应调整,反过来也一样,这对于维护者来说是噩梦,于是有必要维护一份长时间相对稳定的
linux-kernel-header,具体的过程就是“净化”——删除一切用户空间不需要的信息。
阅读(1221) | 评论(1) | 转发(0) |