操作系统实战 45 讲
彭东
网名 LMOS,Intel 傲腾项目关键开发者
65203 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 60 讲
尝尝鲜:从一个Hello到另一个Hello (2讲)
特别放送 (1讲)
操作系统实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

用户故事 | 用好动态调试,助力课程学习

分析过程
打包传输hd.img到mac
重新制作hd.img
编译生成“带调试符号的elf文件"
修改编译选项
修复bug
使用GDB和QEMU动态调试Cosmos
需要系统学习
内核实验复杂
理解第二十六课的代码
理解第十三课的代码
工作六年
目前负责安全产品的研发工作
在网络安全行业从事技术工作
如何通过动态调试验证grub镜像文件的加载过程
制作“带调试符号的elf文件"的详细步骤
Cosmos调试思路
学习经验
学习目标
自我介绍
leveryd:用好动态调试,助力课程学习

该思维导图由 AI 生成,仅供参考

你好,我是 leveryd。
先做个自我介绍,我在网络安全行业从事技术工作,目前在负责安全产品的研发工作,工作六年。
虽然在研发工作中,我们通常是遇到什么问题就去查,边查边学。虽然这样的学习方式能快速解决问题,但有时候这种方法也不灵,比方说学习语义分析时,就必须要把词法分析、语法分析先学了,一通搜索、查阅、汇总和学习,回头一看,需要花费的时间和精力还是不少的。
显然,只靠自己在网上搜索,学到的常常是零零散散,效率太低。尤其是和工作的关联程度很高的必修知识,我觉得不太适合边查边学,更需要系统学习。结合自己的工作需要,今年年初的时候,我给自己安排了近期学习计划,定下了相应的学习的优先级。
其中,补充操作系统的专业知识就是高优先级的一项。近期学习《操作系统实战 45 讲》的过程中,我也跟着课程内容开始动手实践,还在课程群里分享了自己的调试经验。接到 LMOS 老师的邀请,今天我就和你聊聊我是怎样学习这门课程,以及我是如何调试课程代码的。

我是怎么学习《操作系统实战 45 讲》的

根据我的学习需求,我给自己立下了两个学习目标:
第一,理解第十三课的代码:第十三课之前的内容包括了整个机器初始化过程;
第二,理解第二十六课的代码:比第十三课内容多了“内存”和“进程”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了作者在学习《操作系统实战45讲》课程中使用动态调试的经验。作者分享了使用GDB和QEMU进行动态调试的步骤,以及制作带调试符号的elf文件的详细步骤。通过分析GRUB头结构和Cosmos.eki文件头信息,作者验证了程序加载和执行的过程,解决了关于代码加载位置和CPU模式的疑问。文章强调了动态调试在技术学习和问题解决中的重要性,为读者提供了实际操作方法和调试案例。通过本文,读者可以快速了解动态调试的实际应用和操作技巧,对技术学习和问题解决具有一定的借鉴意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • Geek_504185
    置顶
    需要添加-g 的地方如下: 1:initldr/build/krnlbuildcmd.mh文件中 BTCFLGS ,CFLAGS,CPPFLGSLDS三处需要添加-O0 -g 2:外层build文件夹里的pretreatment.mkf的CPPFLGSLDS后面也添加-O0 -g 编译要就可以安装文章中操作边调试边显示代码了

    作者回复: 是的,感谢分享

    2021-12-30
    1
  • 月鸟
    我是板凳! 千呼万唤始出来,等这篇调试等了3个星期了! 感谢你!

    作者回复: 哈哈 赶紧试试

    2021-12-17
    2
    5
  • 苏流郁宓
    很受用

    编辑回复: 加油

    2021-12-17
    2
    3
  • 月鸟
    如果大家按照作者的详细步骤操作时出现如下之类的问题: warning: No executable has been specified and target does not support determining executable automatically. Try using the "file" command. /etc/gdb/gdbinit:3: Error in sourced command file: Remote 'g' packet reply is too long (expected 308 bytes, got 608 bytes): 0000000000000000685301020080ffff0000000000000000ac2d00020080fffffe000000000000000000000000000000b0ff08000080ffff88ff08000080ffffff0000000000000000000000000000000000000000000000b025010000000000000000000000000000000000000000000000000000000000685301020080ffffe52d00020080ffff4600200008000000100000001000 这个问题是GDB调试64位Kernel时才有的,解决的方法是在进行gdb操作前先在(gdb)后面执行如下语句: (gdb) set architecture i386:x86-64:intel (gdb) target remote:1234 Remote debugging using :1234 (gdb) symbol-file Cosmos/build/Cosmos.elf Reading symbols from Cosmos/build/Cosmos.elf... (gdb) b *0x04000000 Breakpoint 1 at 0x4000000 (gdb) b *0x04000068 Breakpoint 3 at 0x4000068 (gdb) c Continuing. 玩吧!

    作者回复: 6666

    2021-12-18
    2
  • 摘星
    做完上面流程后 最后使用 qemu-system-x86_64 -drive format=raw,file=hd.img -m 512M -cpu kvm64,smep,smap -s 这个命令,qemu启动了,到grub菜单几秒后 依然弹出 错误提示:"My computer is not support ACPI" 啊? 我已经确定那个init_acpid函数已经注释了,也按照步骤 将hd.img更新了。

    作者回复: 可能是没做对

    2022-06-08
  • info all registers 怎么看不到cr0寄存器,搜索了一圈,也没找到gdb能显示cr0这一类控制寄存器的,请教下上图gdb这个怎么出来的?
    2022-03-27
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部