日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2024/7/5 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 open函数返回-1_4.6 linux的系统调用执行探究(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。