实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用相关的知识,希望对你有一定的参考价值。
/* getpid.c */ #include <unistd.h> #include <stdio.h> int main() { pid_t pid; pid = getpid(); printf("pid = %d \n",pid); return 0; }
上面是使用函数库API
运行结果:
下面是嵌入汇编代码:
/* getpid_asm.c */ #include <unistd.h> #include <stdio.h> int main() { pid_t pid; pid = getpid(); asm volatile( "mov $0x14,%%eax\n\t" /* 将系统调用号20放入eax中。 */ "int $0x80\n\t" /* 中断向量号0x80,即128。int 128 执行系统调用。 */ "mov %%eax,%0\n\t" /* 返回值保存在eax中,将它赋值给pid */ : "=m" (pid) ); printf("pid = %d \n",pid); return 0; }
运行结果:
总结:
1.应用程序、封装例程、系统调用处理程序及系统调用服务例程之间的关系。如图:
系统调用的参数传递:
- 函数调用——压栈
- 用户态到内核态——寄存器传递。
每个参数长度不能超过32位,个数不能超过6个。
超过的话?
使某个寄存器中存储指针,指向内存,内存中存储参数。
20135108 李泽源
以上是关于实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用的主要内容,如果未能解决你的问题,请参考以下文章
实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)
实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(李鹏举)
用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用