当前位置: 首页 > news >正文

【LINUX】小工具降耦合,全内核函数插入宏摸索测试中。。

这阵子把这个小工具对外的耦合度降了下,

include/linux/printk_self.h · r77683962/linux-6.9.0 - Gitee.comicon-default.png?t=N7T8https://gitee.com/r77683962/linux-6.9.0/blob/master/include/linux/printk_self.h

这个用于初始化打印日志的级别和打印次数: 

void ParametersInit(int State, int Times); //Initial parameters

这个用于通过名称来设置打印的级别和打印次数,原来是放在do_sys_openat2函数内的:

现在把跟文件比较的代码全放在这个函数里了:

原来在创建文件时会走到这个流程,由于操作系统内核运行时,时时刻刻都可能会走到这个流程,所以会浪费系统CPU资源。

void StateSet(const char *name); //set print log state

封装后调用的话,看起来简单不少,只需要你的代码传入名称就可以了,那这样可以根据自己的实际情况选择这个函数的插入位置:

这是把原来这个工具代码优化了下。

另外一件事情本来是设想把内核所有C文件函数里都加下这个打印,想看看效果怎么样,先给结论:电脑会卡死,具体原因还没有找到,修改的文件太多了,不太容易找。

先说下是怎么操作这一个流程的:

1、把内核编译一遍,编译完成后所有C文件都会有目标文件.O,操作命令就是在根目录make -j16这样;

2、用NM命令把所有C代码生成的目标文件里边的符号找出来,在这步操作的时候需要排除一些目录,比如:tools,samples这类,下边这个命令行写的不太行,当时为了实现功能,没想那么多:

find . -mindepth 2  -name "*.o"  | grep '\./tools' -v | grep '\./samples' -v | grep '\./security' -v | grep '\./crypto' -v | grep '\./arch' -v | grep '\./lib' -v | grep -v "\.mod\.o" >all_o_files.txt

然后于nm命令的参数找到目标文件里定义的局部函数和全局函数:

nm $ofile  -l | grep " [Tt] " | grep -v "__pfx"  | grep "${no_postfix}\.c" | awk -F":" '{ print $2 }' | sort -n |uniq >all_lines.txt

在实际操作的过程里,还需要去重等等,这里边就会找到每个C文件里边在实现的时候函数名所在的行。

