ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux-系统调用如何知道包装函数将参数放入何处?

2019-11-06 20:50:50  阅读:179  来源: 互联网

标签:system-calls linux


我正在尝试在Linux(RedHat Enterprise 8)中实施syscall,我对其工作方式有些困惑.据我了解,我在用户模式下实现了一个包装器,该包装器将syscall编号放入eax,将参数放在ebx,ecx,edx等中,然后调用int 0x80,后者调用相应的syscall.我的问题是,由于系统调用是像常规C函数一样编写的,因此它如何知道哪些寄存器包含哪些参数?它是一个约定,还是有一个约定的机制?如果存在,它在哪里以及如何执行?

编辑:这是一项家庭作业.我知道有些syscall宏可以为我做这些事情.

解决方法:

Linux Journal文章开始,在第2页的底部

Since the system call interface is exclusively register-parametered, six parameters at most can be used with a single system call. %eax is the syscall number; %ebx, %ecx, %edx, %esi, %edi and %ebp are the six generic registers used as param0-5; and %esp cannot be used because it’s overwritten by the kernel when it enters ring 0 (i.e., kernel mode).

您的c代码可能看起来像是在进行系统调用,但实际上是在libc中调用一个函数.该函数确保所有参数都在正确的寄存器中,然后执行中断.

标签:system-calls,linux
来源: https://codeday.me/bug/20191106/2000736.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有