库函数API分析
来源:互联网 发布:卢旺达生活知乎 编辑:程序博客网 时间:2024/06/05 15:52
张涛(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
大多数应用软件的编程都直接调用库函数提供的API进行操作,于是此接口对于实际开发便如同一个黑盒,往往少有去理解其真正执行的过程,通过此次课的分析,对库函数API及系统调用的流程有了较为深刻的理解:
如上图片,比较清晰地解释了整个流程:库函数API通过系统调用号及int 0x80指定所需要调用的系统调用,接着由操作系统中段处理程序进行处理。
于是分析下read函数,以了解其流程:
http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl
通过上面的网页中可以看到,read库函数最终会使用sys_read系统的处理函数,然后,找到系统调用号为3。
于是写出如下测试代码:
#include <stdio.h>#include <time.h>#include <fcntl.h>int main(){ int fd = open("./test", O_RDONLY); //建立的测试文件,在执行程序坐在目录,名字为test 内容为hello char buf[6];#if 0 read(fd, buf, 6); //库函数提供的API#else //一下为自己实现的此API asm ("mov $3, %%eax\r\n" //3号系统调用 "int $0x80" : :"b"(fd), "c"(buf), "d"(6) );#endif buf[5] = '\0'; printf("%s\n", buf); return 0;}
写了个小Makefile,很简单,主要是生成的m32 和 64位代码,内嵌汇编运行结果有差异,之前测试课程中的time函数时,内嵌汇编,不采用m32产生的时间达不到预期结果。
Run : a.out./a.outa.out : main.cgcc main.c -m32附上通过自编API运行结果:
0 0
- 库函数API分析
- libpcap 库函数(API)简介
- libpcap 库函数(API)简介
- 深入分析qsort库函数
- 深入分析qsort库函数
- 深入分析qsort库函数
- stm32库函数GPIO_PinRemapConfig分析
- 深入分析qsort库函数
- 深入分析qsort库函数
- 对qosrt库函数分析
- 深入分析qsort库函数
- MOOC《Linux内核分析》——使用库函数API与C代码嵌入汇编完成同一个系统调用
- Linux内核分析:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- FFmpeg的库函数源代码分析
- 内核库函数Kernel32.exe提供的API
- Kernel32--内核库函数提供的API
- API库函数调用与随机数生成
- 内核库函数Kernel32.exe提供的API
- vi编辑器配置
- 页面跳转的的两种方式的异同
- 绿盟2015校招Web开发笔试题及自我反思
- 常用SQL语句总结(1)
- 关于 Linux 下的文件硬链接,文件软链接
- 库函数API分析
- 【pyhton学习笔记】历数那些遇到的错误
- uvalive 4726(单调队列)
- 基于DHT网络的磁力搜索引擎上线
- 肖特基二极管、瞬态二极管、普通二极管等各种二极管的区别?
- H264--3--NAL层的处理
- android多线程断点下载
- 【python学习笔记】web文本抓取时用到的模块盘点
- 第4周项目--程序阅读4