qemu-基础篇
文章平均质量分 69
qemu 基础篇
tyustli
不抛弃,不放弃
展开
-
【GDB】使用 GDB 自动画红黑树
前面几节中介绍了 gdb 的 python 扩展,参考并且 python 有 graphviz 模块,那么可以用 gdb 调用 python,在 python 中使用 graphviz 绘图。原创 2023-09-30 10:03:51 · 180 阅读 · 0 评论 -
【GDB】用 python 扩展 gdb
gdb.parse_and_eval 接受一个字符串作为表达式,并以 gdb.Value 的形式返回表达式求值的结果。那么 gdb.parse_and_eval(‘i + 1’) 的结果是一个 gdb.Value 的实例,其 value 属性的值为 4。如果想把输出结果转存到字符串中,设置 to_string 为 True:gdb.execute(cmd, to_string=True)。当我们通过 python 接口跟这些值打交道时,gdb 会把它们包装成一个 gdb.Value 对象。原创 2023-09-29 21:10:17 · 940 阅读 · 0 评论 -
【GDB】常用操作
不过在调试真正的程序时,watch 断点非常实用,尤其当你对相关代码不熟悉时。另外结合 debugger 运行时修改值的能力,你可以在值变化的下一刻设置目标值,观察走不同路径会不会出现类似的问题。一个办法是给内存的分配和释放加上日志,再编译,然后重新运行程序,谋求复现内存泄露的场景。也即是说,就算不退出 gdb,每次运行的也会是当前最新的版本。若如果用 print 大法,就在 binary_search 中插入几个 print,运行后扫一眼,看看 target=5 的时候运行流是怎样的。原创 2023-09-29 17:11:59 · 161 阅读 · 0 评论 -
【GDB】 command 命令
这样会提示你输入你要执行的命令,以 end 结束。这个 bread_id 就是用 info b 打印出的结果,其实就是当前已经设置的断点序号。2 个断点都加了 command 命令。当断点被触发时,这些命令会被执行,这样的好处是不需要手动敲 c 来将程序继续执行下去,方便调试。command 命令是一个很好用的调试命令,它配合断点使用,可以在指定的断点执行预先设置的命令。在断点 1 设置了命令。在断点 2 设置了命令。原创 2023-09-29 11:59:21 · 301 阅读 · 0 评论 -
【GDB】命令脚本
另外 gdb 还提供了很多输出命令。比方说 echo 命令,如果仅仅是输出一段文本,echo 命令特别方便。此外还有和 C 语言很相似的支持格式化输出的 printf 命令,等等。因为这样做会使 gdb 按照相应的脚本语言去解析命令脚本,结果自然是不对的。首先对于命令脚本的命名,其实 gdb 没有什么特殊要求,只要文件名。脚本文件的注释也是以 # 开头的,这个同很多其它脚本语言都一样。命令脚本:新建一个文件。python 文件内容。编译并调试 C 代码。编译并调试 C 代码。原创 2023-09-27 22:14:08 · 269 阅读 · 0 评论 -
【GDB】自定义命令
.gdbinit 文件的使用示例 脚本中输入如下内容运行https://blog.csdn.net/weixin_41572450/article/details/124883629原创 2023-09-27 21:33:38 · 145 阅读 · 0 评论 -
【GDB】 .gdbinit 文件
这个文件,并把它的内容作为gdb命令进行解释,所以如果我把脚本命名为。gdb 在启动的时候通常想加入一下自己的命令,例如。gdb 在启动的时候,会在你的当前工作目录下查找。,这样在启动的时候就会处理一些你常用的命令。1、在/home/tyustli 下添加一个。(即你要Debug的目录)下,同样添加一个。实际使用时,会存在一个问题,比如你需要在。写代码, 因此,你想在当前目录下添加。, 默认GDB初始化时会调用这个文件。新建一个 shell 脚本。, 然后调用 GDB。原创 2023-09-27 21:15:56 · 772 阅读 · 0 评论 -
【GDB】常用命令
GDB 常用命令原创 2023-09-29 09:54:21 · 218 阅读 · 0 评论 -
qemu-基础篇——链接脚本常用命令
一般而言, 某 section 的 VMA == LMA. 但在嵌入式系统中, 经常存在加载地址和执行地址不同的情况: 比如将输出文件加载到开发板的 flash 中 (由 LMA 指定), 而在运行时将位于 flash 中的输出文件复制到 SDRAM 中 (由 VMA 指定)。链接器脚本中的 KEEP 语句将指示链接器保留指定的节,即使其中没有引用任何符号。后,链接器可能将某些它认为没用的 section 过滤掉,此时就有必要强制让链接器保留一些特定的 section,可用 KEEP() 关键字达此目的。原创 2023-05-10 23:06:06 · 949 阅读 · 0 评论 -
qemu-基础篇——ARM 链接过程分析
data.o 里面只有 .data 段的数据,并且长度为 8 个字节,小端模式,的确包含了 01000000 以及 02000000 两个全局变量的数据。在链接之前并不知道数据的具体数值,也不知道调用函数的函数位置,因此事先会把不知道的信息空出来,等到链接的时候再合并。可以看到链接后的 test 文件的 .text,.data,.rodata,和 .bss 等段的 size 是多个 .o 文件的和。变量的赋值时通过如下汇编语句实现,可以看到变量的值都是 0,后期链接器会将这两个值改为真正的。原创 2023-05-09 20:52:40 · 1011 阅读 · 0 评论 -
qemu-基础篇——链接脚本
例如下述的嵌入式 C 代码,显然全局变量 test_data1 在编译成 bin 的时候是烧写进 flash 的,但是程序运行起来之后 a 的数据是需要加载进 ram 的,因为 a 是一个变量,不排除程序运行过程中代码会改变他的值。因此 flash 会存放他的初始值,运行的时候从 ROM 加载到 RAM,他在 ROM 中的地址是 LMA,在 RAM 中的地址是 VMA。所有的函数和全局静态变量都处于 defined 的状态,在输入文件中引用的每个未定义的函数或全局变量都将成为一个未定义的符号。原创 2023-05-09 20:50:29 · 1034 阅读 · 0 评论 -
qemu-基础篇——程序编译过程
高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如 C,C++,Java,另一种是解释型语言,例如 Python、Ruby、MATLAB 、JavaScript。注意:目标文件已经是最终程序的某一部分了,但是在链接之前还不能执行。链接器链接后生成的最终文件为 ELF 格式可执行文件,一个 ELF 可执行文件通常被链接为不同的段,常见的段譬如. text、.data、.rodata、.bss 等段。原创 2023-05-07 22:42:59 · 1366 阅读 · 0 评论 -
qemu基础篇——VSCode 配置 GDB 调试
qemu 启动选项多了 -s -S ,表示启动之后就 stop 等待 GDB 连接,在启动调试之前先启动 qemu ,让其等待 GDB 连接。上一节中直接使用 GDB 命令行调试,本节介绍如何使用 VSCode 来进行调试。选择 Node.js,此时在当前工作区域会新建一个 launch.json 文件。如果找不到 Node.js 模块,使用如下命令安装。Node.js 安装。原创 2023-10-14 20:35:13 · 2296 阅读 · 0 评论 -
qemu-基础篇——GDB 常用调试命令
GDB 常用调试命令原创 2023-05-07 22:39:30 · 641 阅读 · 0 评论 -
qemu-基础篇——arm 裸机调试环境搭建
qemu 启动与调试原创 2023-05-02 09:33:22 · 1395 阅读 · 0 评论 -
qemu-基础篇——安装
qemu 安装原创 2023-05-02 09:27:54 · 1885 阅读 · 0 评论