《学活Linux》第一讲——系统调用和VFS
《学活LINUX》 第一讲
系统调用和VFS
自确定《学活LINUX》课程详情以来,已有两周时间。相信很多格友们已经准备好GDK8,等待课程的开始。2023年7月22日,上周六晚,张老师刚刚参加完在京举办的K+大会,在八点准时开始了《学活Linux》第1讲,把“活”的Linux系统(GDK8)作为目标,使用内核调试器(挥码枪)将其中断到调试器,在调试器的帮助下,观察调用过程、执行现场。
建立对话
首先,张老师带大家将活的Linux系统——GDK8及调试器挥码枪与主机进行连接,后在主机端启动Nanocode。
由于挥码枪(内核调试器)通过USB接到了主机端,Nanocode便可以通过USB与挥码枪进行对话,因此在这里我们可以看到挥码枪的“自我介绍(PS:序列号在100以内的则是极其珍贵的挥码枪的第一批用户)”。
除此之外,我们还可以看到挥码枪与目标系统之间——GDK8——的对话。开始调试之后,挥码枪会通过ADI来和SOC建立对话,这种基于硬件的调试对话代表着今天我们和芯片对话的一种高级技术。芯片的实体只是黑乎乎的一块,若不借助特殊工具,我们无法与之建立对话。所以我们选择这种内核调试的方式,去获取芯片中的信息。
别跑了,停下来
至此,一切顺利。虽然挥码枪已与目标系统建立对话,但目标系统还在跑。接下来便通过挥码枪给目标系统Soc一个信号,告诉它:“ 别跑了,停下来。”
加载符号之前
用内核调试器截停目标CPU之后,张老师详细解释了Linux内核断下来后弹出的一系列信息,并演示了加载符号之前,在没有符号的情况下可以做的调试任务:用r命令观察用户程序寄存器、u命令作反汇编、rdmsr命令访问系统寄存器、dd命令观察内存原始数据等。
期间,张老师特别提到了一条著名的wfi(Wait for Interrupt)指令,并以疫情阶段在休息期间不敢脱下防护服、随时待命的大白们作喻,让大家可以瞬间理解wfi的含义及功能。
符号化调试
二进制的调试任务对一些程序员来说可能有几分不好理解,这时候就需要加载符号,使得广大从业者能够通过看源代码来实现高效调试。课程中张老师就逐步地演示了如何使用GDK8进行调试:准备符号文件→设置符号路径→执行.reload命令,(重新)加载符号文件(扫描文末二维码观看课程全部内容)。
K命令,你会吗?
加载符号文件之后,就可以看到模块列表;可以使用k命令看调用栈,观察软件的执行经过,看到它是从哪儿来;可以设置源文件搜索路径,根据执行经过,用.frame命令实现时光回溯,切换至真正的执行经历,即“活”代码……
张老师针对上述各功能进行了详细的演示及讲解,带大家一起上手操作GDK8的,一起读“活”代码,读CPU真正执行过的代码。
设置断点
从调试原理讲,软件断点有两种方式:软件断点和硬件断点。相较与安全大趋势冲突的软件断点,后者不需要修改代码空间,其原理为告诉目标Soc“我对这个地址感兴趣,等一下如果访问这个地址要停下来”。张老师也演示了用硬件断点命令设置断点的具体操作。
系统调用是内核空间对上提供服务的一种方法。它存在的意义是给应用程序提供服务以管理系统。那应用程序怎么调服务呢?便是执行特殊的svc指令。张老师在课程后半部分详细讲解了系统调用、系统服务表,演示了从用户空间到内核空间入口分发的过程。进入内核空间后,由于调用的是读文件,便转到了文件系统,即Linux下的VFS,对此,课堂中也进行了详尽的介绍(扫描文末二维码观看课程全部内容)。
质疑问难
通过张老师细致的讲解,加之对多个命令的实操演示,相信大家在听完这一讲内容之后,已经知道了“为什么要使用内核调试器?手中的GDK8套件是什么?能实现什么功能?怎么实现?”这些问题的答案。我们的课程助理也一直在线答复格友们的疑问,尽力让大家都跟得上张老师的调试进度,在听完课程之后真的有所学,有所成。
最后,非常感谢直播间和课程交流群的格友们对本次课程的喜欢和支持!
未加入课程交流群的朋友可以扫描下方二维码进群交流,获得更及时、更详尽的课程信息。没参与直播的朋友也可以扫描下方二维码观看回放,遇到问题进入微信群询问。下周六晚,哔哩哔哩“盛格塾”直播间继续《学活Linux》第二讲,张老师带你探索内核模块和驱动模型。
// 微信群二维码 //
该二维码8月3日前有效
直播间链接:http://live.bilibili.com/24576892
直播时间:2023年7月22日至9月2日
每周六 20:00 - 21:30
【盛格塾】
正心诚意,格物致知
以人文情怀审视软件,以软件技术改变人生
格友公众号
盛格塾小程序
扫描上方二维码或在微信中搜索“盛格塾”小程序
可以文章和有声读物
往期推荐
【小白学编程5】我的房子在哪儿?理解类型和变量
软件工程师的“硬功夫”
LINUX平台高级调试和优化(上海站)
有一个驱动叫刘姥姥
《学活Linux》第一讲——系统调用和VFS相关推荐
- 《学活Linux》第二讲——内核模块和驱动模型
<学活LINUX> 第二讲 内核模块和驱动模型 "各位观众晚上好.今天是7月29日,星期六,农历六月十二.欢迎收看<新闻联播>节目--台风'杜苏芮'强度减弱,受其寒流 ...
- 盛格塾暑期公益课程《学活LINUX》
学习LINUX有很多种方法,本系列课程以动手试验为主,取一个活的LINUX系统(GDK8)作为目标,使用内核调试器(挥码枪)将其中断到调试器,在调试器的帮助下,观察调用过程.执行现场,然后再由点扩展到 ...
- C++ 偏微分数值计算库_【动手学计算机视觉】第一讲:图像预处理之图像去噪...
我创建了一个知乎圈子:[平凡而诗意],专注于分享前沿技术.编程开发.实用工具等方面内容,感兴趣的可以首页搜索[平凡而诗意]加入我的圈子,让我们一起玩耍吧!QQ学习交流群:1077239487 平凡而诗 ...
- 两天学完Linux(第一天)
Linux 学习目标 能够知道什么是Linux系统以及它的应用场景 能够独立完成安装VMware虚拟机和网络配置 能够独立完成安装CentOS以及远程终端SecureCRT 能够熟练编写账户管理.用户 ...
- Linux第一讲(韩顺平)
开源.免费的操作系统,稳定.安全.处理并行. 用于开发:新浪.腾讯.搜狐.淘宝等门户网站等后台开发在Linux下开发的 Linux内核统一:redhat.fedora.红旗.suse.ubuntu等. ...
- linux 自学视频资料 第一讲:了解linux
这里虚拟机软件和linux的ISO文件大家可以在网上去可以去下载,这里我就不进行贴出来的. 首先这里是学得是寒冰老师所教linux视频资料,这里我先将寒冰老师的老师资料地址发出来: 关于视频讲座,请参 ...
- 深度优先搜索_0基础学算法 搜索篇第一讲 深度优先搜索
0基础学算法 搜索篇第一讲 深度优先搜索 相信绝大多数人对于深度优先搜索和广度优先搜索是不会特别陌生的,如果我这样说似乎你没听说过,那如果我说dfs和bfs呢?先不说是否学习过它们,至少它们的大名应该 ...
- 跟我学《JavaScript高程3》第一讲,视频课程,课程笔记
跟我学<JavaScript高程3> 第一讲:第1~3章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步 ...
- 从零学前端第一讲:前端开发是什么?给初学者有什么建议?
这里是修真院前端小课堂,本篇分析的主题是 [从零学前端第一讲:前端开发是什么?给初学者有什么建议?] 初识前端 1.前端开发是什么? 2.前端开发有前途吗? 3.前端开发哪里学? 4.前端发展 5.对 ...
最新文章
- Windows 2000/XP 注册表终极修改(转载)
- 如何发布ActiveX 控件
- 从产品角度聊一聊疯狂猜图为何这么火
- java数据类型常见面试题
- 数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0
- Windows 消息ID及定义大全
- YBTOJ洛谷P4869:出现位置(线性基)
- 锐捷ap怎么设置_新房装修网络布线方案一:AC+AP模式,弱电箱只放光猫和集成AC...
- LeetCode 1115. 交替打印FooBar
- 构造函数与new关键字
- IT技术人同献爱心行动倡议书
- Base64转BufferedImage
- SQLiteSpy 打开SqLite数据库文件
- QT error: assigning to ‘QListwidget *‘ from incompatible type ‘QListWidget *‘
- 微信小程序2D canvas绘制分享海报
- Python中三种表示NA的方式
- COB-ID的简单理解分析
- Java实战项目之 [含文档+PPT+源码等]精品基于ssm的足球联赛管理系统的设计与实现
- 培训机构让Github的含金量降低了?
- oracle amm和asmm,在Oracle中,什么是ASMM和AMM?