系统调用功能号与execve函数详解
先看看下面通过系统调用实现的hello world代码:
.section .data
msg:.ascii "Hello world!\n"
.section .text
.globl _start
_start:movl $4, %eax ; 此为系统调用号,通过系统调用号,我们可以确定这次系统调用是为了使用write函数movl $1, %ebx ; write函数的第一个参数,是文件描述符movl $msg, %ecx ; write函数的第第二个参数,是输出字符串的地址movl $13, %edx ; write函数的第三个参数,是输出字符串的长度int $0x80 ; 开始系统调用movl $1, %eaxmovl $0, %ebxint $0x80
系统调用是通过int 0x80来实现的,eax寄存器中为调用的功能号,ebx、ecx、edx、esi等等寄存器则依次为参数,从 /usr/include/asm/unistd.h中可以看到exit的功能号_NR_exit为1,write(_NR_write)功能号为4,因此第一个int 0x80调用之前eax寄存器值为4,ebx为文件描述符,stdout的文件描述符为1,ecx则为buffer的内存地址,edx为buffer长度。第二个int0x80之前eax为1表示调用exit,ebx为0表示返回0。
系统调用和函数调用的参数传递方式具体可以参考:
系统调用和函数调用的参数传递方式
系统调用功能号
这部分可以参考:
- https://asm.sourceforge.net/syscall.html#2
- Linux System Call Table
- LINUX SYSTEM CALL TABLE FOR X86 64
调用功能号放在了/usr/include/asm/unistd.h之中,打开文件找到(我没找到)。
总共有383条,就不细细讲述了
总的来说,操作系统是根据系统调用功能号来判断系统调用的功能的,所以要想程序按照我们设想的方式运行,就要正确地在eax
中存放系统调用功能号,并且正确地填写系统调用的其他参数,才能实现功能。
execve函数详解
int execve(const char *filename, char *const argv[ ], char *const envp[ ]);
寄存器eax放execve的系统调用号11;
寄存器ebx放文件路径,即第一个参数;
寄存器ecx放第二个参数,是利用数组指针把内容传递给执行文件,并且需要以空指针(NULL)结束;
寄存器edx放最后一个参数,为传递给执行文件的新环境变量数组。
int 0x80:中断
执行系统调用函数execve()时,execve()通过int 0x80指令进入系统调用入口程序,并且把系统调用号11放入eax中,接着把参数放入ebx,ecx和edx中。
实例展示
#include<unistd.h>int main(){char *argv[]={"ls","-al","/etc/passwd",NULL};char *envp[]={"PATH=/bin",NULL};execve("/bin/ls",argv,envp); return 0;
}
执行后如图:
参考链接:
BUUCTF刷题——others_shellcode
int 80h系统调用方法
系统调用功能号与execve函数详解相关推荐
- linux系统调用:exit()与_exit()函数详解【转】
(转自:https://blog.csdn.net/drdairen/article/details/51896141) exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示 ...
- linux系统调用:exit()与_exit()函数详解
exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_ ...
- MATLAB的iptcheckinput函数详解
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 iptcheckinput函数详解,这个函数在看 ...
- linux 系统函数调用脚本文件,Linux系统调用fsync函数详解
Linux系统调用fsync函数详解 发布时间:2013-11-14 19:55:10 作者:佚名 我要评论 Linux fsync函数主要用于将同步内存中所有已修改的文件数据到储存设备,多用 ...
- linux中recvfrom读取速度,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- Linux系统调用-- recv/recvfrom/recvmsg函数详解(转)
Linux系统调用-- recv/recvfrom/recvmsg函数详解 2007-09-10 23:37 [recv/recvfrom/recvmsg系统调用] 功能描述: 从套接字上接收一个 ...
- linux内核 recvfrom,Linux系统调用-- recv/recvfrom 函数详解
Linux系统调用-- recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息.对于recvfrom,可同时应用于面向连接的和无连接的套接字.recv一般只用在面向连接的套接字,几乎等 ...
- Linux 文件锁 fcntl 函数详解
Linux 文件锁 fcntl 函数详解 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); ...
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
最新文章
- 把控制台程序嵌入到 WinForm 中执行
- 若依前后端分离版本,Windows下使用Nginx代理的方式进行部署(全流程,图文教程)
- [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?
- python怎么设置notebook_JupyterNotebook设置Python环境的方法步骤
- 如何查看注解实现_SpringBoot的注解@ConditonOnClass注解是如何实现的?
- JMeter使用教程-压测
- kaggle竞赛——泰坦尼克号获救
- 使用51单片机驱动航模无刷电机
- 【打印机】连接共享打印机找不到网络路径解决方案
- TMS570-4-RTI_DWD看门狗
- 求会java的大佬救一下场,领导让研究一个应用信息导出工具的代码实现原理,我之前没系统学过java,来个会的大佬帮忙解释下哈,跪谢...这个如果只是单纯实现抓取包名,应用名称的话代码可以怎么精简呀?
- HPS SoC和FPGA联合使用例程
- ntpdate解决同步时间报错:the NTP socket is in use, exiting
- MAVEN踩坑 Could not find artifact...
- 日记:2011年6月深圳2周找工作总结
- 复杂美区块链溯源系统架构
- datasets: mnist
- Android开发关键知识点讲解
- KSDK2.0 + Pins Tool 体验
- 安卓apk版本检测下载升级全过程
热门文章
- windows部署hadoop环境
- 石河子大学师生为荣获2018年“马云乡村教师奖”校友点赞
- clickhouse多副本
- 拿什么拯救你——王阿姨的少女心!
- 【dotnet跨平台】微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1,还有Entity Framework Core RC2
- python if else写在一行_关于python:将if-elif-else语句放在一行上?
- java熔断器_详解spring cloud分布式关于熔断器
- RTThread从底层AT组件到上层SAL之间的关系
- 人机猜拳游戏(修改)
- golang读写文件的几种方式