用GDB远程调试运行于QEMU的程序
1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 测试环境
本文使用 Ubuntu 16.04.4 LTS + QEMU
环境进行调试。
3. 用 GDB 调试 QEMU 内程序
3.1 编写用来调试的程序
我们用 ARM32
来进行调试,下面是用来测试的程序代码:
/* * start.S */.text.global _start
_start:mov r0, #81:b 1b
编译用的 Makefile
:
CROSS_COMPILE ?= arm-linux-gnueabi-CC := ${CROSS_COMPILE}gcc
LD := ${CROSS_COMPILE}gcc.PHONY: all cleanall: test.elftest.elf: start.S$(CC) -nostdlib -g -o $@ $<clean:-rm -fr test.elf
3.2 工具安装
3.2.1 安装 arm-linux-gnueabi-gcc
sudo apt-get install gcc-arm-linux-gnueabi
3.2.2 安装 gdb
sudo apt install gdb-multiarch
gdb-multiarch
支持多种目标架构,另外一种选择是交叉编译 ARM 平台的 gdb ,本篇不做展开。
3.2.3 安装 qemu
sudo apt-get install qemu
3.3 编译和调试
3.3.1 编译
将 start.S
和 Makefile
放在同一目录下,然后运行:
make
将在目录下生成 test.elf
文件。
3.3.2 调试
我们调试程序,需要启动两个终端。第一个终端,QEMU
模拟 ARM 开发板 vexpress-a9
环境,用来运行程序 test.elf
:
sudo qemu-system-arm \-M vexpress-a9 -m 512M \-kernel test.elf -S -s -nographic
其中 -s
选项告诉 qemu-system-arm
启动内置的 gdb-server
,监听在 TCP 端口 1234
上;-S
选项告诉 qemu-system-arm
不要启动程序执行,等待 gdb
的指令。目前程序 test.elf 处于停止状态, qemu-system-arm
等待 gdb 客户端连接它,发送进一步的指令。现在用 gdb
连接 qemu-system-arm
:
$ gdb-multiarch test.elf
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test.elf...done.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
_start () at start.S:5
5 mov r0, #8
(gdb) info registers
r0 0x0 0
r1 0x0 0
r2 0x0 0
r3 0x0 0
r4 0x0 0
r5 0x0 0
r6 0x0 0
r7 0x0 0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
sp 0x0 0x0
lr 0x0 0
pc 0x10098 0x10098 <_start>
cpsr 0x400001d3 1073742291
(gdb)
现在我们可以用 gdb
来调试程序 test.elf
了。当前状况下,gdb
和 qemu-system-arm
的关系可以用下图来描述:
-------------------------
| qemu-system-arm |
| ----------------- | -----
| | gdb-server:1234 |<---|-----> | gdb |
| ----------------- | ------------------------------
4. 用 gdb 调试内核
# 启动内核,等待 gdb 的连接
sudo qemu-system-arm \-s -S \-M vexpress-a9 -smp 4 -m 512M \-kernel zImage -dtb vexpress-v2p-ca9.dtb \-nographic \-append "root=/dev/mmcblk0 rw rootfstype=ext4 console=ttyAMA0" -sd rootfs.img
# 调试内核
gdb-multiarch vmlinux
5. 参考资料
https://www.qemu.org/docs/master/system/gdb.html
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
用GDB远程调试运行于QEMU的程序
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 测试环境 本文使用 Ubuntu 16.04.4 LTS QEMU 环境进行调试。 3. 用 GDB 调试 QEMU 内程序 3.1 编写用来调试的程序 我们用 ARM32 来进行调试…...
![](https://img-blog.csdnimg.cn/29bbf845390248bb827d571743d5c94f.png)
20 堆排序
文章目录1 堆排序的概念2 堆排序基本思想3 堆排序步骤图解说明4 堆排序的代码实现1 堆排序的概念 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn)…...
![](https://img-blog.csdnimg.cn/6e6e185e352248529350b2b28a8b5e5c.png)
2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享 很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不…...
![](https://www.ngui.cc/images/no-images.jpg)
分片策略(二)
分片策略 基本概念 分片键 用于分片的字段,是将数据库或表拆分的字段,比如,我可以使用user_id作为分片键将用户数据分到不同的表中,这里的user_id就是分片键,除了这种单字段分片,ShardingSphere还支持多…...
![](https://img-blog.csdnimg.cn/867a269cfc8d477d96be9ae28aa312aa.png)
Qt之调色板类QPalette的使用
文章目录QPalette调色板类前言代码知识点讲解QPalette调色板类 前言 Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照…...
![](https://img-blog.csdnimg.cn/7388fc9f642243ecaec1d89e48334179.png)
Kotlin 32. Kotlin 多语言支持
Kotlin 多语言支持 对于 Kotlin 来说,当我们新建一个项目时,会默认在 values/ 文件夹下,生成一个 strings.xml 文件。比如说, <resources><string name"app_name">exampleNewProject</string> <…...
![](https://img-blog.csdnimg.cn/img_convert/c7913e361b09e471aea477ea5122070a.png)
【Flutter入门到进阶】Dart进阶篇---DartVM单线程设计原理
1 虚拟机的指令执行设计 1.1 虚拟机的分类 基于栈的虚拟机,比如JVM虚拟机 基于寄存器的虚拟机,比如Dalvik虚拟机 1.2 虚拟机的概念 首先问一个基本的问题,作为一个虚拟机,它最基本的要实现哪些功能? 他应该能够模拟…...
![](https://www.ngui.cc/images/no-images.jpg)
Dem和NvM(NVRAM Manager)的交集
NVRAM(NvM)提供了在NVRAM中存储数据Block的机制。 NVRAM Block(最大大小取决于配置)被分配给Dem,并由Dem实现事件状态信息和相关数据的永久存储(例如通电复位)。 ECU 状态管理器(Ec…...
![](https://www.ngui.cc/images/no-images.jpg)
AI神经网络CNN/RNN/DNN/SNN的区别对比
@版权声明: 本文由 ChatGpt 创作; BiliBili: https://www.bilibili.com/video/BV17D4y1P7pM/?share_source=copy_web&vd_source=6d217e0ff6387a749dc570aba51d36fd 引言 随着人工智能技术的发展,神经网络作为人工智能的核心技术之一,被广泛应用于图像识别、语音识别、…...
![](https://img-blog.csdnimg.cn/74e994f9715a4b5bbb6290219eeab7c5.png#pic_center)
【JavaWeb】一文学会JPA
✅✅作者主页:🔗孙不坚1208的博客 🔥🔥精选专栏:🔗JavaWeb从入门到精通(持续更新中) 📋📋 本文摘要:本篇文章主要介绍JPA的概念、注解实现ORM规范…...
![](https://img-blog.csdnimg.cn/6bb48ab828a44ca1a4c59e7a67d65305.png)
【安卓逆向】APK修改与反编译回编译
【安卓逆向】反编译修改APK回编译使用工具流程步骤Apktool相关安装与使用常用命令备查APK签名命令备查实战练习反编译查看修改的地方使用Apktool反编译得到产物文件夹并进行修改回编APK实用场景在日常开发我们可能需要替换某些资源或者修改某些代码,但是我们没有源码…...
![](https://www.ngui.cc/images/no-images.jpg)
【计组笔记04】计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射
这篇文章,主要介绍计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射。 目录 一、双口RAM和多模块存储器 1.1、存取周期 1.2、双口RAM 1.3、多模块存储器...
![](https://www.ngui.cc/images/no-images.jpg)
英语基础-状语的应用
1. 非谓语动词作状语 1. 试着翻译下列句子 当他是一个小孩子的时候,他很喜欢玩电脑游戏。 When he was a child, he liked playing computer games. 如果他通过考试,他妈妈就会给他买一台新电脑。 If he passes the examination, his mother will b…...
![](https://www.ngui.cc/images/no-images.jpg)
发表论文需要注意的两点(建议收藏)
在学习人工智能的过程中,论文有着重要的作用,无论是深入学术科研,还是毕业找工作,都离不开发表论文这一步骤,所以今天就和大家分享一些关于论文发表的经验,希望对大家有所帮助。 为什么要早点发表论文&…...
![](https://www.ngui.cc/images/no-images.jpg)
ISTQB-TM-大纲
1. 测试过程 1.1 简介 在 ISTQB 软件测试基础级认证大纲中已描述了基本的测试过程包括以下活动: 计划和控制分析和设计实施和执行评估出口准则和报告测试结束活动 基础级大纲认同这些活动虽然有逻辑顺序,但过程中的某些活动可能重叠,或并行…...
![](https://img-blog.csdnimg.cn/89ab71e3fe3d41f497b92fe4737005ba.png)
Java SPI 机制详解
在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。 为了实现在模块装…...
![](https://www.ngui.cc/images/no-images.jpg)
腾讯前端经典react面试题(附答案)
React 性能优化在哪个生命周期?它优化的原理是什么? react的父级组件的render函数重新渲染会引起子组件的render方法的重新渲染。但是,有的时候子组件的接受父组件的数据没有变动。子组件render的执行会影响性能,这时就可以使用s…...
![](https://img-blog.csdnimg.cn/89a81f57f230444ba2f6215837734a53.png)
Go语言基础(十五):垃圾回收机制(三色标记)
文章目录一、标记清除(三色标记)大致原理1、标记细节2、root对象二、垃圾回收触发机制垃圾回收(Garbage Collection),是一种自动管理内存的机制。传统编程语言(如C/C)需要开发者对无用内存资源进…...
![](https://www.ngui.cc/images/no-images.jpg)
一文了解build.gradle配置
Gradle 参考官方文档:https://developer.android.com/studio/build?hlzh-cn#groovy settings.gradle 存放于项目根目录下,此设置文件会定义项目级代码库设置,并告知 Gradle 在构建应用时应将哪些模块包含在内 接下来将以一个简单的 settin…...
![](https://img-blog.csdnimg.cn/img_convert/64f060e121742d8ffa083c0f5529fc5f.png)
【Redis 高级】- 持久化 - RDB
【Redis 高级】- 持久化 - RDB 👑什么是持久化呢? 那当然是够持久呀,这个持久如果在你不主动去删除的情况下,它就一直存在的。 🎷那么这有什么用呢? 举个栗子:我们在用 PowerPoint 在写价值 …...
![](https://img-blog.csdnimg.cn/bb98f93411ea4d3081f0c23447c4369e.png)
SpringSecurity的安全认证的详解说明(附完整代码)
SpringSecurity登录认证和请求过滤器以及安全配置详解说明 环境 系统环境:win10 Maven环境:apache-maven-3.8.6 JDK版本:1.8 SpringBoot版本:2.7.8 根据用户名密码登录 根据用户名和密码登录,登录成功后返回Token数据…...
![](https://img-blog.csdnimg.cn/0e7ff294f2bf42738398e889aa5dab6f.png)
详解制造业业务数据模型
业务数据在企业数字化转型或单体应用的开发中都是至关重要的。站在跨业务跨部门的企业数字化转型角度,离不开业务架构的设计,详细的业务领域和业务数据模型是后续应用架构和数据架构的必要输入。站在单部门单场景的信息化角度,应用程序的需求…...
![](https://www.ngui.cc/images/no-images.jpg)
BigDecimal使用注意避坑
目录一. BigDecimal的初始化精度丢失问题二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常三. 不要使用BigDecimal的equals方法比较大小, 否则可能会因为精度问题导致比较结果和预期的不一致在java.math包中提供了对大数字的操作类,用于进…...
![](https://img-blog.csdnimg.cn/4569f5d1b6a24c3b8ad60789371c8902.png)
windows环境下,vue启动项目后打开chrome浏览器
前言:关于vue启动后打开chrome浏览器,我查了很多资料,方案如下: 1、增加环境变量BROWSER为chrome(试了没效果) 2、设置系统的默认浏览器为chrome(应该可以,但没试;因为…...
SpringBoot2.X整合ClickHouse项目实战-从零搭建整合(三)
一、ClickHouseSpringBoot2.XMybatisPlus整合搭建 二、需求描述和数据库准备 三、ClickHouse统计SQL编写实战和函数使用 四、ClickHouseSpringBoot2.X案例-基础模块搭建 controller/request层 mapper层 model层 service层 五、ClickHouseSpringBoot2.X案例-数据统计接口 …...
![](https://img-blog.csdnimg.cn/505bfdad61e746389519a7d39b6bf99f.gif#pic_center)
学海记录项目测试报告
⭐️前言⭐️ 本篇文章是博主基于学海记录的个人项目所做的测试报告,用于总结运用自动化测试技术,应用于自己的项目。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录…...
![](https://img-blog.csdnimg.cn/9eb661455602407886e00e0eb7465049.png)
【1792. 最大平均通过率】
来源:力扣(LeetCode) 描述: 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你…...
![](https://img-blog.csdnimg.cn/afe1a03db90b4af7b4b4a791c5ea765d.png)
言简意赅+图解 函数传参问题(传值、传地址 500字解决战斗)
1、传值 2、传地址 不论是传值,还是传地址,形参都是对于实参的一份拷贝 下图为按值传递进行交换: 形参left拷贝一块新空间,形参right拷贝一块新空间 下图为按指针传递进行交换 形参left拷贝一块新的空间,形参right…...
![](https://img-blog.csdnimg.cn/9e9f0b65a57440379fb6c96af9d4b90a.png)
UML-时序图以及PlantUML绘制
介绍 时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息…...
![](https://img-blog.csdnimg.cn/60e0a2a45e5d43b7bc7253a7f945c2b5.png)
【Redis】Redis 有序集合 Zset 操作 ( 简介 | 查询操作 | 增加操作 | 删除操作 | 修改操作 )
文章目录一、有序集合 Zset二、查询操作1、查询 Zset 所有数据2、查询 Zset 所有数据和评分3、查询指定评分范围的 Zset 数据4、查询指定评分范围的 Zset 数据并从大到小排序5、统计指定评分范围的 Zset 数据个数6、查询指定元素在 Zset 有序集合中的排名三、增加操作1、向 Red…...
![](https://img-blog.csdnimg.cn/880ada0935f34d73a3ba44414bb3d15c.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQkFJRk9M,size_17,color_FFFFFF,t_70,g_se,x_16)
手机网站商城源码/境外电商有哪些平台
结束线程有以下三种方法: (1)设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止 (2)使用interrupt()方法中断线程 (3)使用stop方法强行终止线程࿰…...
![](https://img-blog.csdnimg.cn/img_convert/e7f257998c5010cd3d1be7ee992ae8e9.png)
wordpress解决速度/重庆排名seo公司
1、什么是变量a1,其中 a 就是变量名称,1 就是它的值。在程序运行过程中,变量的值一般都会发生改变,内存中会专门开辟一段空间,用来存放变量的值,而变量名将指向这个值所在的内存空间。与变量相对的就是常量…...
![](https://img-blog.csdnimg.cn/20200722231332389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JlZV9BSQ==,size_16,color_FFFFFF,t_70)
mac 阿里云 wordpress/大数据培训包就业靠谱吗
linux命令大全一文搞定Linux必备命令 工作了几年,总结了Linux必备命令及相应命令的使用方法,点击下方【Linux命令】,可知使用方法: www.Linux命令.com...
![](/images/no-images.jpg)
做网站是否过时了/国内最新新闻大事
简明笔记 来源:PPoPP 2010; 关键字:Optimistic Concurrency, Snapshot Isolation; 个人理解:主体: A current realxed balance AVL tree algorithm; 基于:由事务内存改编的乐观并发控…...
![](https://img-blog.csdnimg.cn/20200923070043298.png)
哪个网站做批发最便宜吗/长春网站优化服务
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制。它提供了很多的JSON数据处理方法、注解,也包括流式API、树模…...
![](/images/no-images.jpg)
实训网站建设的总结/推广策略包括哪些内容
冬天快到了。蚂蚁和蟋蟀在各自忙着准备过冬食物。蚂蚁从早忙到晚,忙忙碌碌地搬运着,而蟋蟀则悠哉游哉,仍然在不停地歌唱着。 蚂蚁问:“你怎么不抓紧准备冬天的粮食?” 蟋蟀说:“你没有听见我在唱歌吗&#…...