- 博客(463)
- 资源 (44)
- 收藏
- 关注
原创 【Linux】内核全量函数添加日志打印摸索
1、操作系统在空载时要把函数调用次数非常多的注释掉,这里打印时不能带进程名称,高执行概率函数不同进程执行到的概率也很高,不然操作业务会增加卡死的概率;4、验证时先空载,然后添加业务验证,增加业务的验证要慢慢增量,不然不好多文件二分查找定位,这其实很难,得看运气;3、验证时少看代码基于多个文件一起验证,内核文件太多,看代码来不及,偶尔看下代码是可以的;8、drivers目录25255个文件,验证还没找到一个比较快的方法。5、验证时先验证框架,把框架中日志打印太多的注释掉,不然影响内核验证性能;
2024-08-19 22:10:01
234
原创 【LINUX】小工具降耦合,全内核函数插入宏摸索测试中。。
4、最后插入头文件包含,开始本来是在原来C文件里边#include最后一个后边插入,实际上不行,因为有的C文件最后百分之15左右也会有#include包含,到后边直接简单粗暴直接在第2行后插入,这能解决98%左右的问题,还有些使用的/**/多行注释的,插入了因为被注释掉了没有用,也不行;3、用的这个手段,好像大概意思是找到函数所在的行,向后10行中找第一个{,函数实现的时候会有实参列表啥的,实际上是把所有写入到 leftCurlyBracket.txt,所以这里用到>>
2024-08-12 22:18:27
572
原创 [git]error: invalid path ‘drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c‘
yes。
2024-07-30 17:25:43
456
原创 【linux】在多核CPU下,好像看到不同进程在不同CPU调度
开始想像的是操作系统上层的应用层创建文件,写入文件,创建目录,写入目录,在内核层肯定会调用到ext4文件系统类型对应的文件创建,写入文件,创建目录,写入目录。但是现在的问题是我们要去找对应的这四个函数(其实最好是先只找一个,找到一个后,其他三个就比较容易了),当时根据函数名字猜测会不是是这个数据结构。其实摸索syscall文件系统操作,本意是想找到内核文件系统中文件的创建,写入,目录创建,目录写入这样的流程。测试文件写,首先建立一个长时间下载的进程,时间太短容易退出,并且这个操作会写入文件。
2024-07-25 11:08:33
584
原创 【Linux】syscall sys_write流程摸索
到这张图的时候,599行已经执行了,在603行函数里的打印日志未打印出来,应该是走601行代码了。不是的,在实际里边是N多进程在不断切换,如果在打印日志里呈现的话,看过日志打印信息后,一般会生活不能自理。而在日志里看直接跳到call_write_iter这个函数了,中间有点奇怪。,开始我想,都打印这样详细的日志了,看内核源代码流程还不是轻松加愉快?日期,时间,当前文件所在代码目录,当前执行函数名,当前文件执行行号。基于这个缘故,我们在打印日志里添加了进程号信息。有了pid的这个参数后,看日志又方便了些。
2024-07-22 22:06:24
633
原创 【Linux】文件创建与写入系统调用流程摸索
第五行是搜索我们操作的文件名,看看在操作系统层面对文件的操作,内核里边源代码对应函数的打印的流程是否正确,因为有些函数同名函数很多,不一定是我们找到的,而且代码中函数里还有各种分支,判断等等,所以也有点点难度。第一行是打开日志输出(其实操作系统运行时日志是输出到/var/log/kern.log和/var/log/syslog里了,这也即是为什么我们老是去syslog文件搜索我们在内核源代码的打印信息);第二行是把字符串写入到一个文件,这个文件原来是没有的,其实就是创建文件,写入文件;
2024-07-19 11:06:41
391
原创 【Linux】SYSCALL_DEFINE4 openat执行流程摸索
在上一篇博客,我们基于pr_info这个内核类似c语言printf打印宏完成了打印,基本实现了自由开关打印,可以设定打印日志次数(代码写了,大概10行代码),在测试的时候发现居然还有意外收获,doge....从这个日志来看一共调用了1283次__do_sys_openat这个系统调用,注意1532这个行,也是跟日志能对上的。要注意,上边这日志量其实挺大,有兴趣的可以基于这个日志打印信息对照代码流程。但打印日志也有些不是文件操作的日志,需要注意下,对于学习是比较有用的。登录 - Gitee.com。
2024-07-18 13:34:49
939
原创 【LINUX】pr_info函数开发摸索
pr_info_self这里也可以扩展,不过这里的语法比较复杂,什么斜杠,fmt,双引号什么的,修改代码的时候要注意。2、打印次数,当前代码里边写的是1000次,其实可以根据传参动态修改打印日志次数,不过没有开发,只是大概展示了下;
2024-07-16 13:08:24
810
原创 【Linux】内核文件系统系统调用流程摸索
1、代码内存越界,就是前一阵子碰到的打印filename这个变量,一般会出调用栈,不过不太容易看得到,因为开机日志显示翻页太快,页面显示到后边就卡死,黑白屏;其实这种过程是挺有意思,有些书讲内核运行原理,如果再配套查看内核运行实时日志,这样会更有意思,因为书上的知识是死的,而操作系统是活的,是动态的。我们打印的pid,tgid就是从这里来的,然后只需要找到pid_t的数据类型就好了。2、第二种:好像进入到 busybox,可以手动打印些dmesg的日志,黑白屏;登录 - Gitee.com。
2024-07-10 10:06:10
313
原创 【linux】内核摸索心得
1、内核运行很快打印日志的位置要注意,平时运行linux是不显示日志的,但是要学习内核运行细节,则需要打开。10、修改的代码建议使用git这类配置管理工具管理,写日志要注意,大公司提交代码会有详细日志格式要求。2、内核代码量大阅读困难,有很多代码文件都是几大千行代码乃至更多。9、日志打印太多内核也起不来,如果能起来,操作系统运行也会卡顿。8、c语言使用不当,则容易导致内核起不来,比如指针,数组这类。18、发现问题,分析问题,查找资料,解决问题或者被问题解决。4、代码中宏的定义错宗复杂,宏宏嵌套。
2024-07-06 08:46:27
269
原创 【Linux】应用层创建XXX文件,文件系统调用可以查看到文件名
反过来想,那不是内核的问题,肯定就是我们这边写打印代码的问题了,并且系统也提示到出错的调用栈,那只能回归代码分析,一共没几行代码,这有点尴尬。基于这样的思路,实际上,我们是可以看到操作系统从应用层面的操作到内核层面的处理的接口,可以通过自己阅读代码,添加日志,看到内核代码的执行流程。然后再搜索日志文件syslog文件,可以看到与我们创建的文件名是一样的,这样表示我们的猜想和操作是正确的。从这里来看,跟我们修改的文件,函数,行号,打印的日志都能对应得上,那说明我们的修改是正确的。
2024-07-02 13:31:03
453
原创 【其他】这阵子虚拟机编译和重启次数太多后果
如果有在做同样操作或准备操作的人士也要注意下,可能也会有类似的问题,大量编译和乱搞内核对外面的宿主机估计也有影响,不过具体出问题的原因不太清楚,如果电脑还比较新,一般要么是重装下宿主机操作系统,或者重装下VM的操作系统,好像虚拟机使用久了多多少少会有些问题的,有些问题比较难解决,一般就是卸载重装这样;2、还有一个是现在的电脑是笔记本,时间有点久了(好像是18,19的HP),感觉性能有点着急,估摸着得尽量搞一台二手的台式机(台式机性能要好点,估计好些),继续搞,doge;加油加油,doge.
2024-06-29 08:35:32
144
原创 【LINUX】内核源码文件系统调用相关摸索
首先,先看看想测试那个系统调用,在应用层,如果使用C语言编程一般我们一来就是open函数,实际在测试的时候,直接用touch xxx.txt然后 echo "xxx" >> xxx.txt,这样就完成了文件创建和写文件的操作,那肯定会用到open的系统调用,但是有一个问题:从。不能正常起动的问题可以通过开机进入高级选项,选项里边选择较前面编译的可以启动的版本(比如:6.9.0+)就可以了,实在不放心直接使用6.8.0(内核未升级之间的版本就好了)。不过调用栈后边的代码,还不太懂。
2024-06-26 10:41:36
862
2
原创 【linux】6.9.0系统调用接口列表,一共644个
文件生成命令行:__NR_acct__NR_alarm__NR_bind__NR_bpf__NR_break__NR_brk__NR_chdir__NR_chmod__NR_chown__NR_clone__NR_close__NR_creat__NR_dipc__NR_dup__NR_dup2__NR_dup3。
2024-06-22 23:02:09
894
原创 【linux】内核源码TCP->IP->L2层函数调用继续摸索中
我们先从日志找找,看看有没有觉得有用些的信息(这里有个小插曲,wget这个命令主要是下载,因为要看一个包从TCP到IP再到L2的函数调用流程,要找的是包在内核的发送流程(有的会问,那乍不把包是如何封装的过程也搞上呢,这。注意,这个调用关系可能有问题。函数调用的层级很多。登录 - Gitee.com。登录 - Gitee.com。
2024-06-21 11:50:51
473
原创 【linux】操作系统使用wget下载网络文件,内核tcpv4部分运行日志
这上面的结果就是Connecting to ftp.sjtu.edu.cn (ftp.sjtu.edu.cn)|202.120.58.157|:443... connected.这里的信息。在搜索日志的时候,首先看到 sk->sk_daddr: 2637854922和sk->sk_dport: 47873。这样在操作系统应用层通地wget从网络下载文件的这个流程,在操作系统内核运行的一部分日志解析大概就是这样的。其实就是网络字节序和主机字节序的转换,在文件系统解析也经常会碰到这样的类似转换。
2024-06-18 11:40:34
994
原创 【linux】通过FireFox访问www.baidu.com,TCP协议部分日志
在/var/log目录增长比较快,内核速度有点快,我们添加打印日志,会导致日志增长比较快,过一阵子要清理下,或者使用df -h 瞅下磁盘空间。1、访问www.baidu.com之前先通过echo "" > /var/log/kern.log把原来内容清空,3、把kern.log 文件备份下:cp /var/log/kern.log /home(类似这样);昨天发现磁盘空间不够用,新挂载了一块磁盘,不过这个博客有点啰嗦。代码修改后,要重新编译内核,然后重启电脑(登录 - Gitee.com。
2024-06-16 12:41:28
676
原创 【linux】应用程序访问百度时,操作系统内核网络接口日志
在git操作的时候碰到一个小插曲:下载内核源代码是*.tar.gz,把解压后代码目录挪到/usr/src目录进行编译,后边发现一个问题,要修改代码,不太方便进查看修改代码差异,所以想把代码用git管理起来,但是代码目录已经编译过了,这个目录本身是不太git管理的,乍整呢?通过SourceInsight创建新的代码工程的时候,需要注意添加代码的目录在/usr/src/linuxxxxx目录,默认是没有的,需要手动输入下z:然后回车就会到根目录,再找usr/src/linuxxxxx目录就可以了。
2024-06-14 00:59:40
654
原创 【linux】给net/socket.c部分接口添加pr_info后运行情况
这也是一部分,不过从这里看出来,添加打印日志的地方不太好,另一个问题比较奇怪,操作系统在运行的时候,什么也没操作,操作系统也在不断的调用网络的接口。由于打印日志非常多,dmsg的缓冲区感觉不断被后边日志冲掉。
2024-06-13 17:30:50
534
原创 [linux]如何跟踪linux 内核运行的流程呢
上面这行代码添加主要是在显示日志的时候把当前文件名和函数信息带上,这样容易知道是哪个文件,哪个函数打印的日志,比较容易梳理代码运行的流程。内核执行速度是比较快的,本质上是一个死循环,打印日志的时候不能太多,可以多尝试就会明白。前面已经可以把内核编译出来,但是作为技术狗想看到内核是怎么运行的怎么办?
2024-06-12 13:36:58
280
原创 [linux]基于Ubuntu24.04原内核6.8.0升级到6.9.0
2、编译报错,在编译的过程碰到编译失败,不会像原来老的内核版本会报哪个文件哪行出问题,直接什么也没有,看不见(估计是方法不对),这个问题有点困扰,我直接apt update把内核升级,后边乱搞一通,不知怎么的这个问题又好了。3、机器性能不太好,编译可能比较耗时,一般是开始编译,然后跑出去搞其他事,或者看视频等等。1、编译的时候缺库,一般根据出错的原因百度或者其他搜索解决,这种问题容易些;
2024-06-11 12:17:15
1680
3
原创 [97编程世界冠军4K组]代码转化为js脚本后代码
由于 ts脚本需要编译,有些不怎么使用ts,比较麻烦,转为js后可以直接通过html导入,本地只需要两个文件,一个index.html和一个main.js,放在同一个目录,对于学习可能有些用。代码量少的话,本地浏览器打开,打断点或者加打印日志会比较方便(不过代码还是挺难,并且算法的代码好像被压缩过,变量命名没有可读性)。不过为了减少学习的成本,实际删除了很多代码,当前代码量大概930行左右。
2024-05-07 15:19:50
368
原创 这代码添加些调试手段。。。。
4、当前运行代码地址及分支:https://gitee.com/r77683962/Omniscent,分支:Only2Files。1、代码源头及演示:https://supersodasea.github.io/Omniscent/2、修改了些代码,减少和修改了些代码行方便阅读和调试,但是原代码有魔鬼数字,实在看不懂。3、源代码用到了些图形学相关知识;5、该视频未配声音。
2024-05-05 20:50:28
242
原创 [97编程世界冠军4K组]代码被转为ts脚本github代码如何在WIN10运行和调试
4、Omniscent-main.zip代码解压,然后使用webstorm打开解压目录(要注意被打开的目录里有src、types这些目录才对)6、打开根目录dist目录的index.html文件,点击右上角的Chrome图标,点击Play,就可以看到运行的3D界面了。File菜单->settings->Languages&Frameworks->node.js,然后使用自已安装的路径替换。编译完成在根目录下会生成dist、lib、node_modules目录。这个代码主要用到:three.js(3D库)
2024-04-28 23:03:07
598
原创 【JAVA】状态机及简单应用
实际上,状态机在网络底层开发用的比较多,另外,比如在项目菜单开的状态也可以使用,比如主页面,根据不同的用户操作进入不同的子页面(不同的状态),再根据用户的不同输入,再进入下一个子页面,这样就形成了一系统状态转换表,这个例子是比较简单的,实际开发中的比较复杂,当然,说的不一定对。3、当前如果是待付款状态,如果用户完成付款,当前状态就会转化为待发货状态;5、当前如果是待发货状态,如果仓库完成发货,当前状态就会转化为已发货状态;4、当前如果是待付款状态,如果用户取消订单,当前状态就会转化为初始状态;
2023-12-31 23:57:32
736
原创 红警1源代码下载,编译,单步调试操作步骤
红警1,源代码下载,编译,单步调试操作步骤。1、下载代码: https://gitee.com/r77683962/CnC_Remastered_Collection/repository/archive/master.zip 这里边的代码跟 https://github.com/electronicarts/CnC_Remastered_Collection.git 有很小的差别,其中工程文件被我修改了下,以及STARTUP.CPP这个文件也被修改了下,其他也可能有文件被修改,不过都是细节;
2023-12-29 16:54:15
924
chatserverclientepoll
2018-08-04
类everything java源码
2018-06-13
Orange's chapter8a修改后可以查看消息流程的版本
2018-04-05
chapter5_i
2018-03-13
clicks模拟鼠标键盘
2016-03-13
[97世界编程大赛4K组]ts代码运行展示.mp4
2024-05-05
dmesg_with_pr_info_add_file_function.log
2019-11-03
kernel start log.txt with log
2019-10-29
boot.zip Linux kerner grub 5.0.1压缩包
2019-09-14
30day 的07_day 添加了大屏显示1024*768,适配了中文显示
2019-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人