当前位置:  技术问答>linux和unix

Linux系统调用的参数传递方式

    来源: 互联网  发布时间:2016-11-19

    本文导语:  先引用一段: “仔细看一下有asmlinkage的地方通常是系统调用的函数,因为在系统调用中,寄存器从用户空间传过来后SAVE_ALL压入堆栈,接着调用相应的系统调用函数,这样系统调用函数一定要保证是通过堆栈传递参...

先引用一段:
“仔细看一下有asmlinkage的地方通常是系统调用的函数,因为在系统调用中,寄存器从用户空间传过来后SAVE_ALL压入堆栈,接着调用相应的系统调用函数,这样系统调用函数一定要保证是通过堆栈传递参数的

转贴一段:
The asmlinkage tag is one other thing that we should observe about this simple function. This is a #define for some gcc magic that tells the compiler that the function should not expect to find any of its arguments in registers (a common optimization), but only on the CPU's stack. Recall our earlier assertion that system_call consumes its first argument, the system call number, and allows up to four more arguments that are passed along to the real system call. system_call achieves this feat simply by leaving its other arguments (which were passed to it in registers) on the stack. All system calls are marked with the asmlinkage tag, so they all look to the stack for arguments. Of course, in sys_ni_syscall's case, this doesn't make any difference, because sys_ni_syscall doesn't take any arguments, but it's an issue for most other system calls. And, because you'll be seeing asmlinkage in front of many other functions, I thought you should know what it was about.”

我的问题是,系统调用的参数传递方式是不是把参数(不一定满4个)放进寄存器里,然后把对应的寄存器压栈,INT X,实际上又把X压栈,下陷后CPU取出了X后找到了对应服务程序,那个服务程序才取出栈中的参数?
也就是说是把参数放到寄存器里,再放到栈中来传递的?
是的话它是把四个寄存器一下全压栈还是按需要压栈?
为什么不直接放到栈中?为什么必须经过寄存器?为什么不能分批把参数放进一个寄存器一次一次压栈?

|
系统调用是在内核中执行的,参数只能压入内核栈
在进入内核之前压栈只是压入用户态栈,所以需要寄存器传递
int x是用户态和内核态的分界线

    
 
 

您可能感兴趣的文章:

  • Linux添加系统调用时如何调用C语言库函数
  • linux中为什么系统调用比普通函数调用更费时间?
  • 为什么我的BEAN 在WIN2000中调用没有问题,但在LINUX中调用有问题
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • 新手:Linux下使用第三方C库(openssl),是调用.so文件还是直接调用.h文件?
  • linux系统调用问题
  • 我如何调用 内核函数 /linux/fs 里面的内核 函数:比如 自己的程序调用 ext3_delete_inode
  • 关于Linux系统调用的问题!
  • 请教在linux中如何动态的增加一个系统调用(模块中)
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • linux:怎么在驱动中调用IIC驱动?
  • linux下在Qt中调用flash播放器
  • 如何达到我这种linux下的系统调用效果
  • window下能否调用linux的静态库(a文件)?
  • Qt下使用Linux系统调用?
  • linux3.0.0.12内核怎么添加系统调用
  • C库函数和linux系统调用区别
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • 一个关于Linux脚本参数传递的问题
  • 请问如何在linux (redhat)下传递一维数组指针?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • linux用户空间到内核空间数据传递
  • linux驱动中probe函数中参数传递问题?
  • linux 2.4.0中do_signal参数传递问题,请大牛来解答
  • linux下JNI给JAVA传递中文的问题
  • 关于linux命令行参数传递的问题
  • 如何在C中调用linux shell脚本并传递参数?
  • linux管道参数传递的问题-APUE上的例子中的疑问
  • LINUX编程关于文件描述符和FILE *指针可否从一个进程传递给另一个进程的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • 如何实现linux下ant调用sh(带输入参数),参数自动填入并执行sh
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • Linux0.11 内核源码 main函数的参数问题
  • linux/centos源码安装nginx编译配置选项参数介绍
  • linux的shell的参数个数限制
  • linux命令后的参数问题
  • 关于linux命令参数顺序的问题
  • 【请教】怎么修改linux内核参数
  • linux下什么语言获得参数是~1
  • linux里面有没有记录I/O访问率的参数?
  • linux makefile中几个参数问题
  • Linux Oracle RAC内核参数
  • 请问Redhat linux的nash中mount 的参数?
  • linux 下用make 命令, 为什么不用加参数
  • 请问:linux下如何将一个类的指针作为参数传给pthread_create创建的线程?
  • linux命令默认参数问题
  • 因为修改了屏幕的参数,linux redhat9进不去了
  • 如果linux下的C语言中嵌入汇编成程序,GCC需要什么样的参数?
  • ARM linux如何处理启动参数地址存放寄存器R2
  • linux 环境下有什么工具可以得到C函数的用法和参数的意义?????????我很想学LINUX
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • sqlserver iis7站长之家
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3