【LINUX】内核源码文件系统调用相关摸索

news2024/11/18 11:50:27

首先,先看看想测试那个系统调用,在应用层,如果使用C语言编程一般我们一来就是open函数,实际在测试的时候,直接用touch xxx.txt然后 echo "xxx" >> xxx.txt,这样就完成了文件创建和写文件的操作,那肯定会用到open的系统调用,但是有一个问题:从【linux】6.9.0系统调用接口列表,一共644个-CSDN博客这篇文章来看,里边有好几个长得像open的,不知道调用的是哪个?只是看名称也不太容易看得出来,我们去内核源代码里边去搜索:

有好些,也不知道调用的是哪个,碰到这样的情况,直接去内核源代码里找到代码(因为是文件系统,所以直接进入fs目录),使用的命令行是grep -Hrn "SYSCALL" *.c | grep "(open":

然后添加打印日志,这里我们在fs/open.c这个文件里加了个计数的count,然后在刚才搜索出来结果的地方添加了打印,具体这个为什么要添加判断count>20才打印,不太记得了,在内核初始化的时候,要把内核压缩包的虚拟文件系统解压出来,实际上会调用到fopen的系统调用,好像是这样,不太记得了:

从前面的搜索得知,open.c 这个文件里实际上有好几个跟fopen长得像的,我们当前只用一个 count,注意是搜索出来的每个里边都去添加下打印日志,添加完成后,编译(编译如果报错,一般是新增代码出现的语法错误),重启电脑,再看看日志:

日志类似这样的,这样可以看出来(实际上调用的是openat这个系统调用,行数有点对不上,因为代码经过多次测试,失败了N多次):

从打印的日志来看,其实已经出现不断调用openat系统调用的死循环了,具体原因还不太清楚(这里需要注意,在本机测试的时候发现:

1)只是执行pr_info("");这个代码对内核影响是最小的;

2)如果想执行pr_info("count: %d", count); 这个也能执行,有时候能成功,有时候不一定,说人话就是内核不一定能起来;

3)再如果想执行pr_info("count: %d, filename: %s", count, filename); 本意是想把被操作的文件名显示出来,测试结果是内核根本起不来,就是这么刺激);

从这个栈看不太出来,这块不太懂,猜测内核前面已经出问题了,最后随便打印点日志意思意思。

另外,如果操作系统未能正常启动,内核打印的日志不一定能看到,显示画面滚动太快。

这应该也是调用栈,不太看得出来跟我们合入代码有啥关系,估计是间接影响的吧。

 上图这个也不太会看,跟上边那个有点像。

这个调用栈就明显跟我们代码合入有关了。红色方框上边部分一看就是内核打印日志那个宏的栈。。这里注意下这个日志是在 busybox 时调用dmesg 打印的日志,这里对grep命令如果学会使用grep -A, -B,会比较容易看到详细的日志,grep过滤的时候不会找关键字就直接基于前面的时间戳过滤,这样容易找到自已想要的信息,不过要需要耐心。

 这个日志从第一行看到是我们合入代码出了问题,这也是为什么在我们合入代码的时候,自已感觉没有问题,实际就会有问题。不过调用栈后边的代码,还不太懂。

这就是基于时间戳过滤,从内核启动时间来看大概是5秒多一点。 

这也是。

这个图不太懂,猜测是内核文件系统初始化内核运行依赖的一些系统库。

搞文件系统的摸索,经常把虚拟机搞死机,当然外边的电脑也蓝屏了好几次,这样多有意思,doge。

在文件系统系统调用API添加打印日志会导致UBUNTU不能正常启动,坏消息就是系统不能正常启动,好消息就是知道系统一定会走到我们打印日志的地方,doge... 

系统起不来,有时候会进到busybox的界面,注意这里边可以使用的命令比较有限。

不能正常起动的问题可以通过开机进入高级选项,选项里边选择较前面编译的可以启动的版本(比如:6.9.0+)就可以了,实在不放心直接使用6.8.0(内核未升级之间的版本就好了)。 

然后进入代码目录,把修改的可能导致系统不能起来的代码回退掉,然后重新编译代码,这样问题基本可以解决。

博客内容估计还有很多不对的地方,请包涵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1864124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MemManage_Handler 问题的解决思路

1、问题 在做一个安全类项目时发现,软件在运行一段时间后会进入"MemManage_Handler",遂开始了一系列查找。 2、解决 (1)查看堆栈数据 查堆栈的数据,发现堆栈也被破坏了,看不出来是执行哪个任务执行导致的…

零基础想学编程,选择哪一门语言更好就业?(非常详细)零基础入门到精通,收藏这一篇就够了_c#就业方向

编程语言的用途广泛,它们各自在不同的领域和应用场景中发挥着重要作用。 零基础初学者在选择编程语言时,可以从就业方向入手选择。 【一一帮助安全学习,所有资源获取处一一】 ①网络安全学习路线 ②20份渗透测试电子书 ③安全攻防357页笔记 …

基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

