当前位置:网站首页 > 网络安全培训 > 正文

ctf中关于syscall系统调用的简单分析

freebuffreebuf 2020-02-10 631 0

本文来源:ctf中关于syscall系统调用的简单分析

原创 紫色仰望 合天智汇

0x01

我在动态调试这个程序的时候,发现 syscall调用 系统函数 的过程很有趣,于是便记录下来 希望对大家 能带来些帮助,这里 以 buu 平台上的 ciscn_2019_s_3 为例,给大家详细地分享以及分析下!

0x02

在开始之前,我们先来认真 学习下 read(),write()的 原型:

read():   ssize_t read(int fd,const void *buf,size_t nbytes);    //fd 为要读取的文件的描述符  0   //buf 为要读取的数据的缓冲区地址    //nbytes 为要读取的数据的字节数    //read() 函数会从 fd 文件中读取 nbytes 个字节并保存到缓冲区 buf,  //成功则返回读取到的字节数(但遇到文件结尾则返回0),失败则返回 -1。  write()    ssize_t write(int fd,const void *buf,size_t nbytes);   //fd 为要写入的文件的描述符  1    //buf 为要写入的数据的缓冲区地址   //nbytes 为要写入的数据的字节数    //write() 函数会将缓冲区 buf 中的 nbytes 个字节写入文件 fd,  //成功则返回写入的字节数,失败则返回 -1。

0x03

然后我们再来简单了解下 syscall !嗯...我们来看下****的介绍吧,

v2-7cc8245c7af7881aff190043818643fb_hd.j

上面的是 32 位的系统调用,而64位系统的系统调用总体思想还是一样的,当然也会有些不同,

32位与64位 系统调用的区别:

1. 传参方式不同

2. 系统调用号 不同

3. 调用方式 不同

32位:

传参方式:首先将系统调用号 传入 eax,然后将参数 从左到右 依次存入 ebx,ecx,edx寄存器中,返回值存在eax寄存器

调用号:sys_read 的调用号 为 3 sys_write 的调用号 为 4

调用方式: 使用 int 80h 中断进行系统调用

64位:

传参方式:首先将系统调用号 传入 rax,然后将参数 从左到右 依次存入 rdi,rsi,rdx寄存器中,返回值存在rax寄存器

调用号:sys_read 的调用号 为 0 sys_write 的调用号 为 1

stub_execve 的调用号 为 59 stub_rt_sigreturn 的调用号 为 15

调用方式: 使用 syscall 进行系统调用

Ok,知道了上面这些知识,那么做这题,其实相对来说 会容易些了!可能本来大佬们就没觉得难,还求勿喷!基于网上 对这题的题解很少,我调试了很长时间才弄懂!实在是太弱了!

点击“

转载请注明来自网盾网络安全培训,本文标题:《ctf中关于syscall系统调用的简单分析》

标签:合天智汇

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表

Powered By Z-BlogPHP 1.7.3