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

使用qemu运行与GDB调试内核

目录

一、前期准备

二、内核编译

三、QEMU与GDB

1、QEMU调试参数

2、gdb vmlinux


一、前期准备
  • 内核镜像:bzimage

  • gdb:x86_64

  • QEMU:qemu-system-x86_64

  • 前置知识:

    (1)内核编译

    (2)通过busybox制作initramfs

    (3)qemu运行内核

二、内核编译

1、设置调试选项:make menuconfig

make menuconfig  --->Kernel hacking  --->Compile-time checks and compiler options  --->DWARF version (Rely on the toolchain's implicit default DWARF version)  --->(X) Rely on the toolchain's implicit default DWARF version

2、内核编译:make -j$(nproc))

编译结果:

-rw-r--r--   1 root root   5371114  8月  9 14:03 System.map            // ELF文件 
-rwxr-xr-x   1 root root 307967696  8月  9 14:03 vmlinux			   // 符号映射表root@zh-vm:/home/WorkSpace/linux-5.14# file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, 
BuildID[sha1]=9a3f41d57e80433fed09832f9986319e48b13571, with debug_info, not strippedroot@zh-vm:/home/WorkSpace/linux-5.14# vim System.map 
... ...
ffffffff82b491e4 T __early_make_pgtable
ffffffff82b49410 T do_early_exception
ffffffff82b49452 T x86_64_start_reservations
ffffffff82b49472 T x86_64_start_kernel
ffffffff82b494f4 T reserve_bios_regions
ffffffff82b49547 T x86_early_init_platform_quirks
ffffffff82b495ca T x86_pnpbios_disabled
ffffffff82b495d5 t set_reset_devices
ffffffff82b495e5 t debug_kernel
ffffffff82b495f2 t quiet_kernel
ffffffff82b495ff t init_setup
... ...
三、QEMU与GDB
1、QEMU调试参数
  • cmdlink:nokaslr (禁用内核地址空间随机布局)
  • -S:开启时阻塞CPU执行
  • -s:开启GDB服务器,端口1234
  • -gdb tcp::1234 开启GDM服务器,端口可以自己指定
2、gdb vmlinux
  • target remote: 1234
  • break start_kernel
  • continue
  • step

运行的时候需要稍微改一下Makefile

root@zh-vm:/home/WorkSpace/build# cat Makefile 
initramfs:cd /home/WorkSpace/initramfs && find . -print0 | cpio -ov --null --format=newc | gzip -9 > /home/WorkSpace/build/initramfs.imgcpimage:cp /home/WorkSpace/linux-5.14/arch/x86_64/boot/bzImage ./bzImagerun:qemu-system-x86_64 \-kernel bzImage \-initrd initramfs.img \-m 512 \-nographic \-append "earlyprintk=serial,ttyS0 console=ttyS0 nokaslr" \-S \-s

运行测试:


http://www.lryc.cn/news/615205.html

相关文章:

  • 微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式
  • 用天气预测理解分类算法-从出门看天气到逻辑回归
  • Kubernetes(K8s)不同行业的典型应用场景及价值分析 原创
  • windows、linux应急响应入侵排查
  • Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)
  • 【2025】Datawhale AI夏令营-多模态RAG-Task1、Task2笔记-任务理解与Baseline代码解读
  • 金融通用智能体(Financial General Agent, FGA)的端到端解决方案
  • 机器翻译中的语言学基础详解(包括包括语法、句法和语义学等)
  • C语言:构造类型
  • TDengine IDMP 产品基本概念
  • 使用 Visual Studio 2022 编译 PortAudio 项目
  • occworld(1):论文解读
  • Ghost备份分区设置分包大小方法
  • 任务发布悬赏查询管理地推抖音快手微信任务赚佣金网站源码功能详解二开
  • 谷歌警告云存储桶劫持攻击
  • 让大模型 “睡觉”:把版本迭代当作人类睡眠来设计(附可直接改造的训练作息表与代码)
  • n沟道增强型mos管
  • B.10.01.6-DDD领域驱动设计:从理论到落地的完整指南
  • Typora上传图片保存到assets目录下
  • 第十四届蓝桥杯青少年组省赛 编程题真题题解
  • stm32项目(24)——基于STM32的汽车CAN通信系统
  • WinForm 复合控件(用户控件):创建与使用指南
  • 深入 FastMCP 源码:认识 tool()、resource() 和 prompt() 装饰器
  • sqli-labs通关笔记-第39关 GET数值型堆叠注入(手工注入+脚本注入两种方法)
  • 数据分析框架从 “工具堆砌” 转向 “智能协同”
  • 大语言模型提示工程与应用:提示工程-提升模型准确性与减少偏见的方法
  • node.js 零基础入门
  • 学习嵌入式第二十四天
  • Kotlin 协程线程切换机制详解
  • M8-11 RFID模块通过RS485转Profinet网关与PLC通信的配置指南