为什么每一名程序员都应该学习 C++?

掌握 C 可不容易,但一旦你掌握了,就会获得丰厚的回报。 通常,程序员在他们的编程生涯中会使用多种编程语言。然而,我们也看到,有些程序员一直在使用同一种编程语言。例如,我们经常遇到有几十年经验的 Java…

day50---数据结构与算法(五)

四. 高级数据结构与算法设计 4.1 图 1) 概念 图是由顶点(vertex)和边(edge)组成的数据结构,例如 #mermaid-svg-bv3SYpkStIeixcO2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;…

从灵感到成品:使用AI生成博客文章的完整指南

在信息爆炸的时代,每个人都有讲述自己故事的权利和需求。博客作为一种表达方式,不仅能记录个人经历,还能分享知识和观点。然而,许多人在写博客文章时,常常会遇到灵感枯竭、时间不够用或者不知道如何开始等问题。幸运的…

还不到6个月,GPTs黄了

相比起来,人们还不如使用一个足够强大、灵活且通用的AI助手来满足各类复杂需求。更严重的是一些独立GPTs显露出的安全隐患。除此之外,最大的问题在于OpenAI模糊不清的货币化政策。 文章正文 上周,不少人发现微软官网忽然更新了一条“GPT Bu…

星戈瑞Cy5.5 NHS Ester近红外荧光染料2375105-86-3

【星戈瑞stargraydye】以下数据均来自文献资料,星戈瑞暂未进行独立验证, 仅供参考! 在生物医学成像领域,荧光染料的应用逐渐增多。Cy5.5 NHS Ester作为其中的一种,凭借其光学性质和稳定的化学结构,在生物成像、药物追踪以及生物分…

浏览器扩展V3开发系列之 chrome.storage 的用法和案例

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.storage 是用于存储、获取用户数据的 API。当我们需要持久化存储数据时,比如&…

Ubuntu 20.04安装中文输入法出错:gnome-user-docs-zh-hans安装失败

问题:Ubuntu20.04安装中文输入法出错:gnome-user-docs-zh-hans安装失败 现象: 打开language Support页面的时候,提示install依赖的文件 这个过程中会弹窗提示: The following packages have unmet dependencies:gnome-user-doc…

全网最全的国外心理学资源导航站

想学心理学不知道去哪儿看权威的内容? 中文搜索心理学广告多? Kuakua | 发现心理学网站,应用程序和AI工具https://kuakua.app/explore 从心理学AI工具(国内外)到心理学专业院校、心理学期刊论文、心理学线上课程、心…

论文影响因子

谷歌搜索 谷歌一般只能看到期刊或者会议名字 搜索内容 官方评级网站 LetPub

AI助阵,高考志愿不再“盲选“:告别老土选校法,用科技选未来!

填志愿 即将到来的是高考成绩的公布日,对于今年参加高考的学生们来说,此刻的心情无疑是复杂而紧张的。然而,成绩的公布并非终点,而是一个新的开始。紧接着,学生们将面临一个至关重要的挑战——填报高考志愿。 这一过…

集成电路各类电源标号

目录 一、VCC/VEE 二、VDD/VSS 三、VBAT(battery) 四、电源的图形符号 参考:五花八门的电源标号该怎么看--单片机数模电路图原理图看懂VCC VEE VDD VSS GND的含义--洋桃电子大百科P011_哔哩哔哩_bilibili 一、VCC/VEE 在三极管电路中&am…

【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录 核心数据类型深入探索 基础数值与文本类型 日期与时间类型 特殊与复合类型 JSON与HSTORE 表的创建、修改与管理 创建与修改表结构 索引与性能优化 约束与数据完整性 核心数据类型深入探索 PostgreSQL以其多样化的数据类型著称,不仅包括标准SQL数据类型…

Nuxt3: 强制删除__NUXT_DATA__的一种方式

一、问题描述 环境:Node 18.14.0,Nuxt 3.12.2 with Nitro 2.9.6 后台粉丝提问,能否在Nuxt3的页面中不要生成__NUXT_DATA__,因为里面包含了接口返回的数据,感觉数据暴露并且加大了页面的html内容的大小: &l…

微软Win11 22H2/23H2六月更新补丁KB5039302发布!附完整更新日志

2024 年 6月 26 日最新消息,微软为 Windows 11 用户发布了六月最新的更新补丁KB5039302。对于 22H2 版本的用户,系统版本号将升级至 22621.3810;而对于 23H2 版本,版本号则提升至 22631.3810。此次更新将在“设置”主页上添加了新…

核密度估计kde的本质

核密度估计的本质就是插值,不是拟合,只是不要求必须过已知点。 核为box窗函数 核为高斯函数

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

CST软件中滤波器中外部耦合偏小怎么办

在电磁仿真领域,CST Studio Suite(CST 工作室套装)软件以其强大的功能和易用性而广受工程师和科研人员的青睐。然而,在使用CST软件进行滤波器设计时,有时会遇到外部耦合偏小的问题,这可能导致滤波器的性能不…