使用gdb调试时,如何打印某个内存地址的值

news/2025/2/6 13:36:38/文章来源:https://www.cnblogs.com/peifx/p/18700936

在 GDB 中打印内存地址的值,可以使用以下两种核心命令:x(examine)和 print。以下是具体用法和示例:


1. 使用 x 命令(直接检查内存)

x 命令的语法为:

bash
复制
x/[数量][格式][单位] <内存地址>

参数说明

  • 数量:要显示的内存单元数量(例如 10 表示显示连续的 10 个单元)。

  • 格式

    • x:十六进制

    • d:十进制整数

    • u:无符号十进制整数

    • t:二进制

    • c:字符

    • s:字符串

    • i:汇编指令

  • 单位

    • b:字节(Byte,1字节)

    • h:半字(Halfword,2字节)

    • w:字(Word,4字节)

    • g:大双字(Giant word,8字节)

示例

bash
复制
# 以十六进制显示地址 0xffffd008 处的 4 个字节
(gdb) x/4xb 0xffffd008
0xffffd008: 0x7f 0x00 0x00 0x00# 以十进制显示地址 0xffffd008 处的 1 个四字节整数
(gdb) x/1dw 0xffffd008
0xffffd008: 127# 以字符串显示地址 0x404000 处的内存(直到遇到 '\0')
(gdb) x/s 0x404000
0x404000: "Hello, World!"# 以汇编指令显示地址 0x401000 处的代码
(gdb) x/3i 0x401000
0x401000: push   %rbp
0x401001: mov    %rsp,%rbp
0x401004: sub    $0x10,%rsp

2. 使用 print 命令(表达式求值)

print 可以通过类型转换直接解析内存地址的值,语法为:

bash
复制
print *(<类型>*)<内存地址>

示例

bash
复制
# 将地址 0xffffd008 视为 int 指针并打印其值
(gdb) p *(int*)0xffffd008
$1 = 127# 将地址 0x404000 视为 char 指针并打印字符串
(gdb) p (char*)0x404000
$2 = 0x404000 "Hello, World!"# 将地址 0x401000 视为函数指针并调用反汇编
(gdb) disassemble *(void(*)())0x401000
Dump of assembler code for function main:
...

3. 注意事项

  1. 权限问题

    • 如果内存地址不可读(如未分配或权限不足),GDB 会报错:

      bash
      复制
      Cannot access memory at address 0xdeadbeef
    • 确保地址有效(例如通过调试符号或程序逻辑确认)。

  2. 动态地址

    • 若地址来自变量(如指针),可以直接用变量名:

      bash
      复制
      (gdb) p *ptr       # 打印指针指向的值
      (gdb) x/x ptr      # 直接检查指针指向的内存
  3. 寄存器中的地址

    • 打印寄存器中的地址值:

      bash
      复制
      (gdb) x/x $rax     # 检查 rax 寄存器中的地址
      (gdb) p *(int*)$rax

4. 综合示例

假设调试以下代码:

c
复制
int main() {int num = 42;int *ptr = &num;return 0;
}

调试步骤:

bash
复制
(gdb) break main
(gdb) run
(gdb) p &num           # 获取 num 的地址,假设为 0x7fffffffd00c
(gdb) x/1dw 0x7fffffffd00c  # 以十进制显示该地址的值(输出 42)
(gdb) p *ptr           # 直接通过指针变量打印值(输出 42)

通过上述方法,你可以灵活地查看任意内存地址的值,无论是通过直接地址、指针变量还是寄存器。

 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高斯溅射和GIS融合之路- 将splat文件切片成3dtiles

这篇文章主要介绍了如何将高斯泼溅的splat文件切片成3DTiles格式,以便在Cesium等GIS引擎中高效渲染。通过GISBox工具实现切片,并讨论了Cesium对KHR_gaussian_splatting扩展的支持。在具体介绍山海鲸团队如何实现对高斯泼溅模型进行切片并在Cesium中渲染之前,我们先来回顾一下…

MySQL常用编码格式详解utf8、utf8mb4、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci

前言常用字符集utf8utf8mb4排序规则(Collation)utf8mb4_general_ciutf8mb4_unicode_ciutf8mb4_0900_ai_ci总结对比使用建议示例前言 在使用MySQL创建数据库时候免不了选择字符集和排序规则,不同的字符集对应不同的排序规则,不同的排序规则的性能和效果是不一样的。一般我们…

JS-50 事件类型之表单事件

表单事件是在使用表单元素及输入框元素可以监听的一系列事件 ①input事件②select事件③Change事件④reset事件⑤submit事件 1、input事件input事件当<input>、<select>、<textarea>的值发生变化时触发。对于复选框(<input type=checkbox>)或单选框(…

第一章:计算机的历史

计算机的历史 TL;DR因为有时工作量大,以及人类的懒惰性,所以诞生了计算机正文摒弃教材,来站在发明计算机的人的视角,考察为什么计算机会诞生。 思考题你是一个工程师,接到了一个任务:要求在两天之内计算十万个形如 2x+3=7 这样的方程,并返回结果,让上级进行下一步数据处…

2025年打工人自救指南:四款工作计划管理APP对比

一、微软To-Do:极简主义者的效率白月光 ✅ 核心优势: 1、多平台同步:Windows/iOS/Android/网页端实时云同步,微软账号一键打通生态。 2、智能清单管理:支持「我的一天」智能推荐任务、「步骤拆解」功能,适合任务颗粒度细的日程规划。 3、跨软件联动:与Outlook日历深度绑…

数字先锋 | 竞技科研蓝海,中南大学先“算”一步!

自计算机诞生之日起,科学研究对计算性能的无限追求,一直在不断冲击和超越摩尔定律的想象。而高校作为科研成果创新和人才培养的重要基地,其计算能力已经成为衡量自身科学技术研究、产品研发实力、人才培养水平的重要标志。在中南大学的高性能计算公共平台机房内,一排排机柜…

利用ima.copilot,打造你的AI知识库

和几位同学聊起了各路 AI+工具的强大特性,特别是对于团队来说很重要的知识库功能,是我个人认为对职场同学,特别是对于技术管理同学来说很重要的一种增强个人竞争力的途径。 在以前,如果要创建自己或者团队的知识库,需要手动去搜索信息,并且人工对信息进行梳理分类,然后手…

openmv识别颜色--单颜色识别

thresholds = [ (30, 100, 15, 127, 15, 127), # generic_red_thresholds (30, 100, -64, -8, -32, 32), # generic_green_thresholds (0, 30, 0, 64, -128, 0), ] //设置颜色阈值,分别代表lab的最大值最小值. sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.se…

flutter3-dymall仿抖音直播商城|Flutter3.27短视频+直播+聊天App实例

自研flutter3.27+dart3.6+getx实战抖音短视频+聊天+直播电商带货app商城应用。 flutter_dymall一款基于最新版Flutter3.27+Dart3.x+Getx+mediaKit原创实战研发抖音app带货商城项目。集成了直播+短视频+聊天三大功能模块。实现了类似抖音app首页全屏沉浸式联动左右滑动页面模块、…

DeepSeek-R1本地部署使用

春节期间突然被DeepSeek刷屏了,这宣传力度是真大,到处都是新闻和本地部署的教程,等热度过了过,简单记录下自己本地部署及相关的内容,就当电子宠物,没事喂一喂:D,不过有能力的还是阅读论文和部署完整版的进一步使用。 论文链接: https://github.com/deepseek-ai/DeepSee…

面向 Workload 级别的灵活可配置 Serverless 弹性解决方案

本文介绍的四种组件,在解决上述问题,具有各自的优势场景。用户可以根据自身实际场景选择合适的能力来用好弹性算力。Serverless 是云计算的进一步延伸,因此其继承了云计算的最大特点,即按需弹性伸缩。这样的模型设计让开发者无需关注具体的部署资源,充分利用资源规模效应,…

腾讯云 TI 平台部署与调用DeepSeek-R1大模型的实战指南

今天我们将继续探讨如何部署一个私有化的 DeepSeek-R1 大模型,具体的部署过程我们将利用腾讯云的 TI 平台进行操作。当前,腾讯云 TI 平台为用户提供了免费体验的满血版 DeepSeek-R1 大模型,同时该平台还提供了开放的 API 接口服务,用户可以方便地将其接入到自己的平台中,进…