Linux系统调用

2015/06/08 20:45
阅读数 194

linux中是通过执行int $0x80来执行系统调用的,这条汇编指令产生向量为128的编程异常。

进程需要指定需要调用哪个系统调用,这需要传递系统调用号。​

系统调用需要输入输出参数,例如:

  • 实际的值
  • 用户态进程地址空间的变量的地址
  • 包含指向用户态函数的指针的数据结构的地址

system call是所有系统调用的入口点,每个系统调用至少有一个参数,即由eax传递的系统调用号。

一个应用程序调用fork()封装例程,那么在执行int $0x80之前就把eax寄存器的值置为2,即__NR_fork()

这个寄存器的设置是由libc库封装例程进行 进入system call后,立马将eax压栈

寄存器的限制: (1)每个参数的长度不能超过寄存器的长度,即32位 (2)在系统调用号(eax)之外,参数的个数不能超过6个( ebs ecs edx esi edi ebp )多余6个的话,需要用指针。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部