Chinaunix

标题: 从GLIBC到内核系统调用间到底发生了什么? [打印本页]

作者: greyzp    时间: 2005-01-10 15:12
标题: 从GLIBC到内核系统调用间到底发生了什么?
我觉得我总是找不到一些环节。比如
sysdeps->;generic->;truncate.c中有truncate()的定义

#include <sys/types.h>;
#include <errno.h>;

/* Truncate PATH to LENGTH bytes.  */
int
truncate (path, length)
     const char *path;
     off_t length;
{
  __set_errno (ENOSYS);
  return -1;
}

我知道truncate是个系统调用,但是就凭这么点代码,怎么就能进入内核的系统调用了?GLIBC在编译的时候做了什么,使得把truncate 转变为 __NR_truncate 放入EAX,然后参数依次进寄存器,再执行INT $80 中断?

GLIBC中Syscall.h基本都是空的,<asm/syscall.h>;中有完整的__NR_xxx的定义,
但是奇怪的是,<asm/syscall.h>;又不是glibc-2.x.x.源码包中自带的!
(在/usr/include/asm/syscall.h中,而不是在内核的/usr/src/linux/...中!)

但是,总要做什么才能把GLIBC基本库中的函数调用,转变为去内核调用吧,这个转变在哪里呢?

看了好久了,在glibc源码和内核源码间切换,都把我切晕了!希望大师们给个提示,任何提示都是好的!谢了!
作者: 柳五随风    时间: 2005-01-11 23:41
标题: 从GLIBC到内核系统调用间到底发生了什么?
找个关于中断,陷阱,和系统调用的资料看看吧.
作者: richardhesidu    时间: 2005-01-13 07:29
标题: 从GLIBC到内核系统调用间到底发生了什么?
linux下可以用strace跟踪系统调用, 如果在厉害一点自己反编译跟踪(用odjdump之类的工具)。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2