LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: qqrilxk

请问各位哥们 系统调用进入内核执行sys_*时,sys_*是怎样从寄存器中取得从用户态传来

[复制链接]
发表于 2005-5-19 08:46:25 | 显示全部楼层
Post by xieweiyi
调用者将参数压入栈中,被调用者从栈里面取出传过来的参数,就是这样
至于你在asmlinkage long sys_open(const char __user * filename, int flags, int mode)
里面看不到取参数的代码,这就是C代码的优势了,C的编译器都帮你做了,取参数这样的工作
如果你非要看,那么就看从C代码编译出来的汇编代码,你就能看见汇编写的pop指令了

你确定有pop指令??
回复 支持 反对

使用道具 举报

发表于 2005-5-19 12:58:59 | 显示全部楼层
不是肯定有pop 指令,而是通常C的调用方式由 callee 负责栈的操作,用 add esp,* 方式:

  1. [FONT=Courier New][color=Blue]

  2. open("test.test", O_RDONLY);

  3. disassemble:

  4. pushl O_RDONLY
  5. pushl $L.1                ; 常量字符串地址
  6. call open
  7. addl $8, esp

  8. [/color][/font]
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表