函数所在的行是没法直接插入我们的打印宏的,需要找到函数体开始标志:{

3、用的这个手段,好像大概意思是找到函数所在的行,向后10行中找第一个{,函数实现的时候会有实参列表啥的,实际上是把所有写入到 leftCurlyBracket.txt,所以这里用到>>

cat -n $file | tail -n +${line} | head -10 | grep  "{" | head -1 | awk '{ print $1 }' >> leftCurlyBracket.txt

然后在找到的{下一行插入,实际这样会有问题,因为有的函数只有{}在同一行,会报错

在前面nm -Tt的时候会把静态结构体定义找到,就会导致插入宏后会变成这样:

struct xxxx = {

pr_info_self().....

xxx

xxx

}

这是一类,还有同类型的static char *......这类,还有enum这类等等

第2步那个sort -n很重要,在插入宏的时候,只能是从行数大的先插入,然后行数小的后插入宏,因为插入代码后,行数会变;

4、最后插入头文件包含,开始本来是在原来C文件里边#include最后一个后边插入,实际上不行,因为有的C文件最后百分之15左右也会有#include包含,到后边直接简单粗暴直接在第2行后插入,这能解决98%左右的问题,还有些使用的/**/多行注释的,插入了因为被注释掉了没有用,也不行;

5、前面工作完了就要编译验证,这才是最难的,因为很多大佬写的代码也不太规范,会有各种编译问题。

其实最好的还是使用编译器来搞这种操作比较好。

相关文章:

【LINUX】小工具降耦合,全内核函数插入宏摸索测试中。。

这阵子把这个小工具对外的耦合度降了下, include/linux/printk_self.h r77683962/linux-6.9.0 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/blob/master/include/linux/printk_self.h 这个用于初始化打印日志的级别和打印次数: void Param…...

24/8/12算法笔记 复习_线性回归

import numpy as np#导入包 X np.array([[1,1],[2,1]])#构造矩阵 y np.array([14,10])np.linalg.solve(X,y) #linalg是线性代数,用于求解线性方程AX b,solve计算线性代数回归问题X.T#转置 a X.T.dot(X)#矩阵乘法B np.linalg.inv(a)#求逆矩阵from sklearn.linea…...

Linux系统驱动(十四)输入子系统

文章目录 一、输入子系统(一)输入子系统框架结构(二)输入子系统的API 二、实现两个按键的驱动(一)实现思路(二)代码实现 一、输入子系统 在linux系统中使用输入子系统驱动上报鼠标&…...

力扣(2024.08.12)

1. 98:验证二叉搜索树 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isValidBST(self, r…...

最新版的AutoGPT,我搭建好了

最近AutoGPT不是更新了嘛 安装 我按照官方的教程 在本地搭建好了 改动 可见的改动,主要是把原来的纯命令行改成前后端的形式 看下前端界面 界面比较简单,主要分3个大块 监控 第一个是监控 主要是看你在 build 里构建的Agents的运行情况 build 第一个是Ag…...

[SWPUCTF 2021 新生赛]PseudoProtocols(构造伪协议)

打开题目所给的环境我们可以看到这样一句话: 这里我先尝试访问/hint.php ,但是发现什么都没有发生, F12查看源代码也并没有发现什么,到这里来看的话似乎没有思路了,但是这个题的题目已经给了我们很明显的提示&#xff…...

基于STM32开发的智能语音助手系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 智能家居控制个人语音助理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人工智能技术的发展,智能语音助手已经逐渐进入了人们的日常生活。…...

基于python的图像去雾算法研究系统设计与实现

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...

自定义 View 可以播放一段视频

请实现一个自定义 View 的核心代码,核心要求可以响应如下事件: // - 要求自定义 View 可以播放一段视频 / - 在 view 左侧区域上下滑动,可以提高减少音量 / / - 在 view 右侧区域上下滑动可以提高减少屏幕亮度 // - 在 view 左右滑动可以…...

LVS负载均衡集群部署之—NAT模式的介绍及搭建步骤

一、环境准备 1.准备三台rhel9服务器 服务器名称 主机名 ip地址备注LVS调度服务器lvs.timinglee.org eth0:172.25.254.100(外网) eth1:192.168.0.100(内网) 关闭selinux和防火墙webserver2网站服务器webserver1.timinglee.orgeth0:192.168.…...

【算法】浅析哈希算法【附代码示例】

哈希算法:数据存储与检索的基石 1. 引言 在计算机科学中,哈希算法是一种用于将数据(如文件、网络地址或数据库记录)转换为固定长度的哈希值的过程。哈希值通常是一个较短的数字或字符串,用于快速检索原始数据或验证数…...

2024.8.12

2024.8.12 【梦最让我费解的地方在于&#xff0c;明明你看不清梦里人们的脸&#xff0c;却清晰地知道他们是谁。】 Monday 七月初九 序理论 最小链覆盖&最长反链长度 我们设定一个二元关系符R和一个集合A 我们设定<A,R>这样一个类群&#xff0c;那么对于任意 a i…...

使用Python解析pdf、docx等格式文件。

针对不同类型的文件&#xff0c;需要采取特定的访问与解析策略来有效获取其中蕴含的知识。下面我们将介绍对于不同数据源数据的获取方式。 1 解析Docx文档 1.1 获取Docx文档中文本 from docx import Document # pip install python-docx # python-docx 0.8.11 filename xx…...

Linux网络通信基础API

这篇文章只有Linux网络通信基础API大参数信息&#xff0c;和返回值&#xff0c;这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。 创建socket #include <sys/types.h> /* See NOTES */#include <sys/socket.h>int sock…...

Python爬虫:下载4K壁纸

&#x1f381;&#x1f381;创作不易&#xff0c;关注作者不迷路&#x1f380;&#x1f380; 目录 &#x1f338;完整代码 &#x1f338;分析 &#x1f381;基本思路 &#x1f381;需要的库 &#x1f381;提取图片的链接和标题 &#x1f453;寻找Cookie和User-Agent &…...

2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题&#xff0c;包含北京市安全员-B证新版试题答案和解析及北京市安全员-B证免费试题练习。安全生产模拟考试一点通结合国家北京市安全员-B证考试最新大纲…...

python爬取B站视频实验

实验17&#xff1a;爬虫2 文章目录 实验17&#xff1a;爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求 &#xff08;1&#xff09;掌握有关爬虫的包 &#xff08;2&#xff09;掌握爬虫方法 &#xff08;3&#xff09;爬取B站卡塔尔世界杯若干视频 2. 实验…...

10步搞定Python爬虫从零到精通!

学习Python网络爬虫可以分为以下几个步骤&#xff0c;每一步都包括必要的细节和示例代码&#xff0c;以帮助你从零开始掌握这一技能。 第一步&#xff1a;理解网络爬虫基础 什么是网络爬虫&#xff1f; 网络爬虫是一种自动化程序,用来从互联网上收集数据.它通过发送 HTTP 请求…...

SpringMVC学习笔记---带你快速入门和复习

一、初识SpringMVC 1.1、什么是SpringMVC 1.1.1、什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff0…...

Linux系统编程 day09 线程同步

Linux系统编程 day09 线程同步 1.互斥锁2.死锁3.读写锁4.条件变量&#xff08;生产者消费者模型&#xff09;5.信号量 1.互斥锁 互斥锁是一种同步机制&#xff0c;用于控制多个线程对共享资源的访问&#xff0c;确保在同一时间只有一个线程可以访问特定的资源或执行特定的操作…...

如何使用unbuild在5分钟内搭建现代化JavaScript项目:终极快速指南

如何使用unbuild在5分钟内搭建现代化JavaScript项目&#xff1a;终极快速指南 【免费下载链接】unbuild &#x1f4e6; A unified JavaScript build system 项目地址: https://gitcode.com/gh_mirrors/un/unbuild 在当今快速发展的JavaScript生态系统中&#xff0c;构建…...

深入理解 C# 架构思维:继承的界限、多态的解耦与属性的封装

C#学习笔记面向对象编程&#xff1a;继承什么是继承继承的语法方法的重写构造函数的重载与 base 关键字动物世界完整实例踩坑汇总面向对象编程&#xff1a;多态多态的实现步骤踩坑汇总面向对象编程&#xff1a;封装核心套路&#xff1a;私有字段 公开属性代码实例踩坑汇总面向…...

8 个值得收藏的综合类在线工具网站

8 个值得收藏的综合类在线工具网站1. tool.lu&#xff1a;老牌开发者工具箱&#xff0c;胜在稳定tool.lu 是很多开发者都用过的老站。它的优势不在“花哨”&#xff0c;而在于工具体系比较成熟&#xff0c;像代码格式化、压缩、加密解密、时间处理、图片与图标处理这类高频需求…...

低成本改造指南:将X96 Max+电视盒子转变为多功能Armbian服务器

低成本改造指南&#xff1a;将X96 Max电视盒子转变为多功能Armbian服务器 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, r…...

5种认知减负策略:2025年macOS效率工具深度测评与工作流优化指南

5种认知减负策略&#xff1a;2025年macOS效率工具深度测评与工作流优化指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 在数字化工作环境中&#xff0c;macOS菜单栏作为系统与用户交互的核心界面…...

如何通过MobaXterm中文版快速构建一体化远程管理环境

如何通过MobaXterm中文版快速构建一体化远程管理环境 【免费下载链接】Mobaxterm-Chinese Mobaxterm simplified Chinese version. Mobaxterm 的简体中文版. 项目地址: https://gitcode.com/gh_mirrors/mo/Mobaxterm-Chinese 远程管理工具的选择常常让系统管理员和开发者…...

解密Megatron-LM的显存魔法:从源码看recompute如何实现transformer大模型训练

Megatron-LM重计算技术深度解析&#xff1a;如何用显存优化训练千亿参数模型 当我们在谈论大模型训练时&#xff0c;显存管理就像高空走钢丝——稍有不慎就会因OOM&#xff08;内存溢出&#xff09;而崩溃。Megatron-LM作为NVIDIA开源的分布式训练框架&#xff0c;其重计算(re…...

零代码玩转华为云DeepSeek:用Witsy打造专属AI客服的完整避坑指南

零代码玩转华为云DeepSeek&#xff1a;用Witsy打造专属AI客服的完整避坑指南 当电商客服每天需要处理上千条重复咨询&#xff0c;当教育机构的课程顾问被基础问题占满工作时间&#xff0c;传统人工服务模式正面临前所未有的效率瓶颈。据行业调研数据显示&#xff0c;接入智能客…...

仪器设备显示屏选型:从交期与服务看适配价值

作为仪器设备厂商的客户品质人员&#xff0c;在显示屏选型与品质把关工作中&#xff0c;交期稳定性与全流程服务能力&#xff0c;是影响设备研发进度、量产交付与长期运维的核心要素&#xff0c;仪器设备行业研发迭代快、量产周期紧、售后要求高&#xff0c;显示屏供应商能否稳…...

DeepSeek-OCR-2性能压测报告:深求·墨鉴单节点QPS与延迟实测分析

DeepSeek-OCR-2性能压测报告&#xff1a;深求墨鉴单节点QPS与延迟实测分析 1. 引言&#xff1a;为什么需要性能压测&#xff1f; 最近&#xff0c;一款名为“深求墨鉴”的文档解析工具在技术圈里悄悄火了起来。它基于DeepSeek-OCR-2引擎&#xff0c;号称能将扫描文档、书籍图…...