Linux系统调用
博客专区 > itfanr 的博客 > 博客详情
Linux系统调用
itfanr 发表于3年前
Linux系统调用
  • 发表于 3年前
  • 阅读 17
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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个的话,需要用指针。

共有 人打赏支持
粉丝 109
博文 420
码字总数 159549
作品 1
×
itfanr
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: