gdb调试时查看汇编代码

这篇具有很好参考价值的文章主要介绍了gdb调试时查看汇编代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在gdb中查看汇编代码,可以使用display命令或x命令。

以下是一个示例程序,我们以它为例来演示如何在gdb中查看汇编代码。

#include <stdio.h>  
  
int main() {  
    int a = 10;  
    int b = 20;  
    int c = a + b;  
    printf("c = %d\n", c);  
    return 0;  
}

我们使用gcc编译生成可执行文件。

gcc -g -o program program.c

然后,我们使用gdb启动程序。

gdb program
在gdb中,我们可以使用display命令查看汇编代码。以下是一个示例命令序列:
break main  
run  
display /i $pc

解释一下:

  • break main:在main函数入口处设置一个断点,以便我们可以在这里开始执行程序。
  • run:启动程序并运行到断点处。
  • display /i $pc:显示当前指令的汇编代码。其中,/i表示以汇编代码格式显示,$pc表示当前程序的计数器的值,也就是当前指令的地址。

在gdb中,可以使用x命令查看内存内容。以下是一个示例命令序列:

break *0x400510  
run  
x/x $pc

解释一下:

  • break *0x400510:在地址0x400510处设置一个断点,以便我们可以在这里开始执行程序。这个地址是main函数的入口地址。
  • run:启动程序并运行到断点处。
  • x/x $pc:使用x命令查看当前指令的地址和汇编代码。其中,/x表示以十六进制格式显示,$pc表示当前程序计数器的值,也就是当前指令的地址。

LDRSH是ARM汇编语言中的一个指令,它的全称是"Load Register Signed Halfword"。这个指令从内存中加载一个16位的半字(halfword),并将其存储到目标寄存器中。如果内存中的值是负数,那么该值会被加载为补码形式。

这里是一个简单的示例:

LDRSH R0, [R1, #4]   ; 从R1地址开始,偏移4个字节的位置加载一个16位的半字到R0寄存器

在这个示例中,LDRSH R0, [R1, #4]会从R1的地址开始,偏移4个字节的位置加载一个16位的半字到R0寄存器。请注意,这是基于ARM的汇编语言,不同架构的处理器可能会有所不同。


嵌入式汇编中的LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。这个指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

例如,以下是一些LDR指令的使用示例

  • LDR R0, [R1]:将存储器地址为R1的字数据读入寄存器R0
  • LDR R0, [R1, R2]:将存储器地址为R1+R2的字数据读入寄存器R0
  • LDR R0, [R1, #8]:将存储器地址为R1+8的字数据读入寄存器R0
  • LDR R0, [R1, R2]!:将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1
  • LDR R0, [R1, #8]!:将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1
  • LDR R0, [R1], R2:将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1
  • LDR R0, [R1, R2, LSL#2]!:将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1
  • LDR R0, [R1], R2, LSL#2:将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1

嵌入式汇编中的STR指令用于将源寄存器中的一个32位的字数据传送到存储器中。这个指令通常用于将通用寄存器中的32位的字数据写入到存储器,然后对数据进行处理。

例如,以下是一些STR指令的使用示例文章来源地址https://www.toymoban.com/news/detail-624386.html

  • STR R0, [R1]:将R0中的字数据写入以R1为地址的存储器中
  • STR R0, [R1, #8]:将R0中的字数据写入以R1+8为地址的存储器中
  • STR R0, [R1], #8:将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1

到了这里,关于gdb调试时查看汇编代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP/IP协议栈源代码分析:GDB调试环境搭建及源码分析

    Ubuntu 22.04 LTS Linux-5.4.34 busybox-1.36.0 2.1 安装相关工具 axel是一款多线程下载工具,用于下载Linux内核源代码及其他大文件;build-essential软件包里面包含了很多开发必要的软件工具,比如make、gcc等;QEMU是一种通用的开源计算机仿真器和虚拟器,为自己编译构建的Linux系统运行提供

    2024年02月03日
    浏览(52)
  • 使用IDA查看汇编代码,结合安卓系统生成的Tombstone文件,分析安卓app程序崩溃问题

    目录 1、IDA工具介绍 2、产品及问题场景描述 3、查看Tombstone文件

    2024年02月13日
    浏览(41)
  • C# 使用SIMD向量类型加速浮点数组求和运算(5):如何查看Release程序运行时汇编代码

    作者: zyl910 目录 一、引言 二、办法说明 2.1 基本办法 2.2 Release程序如何设置断点 2.3 如何避免“分层编译”的误导 2.4 实际演练(汇编调试) 2.4.1 进入断点 2.4.2 单步调试 2.4.3 观察主循环的汇编代码 三、结语 参考文献 前面的几篇文章里,介绍了 C# 编写向量算法的各种办法

    2024年02月12日
    浏览(31)
  • 学C的第十一天【查看汇编代码一步步了解 函数栈帧(栈区局部变量)的创建和销毁】

    ========================================================================= 相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) ========================================================================= 接上期: 学C的第十天(继续深入学习函数、函数递归、练习)-CSDN博客 ============================================

    2024年02月04日
    浏览(36)
  • 【个人博客系统网站】我的博客列表页 · 增删改我的博文 · 退出登录 · 博客详情页 · 多线程应用

    【JavaEE】进阶 · 个人博客系统(4) 用户在网页中编写标题和正文,点击提交,选择 输入摘要 取消,继续编写文章 提交成功后,选择 继续写文章 返回“我的博客列表页” 1.1 约定前后端交互接口 后端: /art/publish 将前端传递过来的数据保存到数据库 返回受影响行数 前端:

    2024年02月10日
    浏览(37)
  • Postman进阶篇(二)-console控制台(查看接口日志、调试代码)

    如果你觉得这篇内容对你有所帮助,有所启发,我想邀请你帮我个忙: 关注我的公众号【软件测试必备技能】,经常会分享软件测试干货。 搜索公众号名称,或点击文章底部卡片即可加我。 ———————————————————————————————— 进入postm

    2024年02月02日
    浏览(59)
  • 什么?博客园主题比我的个人博客好看??

    最近逛博客园,发现我的园子还挺好看,但是还不够好看,所以通过我百度发现SimpleMemory主题还可以继续添加新的东西,当然这些东西不一定非得用SimpleMemory主题才行,但是搭配SimpleMemory主题是真的好看呀(比我的博客好看多了)。 访问不进去GitHub,又不想花钱使用魔法,看

    2024年02月16日
    浏览(31)
  • bye 我的博客网站

    Bye🙋🙋🙋,我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在,好吧,最后一次展示它了,博客网站地址在这里,它是基于开源的一款Java开发的CMS博客建站平台:PerfreeBlog构建的。官方的网站首页是

    2024年02月13日
    浏览(45)
  • 我的博客目录

    二叉树遍历(前序、中序、后序、层次、广度优先、深度优先遍历) CRC校验原理 算法系列:日历算法 算法题库在线练习 ---- 洛谷网校 遗传算法的简单应用-巡回旅行商(TSP)问题的求解 遗传算法的简单应用-求解方程 初识遗传算法 位运算-实现加减乘除 图片嵌入隐藏-大容量的

    2024年02月08日
    浏览(71)
  • 【gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树的数据结构详解

    目录 🌞1. 整体思路 🌞2. 准备内容 🌼2.1 配置.c文件 🌼2.2 准备测试程序 🌼2.3 GDB调试基础 🌞3. GDB调试四层二叉树 🌼3.1 测试程序分析 🌼3.2 gdb分析 🌻1. 设置断点 🌻2. 启动程序并执行到断点处 🌻3. 打印变量的值 🌻4. 单步执行 s 进入buildTree函数内部 a. 第一层:根节点赋

    2024年04月17日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包