全部博文(214)
分类:
2007-11-27 23:27:26
库函数是高层的,完全运行在用户空间, 为程序员提供调用真正的在幕后完成实际事务的系统调用的更方便的接口。系统调用在内核态运行并且由内核自己提供。标准C库函数printf()
可以被看做是一个通用的输出语句,但它实际做的是将数据转化为符合格式的字符串并且调用系统调用 write()
输出这些字符串。
是否想看一看printf()
究竟使用了哪些系统调用? 这很容易,编译下面的代码。
|
write(1, "hello", 5hello)
。这就是我们要找的。藏在面具printf()
的真实面目。既然绝大多数人使用库函数来对文件I/O进行操作(像 fopen, fputs, fclose)。 你可以查看man说明的第二部分使用命令man 2 write 。man说明的第二部分专门介绍系统调用(像kill()
和read()
)。 man说明的第三部分则专门介绍你可能更熟悉的库函数(像cosh()
和random()
)。你甚至可以编写代码去覆盖系统调用,正如我们不久要做的。骇客常这样做来为系统安装后门或木马。 但你可以用它来完成一些更有益的事,像让内核在每次某人删除文件时输出 “ Tee hee, that tickles!” 的信息。