GDB · 夏训 · 查看内存

格蠹信息科技有限公司

GDB · 夏训 · 查看内存

www.nanocode.com

盛格塾 2024 暑期公益课程

GDB暑假训练营

在数字编织的编程宇宙中,内存,这一无形的舞台,默默承载着数据流转。2024年8月8日,我们再次相聚于这虚拟的殿堂,不是为了简单的代码堆砌,而是为了多角度审视编程世界中最为神秘莫测的领地——内存舞台。今天,我将作为你的向导,借助GDB这一强大的调试工具,带你踏上深入内存秘境的探险之旅。想象一下,我们将直接触碰程序运行时的脉搏,窥探那些隐藏在内存深处的数据奥秘,共同揭开那些决定程序命运的细节。

随着直播拉开序幕,我带着对未知世界的好奇与敬畏,引领着每一位观众踏入了内存探索的奇幻之旅。首先,我简要回顾了GDB在变量查看中的强大功能,给大家复习了一下print和display两个命令的区别,为即将展开的内存探索之旅奠定了坚实的基础。

“在GDB中,查看内存内容的命令是x(examine的缩写)。”我边操作边娓娓道来,“通过x命令结合不同的格式选项,我们可以直接查看内存地址中的原始数据。”随着我的演示,屏幕上逐渐显现出内存区域的具体内容,让大家都能直观感受到GDB在内存查看方面的独特魅力。命令的基本格式:x /nfu add;随后,我给大家逐一解析这个命令的各个部分:首先,对于/n:用来指定了我们要查看的内存单元的数量。比如,如果你想看4个内存单元的内容,就写/4。接着,f:用来显示格式。GDB提供了多种格式来显示内存内容,以适应不同的需求。比如x:十六进制,这是最常用的格式之一,因为它可以清晰地显示内存中的字节值。然后,对于u:这部分指定了每个内存单元的大小。不同的数据类型占用不同数量的字节,因此我们需要明确告诉GDB每个单元的大小。例如,b:单字节(byte)。最后,就是addr:这是用来查看的内存地址。你可以通过GDB的其他命令(如print &variable)来获取变量的地址,或者直接输入一个已知的内存地址。紧接着,我就在屏幕上给大家举了个例子:查看数组intArray它前4个元素的内容。可以在键盘上输入:print &intArray获取数组首元素的地址。

然后,输入:x/4w address这个命令会显示从address地址开始的4个四字节内存单元的内容,每个单元都以十六进制形式显示。

ecdc4eb0e1fc91a47e8b5bdde7750f5a.png

然而,GDB的内存查看功能远不止于此。我进一步展示了x命令的强大之处,利用x命令查看内存的状态变化。这种查看方式,让我们能够深入理解程序在运行过程中内存的使用情况,进而发现潜在的内存泄露、越界访问等问题,为程序的健壮性保驾护航。

在直播过程中,我还分享了几个实用的GDB内存查看技巧,如使用info registers命令查看寄存器状态(因为寄存器也是内存访问的重要部分),以及如何利用GDB的x命令查看不同类型变量的内存地址。这些技巧的介绍,不仅丰富了调试的手段,也让整个调试过程更加高效、准确。

随着直播的渐入佳境,我愈发被GDB中x命令的深邃与强大所震撼。张老师以其渊博的知识和丰富的经验,引领我探索了一系列x命令的精妙组合,这些是我此前未曾触及的知识宝藏。在他的悉心指导下,我逐一输入命令,屏幕上如同魔法般显现出一幕幕内存数据的内容,每一个结果都如同解锁了程序内部的一个新秘密。

张老师还对每一个命令背后的逻辑和用途进行了详尽的剖析,这种深入浅出的讲解方式让我深感神奇之余,也极大地拓宽了我对x命令应用边界的认知。这一刻,我深刻体会到了GDB的浩瀚与神奇。

当直播步入尾声,张老师向我们介绍了一个深藏不露、唯有GDB资深高手方能知晓的绝技—— x/100ga $sp。这一命令的亮相,瞬间让这一场直播间上了一个档次,它就像是函数调用的一份履历,能够一次性解锁栈指针($sp)当前位置向下延伸的100个8字节)内存区域,让我们能够以前所未有的视角,窥探程序运行时栈帧的详细布局与数据状态。张老师的此番分享,无疑为本次GDB探索之旅画上了一个圆满而充满期待的句号,同时也激发了我们对GDB更深层次功能的无限遐想与探索欲望。

今天的直播,不仅是对GDB内存查看功能的一次深度挖掘,更是我们共同成长的见证。在探索的路上,我们学会了如何用GDB的慧眼洞察程序的内在逻辑,如何用其强大的功能为我们的编程之旅保驾护航。未来,无论是面对复杂的内存管理难题,还是深入探索程序的性能瓶颈,我相信,今天的所学所感都将是我们最宝贵的财富。让我们带着这份收获与激情,继续在编程的征途中勇往直前,用代码编织梦想,用GDB照亮前行的道路。期待在下一次的探索中,再次与你们相遇,共同书写更多关于编程与探索的辉煌篇章!

对于此次未能参与直播的朋友们,无需遗憾!我们的直播回放已准备就绪,等待着你们的点击与探索。错过直播的朋友可以到 格友视频号 观看录像,重温每一个精彩瞬间,感受GDB内存查看的每一个细节。

知识点归纳

1

 x /4xw &var

以十六进制形式查看与变量var的内存地址开始的连续四个四字节(w)大小的内存单元的值

2

 x/4dw &var-1

查看 var 变量地址前后四个字节(即一个int类型的大小)的内存内容

3

 x/20d &intArray

以十进制格式显示20个内存单元的内容

4

 x/20x &intArray

从这个地址开始显示20个十六进制数

5

x/s &charvar

指定了以字符串形式查看内存内容

06

 x/2xw &person.name

2xw表示以无符号字(word,通常是4字节)的十六进制格式查看两个单位

7

 p $pc

打印当前程序计数器的值

8

 set {int} 0x7fffffeb98=12345

修改内存和寄存器的值

9

 x/100ga 0x7fffffeb98

用于检查堆栈(stack)的内容(高级指令)

以下是一些示例截图,仅供参考

STEP

01

30341eb38792934d87d2fea696c6c6c1.png

STEP

02

f12e40aad8be4333e44ac11c16daaf58.png

STEP

03

920fdff2c43ee32d29600ae31a20fa15.png

STEP

04

ffc3b56fbf45140f9c332f0302a749a8.png

STEP

05

a3f88d57d181f76a680a92e78e1db1e9.png

STEP

06

5c9be7d26575134d70b483b5d2ac3950.png

STEP

07

25644da2f1652699719008daeecf8628.png

STEP

08

ac3f94f93c99bc8b3c36102e7b49b4dc.png

STEP

09

620123d12ed5806a5276357a4d541ac4.png

STEP

10

eec36d549c191e6af4d947c2e722ca24.png

STEP

11

4c2c87899f47f25bb27bce36c73ff349.png

用于检查堆栈(stack)的内容(高级指令)

【盛格塾】

正心诚意,格物致知

人文情怀审视软件,以软件技术改变人生

38b9220365a9c89d6e0879c24f38e500.png

格友公众号

a45729cfdcd25723b1d38fa8a45724fa.png

盛格塾小程序

扫描上方二维码或在微信中搜索“盛格塾”小程序

可以阅读更多文章和有声读物

往期推荐

是谁在LINUX内核中开了这个大洞?

学习编程,一举多得 ——— 格蠹科技 CCF GESP 编程培训(1-2级)正在招生

0号事件何处来?

什么样的笔记本电脑适合大学生?

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值