使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
安常青 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
当我们使用某些库函数的API时,实际上该库函数啥都没干,它只是一个系统调用的封装。X86为例,系统调用会执行int 0x80指令,也就是陷入。操作系统会变为内核态,查找系统调用表,跳转到相应的系统调用。每个系统调用都对应一个唯一的系统调用号,系统调用之前,会从eax寄存器读系统调用号,系统调用的返回值也会保存在eax中。
下面我们在C代码中嵌入汇编,实现一个getpid的系统调用。该系统调用获取当前进程的pId号。
首先,看代码:
编译运行:
总结:
通过这次实验,更加熟练使用嵌入汇编,对系统调用有了更深的理解。