【Linux】应用层创建XXX文件,文件系统调用可以查看到文件名

news2024/12/23 12:28:26

搞了台电脑,昨天把系统装了下,继续搞事:

 上次基于内核代码openat的系统打印被操作的文件名,发现不成功,很奇怪,这种问题内核不可能会犯这种低级别的问题吧?

反过来想,那不是内核的问题,肯定就是我们这边写打印代码的问题了,并且系统也提示到出错的调用栈,那只能回归代码分析,一共没几行代码,这有点尴尬。。。。

那先打开SourceInsight(有兴趣可以安装下,阅读代码还可以,不过写代码有点不太好):

cd /root/.wine/drive_c/Program\ Files/Source\ Insight\ 3;
  wine Insight3.exe &
 

开始打印filename这个参数的时候,一看这:

感觉肯定是字符串,一打印就出调用栈。。。这。。。

估计这里这有套路。。那我们假设,不知道这个filename是个什么东西,那顺着代码往下找:

从上边来看,这个好像是const char __user *这种类型,感觉也不知道是啥东西,那先不管,继续往下看:

往这里一看,就比较容易了解了,这里一看就是内核在解析这个从操作系统上层传来的参数,从这里来看,关键就是找到struct filename 这个结构体,那我们再找找,Source Insight在这里好像有点bug,好像找不到,那只能去Terminal搜索,用的下面这个命令行,其实这个命令行可以优化些,先不管:

root@A:/usr/src/linux-6.9.0/include# find -name "*.h" | xargs -i grep -Hrn "struct filename {" {}

这种查找,有时候一次不一定能成功,多尝试几次就好了。好,那现在我们找到了,看看这个结构体详细的定义:

 按照理解,直接把name字段打印出来就行了,那简单啊,注意啊,要在1402到1404之后打印,不然功败垂成了:

 其实我在添加完这行代码后,编译内核的时候心里也有点慌,这不会也不对吧?哈哈,这个时候来看,这行代码难度不大吧。

然后编译内核,重启代码,然后查看日志的显示:

 从这里来看,跟我们修改的文件,函数,行号,打印的日志都能对应得上,那说明我们的修改是正确的。

但是这里有一个问题,我们自己未从操作系统应用层面创建文件和写入文件,那表示我们的打印接口不一定对啊,怎么办呢?

很简单,手动创建一个文件,随便写入点内容,这样再去内核日志里看,就可以知道是否成功了:

这里使用的touch命令和echo命令:

然后再搜索日志文件syslog文件,可以看到与我们创建的文件名是一样的,这样表示我们的猜想和操作是正确的。

在实际的操作中,需要有些耐心,并且验证的周期比较长。

代码合入hash值:

合入代码与系统运行详细日志icon-default.png?t=N7T8https://gitee.com/r77683962/linux-6.9.0/commit/64452ad920a29e5f096dfb6dd112643621158f03

基于这样的思路,实际上,我们是可以看到操作系统从应用层面的操作到内核层面的处理的接口,可以通过自己阅读代码,添加日志,看到内核代码的执行流程。

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

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

相关文章

40V转5V,40V转3.3V,40V转3V使用什么降压芯片型号?

40V转5V,40V转3.3V,40V转3V使用什么降压芯片型号? # 40V转5V、3.3V、3V降压芯片:AH8820A的介绍与应用 在电子电路设计中,电压转换是一个常见的需求。特别是在需要将较高电压转换为较低电压以供微控制器、传感器和其他低电压设备使用时,降压…

AI一键音频转文字工具 速度超快,支持实时转换,无需联网,本地整合包下载

这是 CapsWriter-Offline ,一个 PC 端的语音输入、字幕转录工具。可用实现简单一键将音频文件转换成文字的懒人工具。 两个功能: 1、实时转换,按下键盘上的 大写锁定键,录音开始,当松开 大写锁定键 时,就会…

泰勒展开式在Android系统或应用程序中的应用

泰勒展开式在Android系统或应用程序中的应用 引言 泰勒展开式(Taylor Series)是高等数学中的一个重要工具,它允许我们将一个复杂函数表示为一个无穷多项式的和,从而近似计算函数值。在Android开发中,理解和应用泰勒展开式有助于优化涉及复杂数值计算的算法,提高应用程序…

【问题已解决】Vue管理后台,点击登录按钮,会发起两次网络请求(竟然是vscode Compile Hero编译插件导致的)

问题 VueElement UI 做的管理后台,点击登录按钮,发现 接口会连续掉两次,发起两次网络请求,但其他接口都是正常调用的,没有这个问题,并且登录按钮也加了loading,防止重复点击,于是开…

