arm64大约支持280个系统调用,我们平时使用的这些系统调用,到底工作原理是什么,调用后又是到哪里实现的呢,这篇文章初步了解下内核系统调用的流程,并告诉跟踪这个流程的方法。

废话不多说,如上就是linux的系统调用关系图:

1.绝大部分用户态系统调用接口,都经过glibc库,最终到内核是sys_xx实现函数完成功能并返回用户态;

2.少量glibc不支持的API可通过其他方式直接到内核sys_xx实现函数完成功能并返回用户态;

3.存在少量系统调用glibc内部实现,但是实现流程使用内核关键函数,比如malloc;

举例说明如何跟踪

open()函数

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void main()
{open("xx", O_CREAT);
}

以上是open的系统调用,可以使用gcc open.c -o open命令编译成二进制。

ldd open
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f53081a5000)

从上可知最终到系统libc库

查看libc库的open:
nm -D /lib/x86_64-linux-gnu/libc.so.6  |grep open
00000000000f7030 W open
00000000000f7030 W __open

接下来需要下载glibc库的源码,然后

git checkout glibc-2.9
vim io/open.cint
__open (file, oflag)const char *file;int oflag;
{int mode;if (file == NULL){__set_errno (EINVAL);return -1;}if (oflag & O_CREAT){va_list arg;va_start(arg, oflag);mode = va_arg(arg, int); va_end(arg);}__set_errno (ENOSYS);return -1;
}

如何glibc库经过初步的参数检查,会调用到内核的系统调用sys_open()
->include/linux/syscalls.h
->sys_open -> do_sys_open
->fs/open.c
->long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)

系统调用 malloc

cat test.c
#include <stdio.h>
#include <malloc.h>void main()
{void *c = (void*)malloc(10);free(c);
}

如上
ldd test
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f53081a5000)nm -D /lib/x86_64-linux-gnu/libc.so.6  |grep malloc
0000000000084130 T __libc_malloc
0000000000084130 T malloc

glibc源码中

 find . -name malloc.c
./malloc/malloc.c

具体malloc在glibc的功能实现可以查看如下博客,我这里不再详细说明,毕竟不深究这块。https://introspelliam.github.io/2018/05/21/pwn/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E2%80%94_int_malloc/

PS:近期太忙,没时间写博客了~~~~~

open函数返回-1_4.6 linux的系统调用执行探究(1)相关推荐

  1. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  2. system函数返回值,Linux

    理论 我们先看下man手册是怎么说的man system RETURN VALUEThe value returned is -1 on error (e.g., fork(2) failed), a ...

  3. Linux的系统调用、网络连接状态、磁盘I/O;可疑行为监控/日志收集、SHELL命令执行流程

    http://man7.org/linux/man-pages/man7/capabilities.7.html http://www.cnblogs.com/LittleHann/p/3850653 ...

  4. Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

    分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...

  5. shell函数定义、函数调用及函数返回值用法

    1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{     函数体    ...

  6. 操作系统原理,系统调用,系统调用与库函数API等函数之间的调用关系,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB

    操作系统原理,系统调用,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB 一.系统调用:操作系统功能调用,用户在编程时可以调用的操作系统功能. 1.系统调用是操作 ...

  7. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  8. Linux 下socket编程 connect()函数返回-1(error:Connection refused)

    一.背景 系统:CentOS7 64位 物理机 IP:192.168.2.199/24 使用端口:9999 二.问题描述 在tty1上运行服务器程序,在tty2上运行客户端程序 若连接成功,则服务器程 ...

  9. ftok file php,Linux和PHP中的ftok函数返回值不一致问题跟踪

    在IPC中中,我们经常事情ftok函数来获取key,来作为获取消息队列id.共享存储标识和信号量ID.在项目中使用了php进程和linux进程通信,采用了消息队列的方式,但是结果表现为php中的fto ...

最新文章

  1. 缓存用不好,Bug改到老
  2. Debian读写ntfs分区格式!
  3. 为什么8位数据范围是-128到127,而不是-127到128?
  4. Unity - Humanoid设置Bip骨骼导入报错
  5. Android:最全面的 Webview 详解
  6. 你以为环幕屏就结束了?真正的小米MIX 4或下月发布:1亿像素相机加持
  7. 阿里架构师:​程序员必须掌握的几项核心能力
  8. 河南巴旦木生态农业:巴旦木与杏仁有哪些不同,如何分辨巴旦木仁与杏仁?
  9. matlab 电力电子仿真电路,基于Matlab_Simulink的电力电子电路仿真.pdf
  10. Codeforces - 1152B - Neko Performs Cat Furrier Transform
  11. 反垃圾邮件技术之密径追踪
  12. 网络安全论文投稿给电脑编程技巧与维护有哪些要求
  13. c语言千位分隔符代码if函数,JavaScript实现千位分隔符
  14. 爬山法、随机重启爬山法、模拟退火算法对八皇后问题和八数码问题的性能测试...
  15. Vampire:吸血鬼
  16. 逍遥模拟器的安装和使用
  17. mysql 替换 斜杠_Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\...
  18. 新媒体运营教程:策划一场成功漂亮的活动策划
  19. Python爬虫入门-利用scrapy爬取淘女郎照片
  20. Matlab代码:ADMM算法在考虑碳排放交易的电力系统最优潮流中的应用

热门文章

  1. framebuffer驱动详解3——framebuffer驱动分析(driver和device的配套查找)
  2. .Net序列化与反序列化的2种方法
  3. SequoiaDB 系列之六 :源码分析之coord节点
  4. VSS 请求程序和 SharePoint 2013
  5. java获取插入数据库表中的自增列值的一个简单方法
  6. 正则表达式pcre在Android下的移植
  7. DIV Scroll属性
  8. FMS3系列(三):创建基于FMS的流媒体播放程序
  9. boost库学习入门篇
  10. Android启动后icon应用图标不能显示的可能问题