"); //-->
库函数是高层的,完全运行在用户空间, 为程序员提供调用真正的在幕后完成实际事务的系统调用的更方便的接口。系统调用在内核态运行并且由内核自己提供。标准C库函数printf()可以被看做是一个通用的输出语句,但它实际做的是将数据转化为符合格式的字符串并且调用系统调用 write()输出这些字符串。
是否想看一看printf()究竟使用了哪些系统调用? 这很容易,编译下面的代码。
#i nclude <stdio.h>
int main(void)
{ printf("hello"); return 0; }
|
使用命令gcc -Wall -o hello hello.c编译。用命令 strace hello 跟踪该可执行文件。是否很惊讶? 每一行都和一个系统调用相对应。 strace是一个非常有用的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。 这是一个极有价值的查看程序在干什么的工具。在输出的末尾,你应该看到这样类似的一行 write(1, "hello", 5hello)。这就是我们要找的。藏在面具printf() 的真实面目。既然绝大多数人使用库函数来对文件I/O进行操作(像 fopen, fputs, fclose)。 你可以查看man说明的第二部分使用命令man 2 write 。man说明的第二部分专门介绍系统调用(像kill()和read())。 man说明的第三部分则专门介绍你可能更熟悉的库函数(像cosh()和random())。
你甚至可以编写代码去覆盖系统调用,正如我们不久要做的。骇客常这样做来为系统安装后门或木马。 但你可以用它来完成一些更有益的事,像让内核在每次某人删除文件时输出 “ Tee hee, that tickles!” 的信息。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
MSP430 汇编程序设计 (二)
嵌入式 Linux 應用:概述
基于COM的OPC技术研究及其接口实现
基于CAN总线的智能寻位制造系统
2024-2034年电动汽车离网充电技术:技术路线、竞争格局与市场预测
MSP430 汇编程序设计 (三)
基于cpld器件的单稳态脉冲展宽电路
英特尔前高管诉说英特尔是如何受到官僚主义“毒瘤”掣肘的
使用IO-Link收发器管理数据链路如何简化微控制器选择
村田顽童演示控制姿势行走
理解来理解去还是理解不透,有兴趣来看看
BOE(京东方)重磅发布ADS Pro新品
基于CEBus总线的铁路灯塔控制系统的设计
村田顽童爬坡
剃须刀充电器电路
开关电源恒流充电器电路图
MSP430 汇编程序设计 (一)
单激式充电器
小尺寸FPGA如何发挥大作用
基于EZ-USB的电脑眼接口
NuvoLinQ与BICS 和Kigen合作提供安全的POS连接解决方案
官方确认:一汽奥迪A5L也将用上华为智驾
使用示波器对三相电机驱动器进行测量
LM317电池充电器电路
脉冲限流蓄电池充电器
从硅到碳化硅过渡,碳化硅Cascode JFET 为何能成为破局者?
悲惨的中国软件业 (转载)
RTL8201L缺货,xiaohua,E-ARM你们买得到吗?
[原创]cygwin下bdm gdb for mcf5272配置
华硕无畏14 AI版与灵耀14 Air骁龙版AI PC,搭载骁龙X平台引领智能办公新体验