Ai绘画:床上的小萝莉

AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能…

黑马点评DAY1|Redis入门、Redis安装

什么是Redis? redis是一种键值型数据库,内部所存的数据都是键值对的形式,例如,我们可以把一个用户数据存储为如下格式: 键值id$1600name张三age21 但是这样的存储方式,数据会显得非常松散,因…

C# 计算椭圆上任意一点坐标

已知圆心坐标 (x0,y0),横轴 A(长半轴),竖轴 B(短半轴),角度 a,则圆边上点(x,y)的坐标为: 方法一 …

回溯 | Java | LeetCode 39, 40, 131 做题总结

Java Arrays.sort(数组) //排序 不讲究顺序的解答,都可以考虑一下排序是否可行。 39. 组合总和 错误解答 在写的时候需要注意,sum - candidates[i];很重要,也是回溯的一部分。 解答重复了。是因为回溯的for循环理解错了。 class Solutio…

【大模型能力分水岭数学考试,文心一言超gpt4o排名第一】

文末有福利! 2024年全国高考成绩陆续放榜,各位考生的成绩怎么样?在本次考试中还有几位特殊的考生——国内外知名的9个AI大模型也“参与”了本次高考,它们的成绩可谓也是“几家欢喜,几家愁”。 以河北省录取分数线&…

深圳数据中心机房搬迁准备

在互联网高度发达的今天,作为业务系统基础设施承载者,数据中心也得到了长足的发展和进步。随着信息系统规模逐渐扩大,应用功能的增多,过去建造的数据中心的面积、配套设施的各个方面都不能满足需求了。大多数使用者需要搬迁到新的…

Android 11.0 SettingsProvider 源码分析

文章目录 一、SettingsProvider 的概述二、SettingsProvider 的启动流程三、对 SettingsProvider 进行操作方法四、客制化示例 一、SettingsProvider 的概述 SettingsProvider 是一个为 Android 系统设置提供数据共享的 Provider,它包含全局、安全和系统级别的用户…

Linux屏幕驱动开发调试笔记

引言 首先了解下什么是MIPI-DSI: MIPI-DSI是一种应用于显示技术的串行接口,兼容DPI(显示像素接口,Display Pixel Interface)、DBI(显示总线接口,Display Bus Interface)和DCS(显示命令集,Display Command Set)&#…

Tech Talk:智能电视eMMC存储的五问五答

智能电视作为搭载操作系统的综合影音载体,以稳步扩大的市场规模走入越来越多的家庭,成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分,用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…

前端FCP指标优化

优化前 第三方依赖按需引入之后,打包的总体积减小到初始值的55%,但是依然存在很大的js文件,需要继续优化 chunk-vendors.js进行分包之后 截图 compression-webpack-plugin压缩之后 截图

【MySQL备份】Percona XtraBackup总结篇

目录 1.前言 2.问题总结 2.1.为什么在恢复备份前需要准备备份 2.1.1. 保证数据一致性 2.1.2. 完成崩溃恢复过程 2.1.3. 解决非锁定备份的特殊需求 2.1.4. 支持增量和差异备份 2.1.5. 优化恢复性能 2.2.Percona XtraBackup的工作原理 3.注意事项 1.前言 在历经了详尽…

大语言模型系列-Transformer(二)

Transformer 模型的入门可以从以下几个方面开始: 1. 理解基本概念 序列到序列(Sequence-to-Sequence)任务:Transformer 模型主要用于这类任务,如机器翻译、文本摘要等。注意力机制(Attention Mechanism&a…

使用dot来画流程图

Dot是一种图形描述语言,属于Graphviz软件的一部分。Graphviz是一个用于可视化图形(图表、网络图等)的开源工具集。使用Dot语言,你可以创建并描述节点和边,从而生成图形。以下是如何使用Dot语言画图的基本步骤&#xff…

Elasticsearch实战教程: 如何在海量级数据中进行快速搜索

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 Elasticsearch(简称ES)是一个基于Apache Lucene™的开源搜索引擎,无论在开源还是专有领…

matlab仿真 通信信号和系统分析(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第三章内容,有兴趣的读者请阅读原书) 一、离散傅里叶变换 clear all n0:30;%信号的时间范围 xsin(0.2*n).*exp(-0.1*n); k0:30;%频率范围 N31; Wnkexp(-j*2*pi/N).…

firewalld(6)自定义services、ipset

简介 在前面的文章中我们已经介绍了zone、rich rule 、--direct等功能和基本配置。在前面文章中,我们提到过firewalld内置了很多服务,可以通过firewall-cmd --get-services来查看服务,也可以通过配置文件查看这些服务/var/lib/firewalld/ser…