gdb 'x' 命令有什么作用?

2024-01-18

在我寻求更多地了解计算机的一般知识时,我偶然发现了一本书,其中有一些关于反汇编、x86 汇编语言以及 C 和 x86 汇编之间的关系的章节。现在我一直在读这个GDB命令,但我无法完全理解它。

该命令及其结果如下:

(gdb) x/32xw $esp
0xbffff7e0:    0xb8000ce0 0x08048510 0xbffff848 0xb7eafebc
0xbffff7f0:    0x00000002 0xbffff874 0xbffff880 0xb8001898
0xbffff800:    0x00000000 0x00000001 0x00000001 0x00000000
0xbffff810:    0xb7fd6ff4 0xb8000ce0 0x00000000 0xbffff848
0xbffff820:    0x40f5f7f0 0x48e0fe81 0x00000000 0x00000000
0xbffff830:    0x00000000 0xb7ff9300 0xb7eafded 0xb8000ff4
0xbffff840:    0x00000002 0x08048350 0x00000000 0x08048371
0xbffff850:    0x08048474 0x00000002 0xbffff874 0x08048510

现在,根据我的理解,我发出的命令告诉调试器:

  • x(第一个):检查内存
  • 32:得到以下的32个
  • x:启用十六进制表示
  • w:告诉我Word尺寸数据。
  • **Note:**我知道我询问 esp 寄存器,但我不太完全理解 $ 在它前面做什么。当我尝试不使用它时,我收到丢失符号错误,所以我知道它与引用/取消引用有关?

一直困扰我的是我是如何找到所有这些字节的?因为我正在检查一个寄存器,其大小是 32 位,所以我不应该只得到 32 位或 4 个字节(只有上面的 1 行)吗?如果我的假设是正确的,那么我们找到了其余的数据吗?它是否必须对堆栈和特定的堆栈框架执行某些操作,而我目前不知道?

我非常感谢您的意见,以便我能够澄清我的想法。


(gdb) help x   
Examine memory: x/FMT ADDRESS.

指定 $esp 作为地址将使 gdb 获取该寄存器中的所有内容,并将其用作 x 命令的内存地址 - 并将显示内存中从该地址开始的以下 32 个字。

gdb 本身内的变量名称以 $ 为前缀,gdb 为所有 cpu 寄存器设置预定义变量。

如果你想检查 esp 寄存器,请使用命令info registers esp,正如您将在示例 (x/32xw $esp) 中看到的那样,esp 寄存器包含显示的第一个地址 0xbffff7e0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gdb 'x' 命令有什么作用? 的相关文章

  • Python int和float在64位系统中的内存消耗

    我正在 Python 3 4 的 64 位系统中尝试以下代码 以了解不同原始数据类型的内存消耗 import sys print sys getsizeof 45 prints 28 print sys getsizeof 45 2 pri
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视
  • 在 VSCode Fortran 调试中检查从另一个模块导入的变量

    我正在调试一些包含许多 Fortran 模块的代码 其中一些模块彼此共享变量 不幸的是 带有 VScode 的 gdb 在调试时似乎无法检查导入的变量 目前 当我需要检查导入的变量时 唯一的方法是停止调试 并手动更改代码以包含等于导入变量的
  • C 结构如何返回[重复]

    这个问题在这里已经有答案了 我想知道如何返回一个结构 例如 typedef struct number uint64 t a b c d number number get number number res 0 0 0 0 return
  • MAC-1 汇编递归

    如何在 MAC 1 汇编器中调用递归函数 在 C 中你会做类似的事情 int func int num if num 0 return 1 return num func num 1 我知道如何使用调用函数 CALL 以及如何将参数加载到堆
  • 如何序列化 android.graphics.Path 对象

    我正在尝试将 Android graphics Path 对象存储在内部设备内存中 有谁知道如何序列化 android graphics Path 对象 另外 还有其他方法来存储 Path 对象吗 谢谢 我这样做的方法是从原始 Path 类
  • 避免内存泄漏

    所以我正在学习 C 中的 OOP 我认为编写自己的字符串类是一个很好的实践 当然是为了学习目的 我提出了一个我不知道如何解决的问题 这是一些和平的代码 class String char str public String char con
  • 本机代码、机器代码和汇编代码有什么区别?

    我对 NET 语言上下文中的机器代码和本机代码感到困惑 它们之间有什么区别 它们是一样的吗 这些术语确实有点令人困惑 因为它们有时使用不一致 机器代码 这是定义最明确的一种 它是使用字节码指令的代码 您的处理器 执行实际工作的物理金属部件
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • 如何估计 std::map 的内存使用情况?

    例如 我有一个已知 sizeof A 和 sizeof B 的 std map 而 map 内部有 N 个条目 您如何估计其内存使用情况 我想说这就像 sizeof A sizeof B N factor 但到底是什么因素呢 也许不同的公式
  • 我的 Bitset 的大小是多少?

    我想存储System currentTimeInMillis以尽可能小的空间存储在内存中 因为我必须将数百万个它们存储在内存中 我把它转换为binaryString这给了我41 bits 这是我的程序 public class BitSet
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • Python列表内存存储[重复]

    这个问题在这里已经有答案了 据我了解 Python 列表本质上是 C 数组 它们分配特定的顺序内存块 但是 这些内存块实际上存储列表中的数据还是它们只是指向内存中存储实际数据的另一个位置 它可能取决于列表中存储的对象的大小吗 因为您可以轻松
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • std::deque 的内存开销到底是怎么回事?

    我正在研究一种使用外部排序算法std queue并且必须仔细限制其内存使用 我注意到在合并阶段 使用了几个std queues 固定长度 我的内存使用量增加到我预期的大约 2 5 倍 自从std queue默认情况下使用std deque作
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • gcc 没有小字符串优化吗?

    Most std string实现 包括 GCC 使用小字符串优化 例如 有一个answer https stackoverflow com a 21710033 2640636讨论这个 今天 我决定检查我编译的代码中的字符串在什么时候被移
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt

随机推荐

  • 如何从 MailItem 获取特定于任务的属性

    我一直在为自己做一个周末小项目 其中包括从 Outlook 获取所有 ToDo 任务 将它们放入 DataGridView 中 然后我就能够编辑和导出它们 我遇到的唯一问题是 当标记的电子邮件仍然存在时 我无法获取它们的任务特定属性 我只是
  • 声明 std::string 变量后,Cout 没有输出

    我编写了一个简单的程序 返回作为参数传递的 IP 地址的主机名 该程序使用两个函数 getaddrinfo 和 getnameinfo 我正在使用 Linux Mint Netbeans IDE 和 G 编译器 输出没问题 没有错误 但是当
  • 阿拉伯字符“??????”关于 php 和 mysql [重复]

    这个问题在这里已经有答案了 这是我的问题 我有一个阿拉伯数据库 mysqli UTF8 general ci 并且我的 php 文件的字符集是 UTF 8 当我出售数据时 我得到 在 php 上 我的管理员我可以毫无问题地写入和读取 在 p
  • Django 模型主键作为一对

    我正在尝试制作一个应用程序 用户可以登录他们的个人资料并将歌曲添加到他们最喜欢的列表中 我为此定义了 M2M 关系 我的问题是如何说 歌曲 歌手 的组合是独特的 我搜索了一下 发现通过unique together也许可以 这是设置的正确方
  • 使用 LEFT JOIN 删除

    我想根据引用第一个表的另一个表中存在的数据从表中删除 但是 当我将其作为 SELECT stetement 运行时 我有有效的代码并显示要删除的值 但是当我将其更改为删除它给了我错误 我不明白它们为什么在那里 DELETE leadCust
  • 如何使用facet_wrap在每个方面具有不同数字的离散类别之间创建相等的距离

    我的目标是使图中所有国家之间的距离大致相等 例如 在第一类中 Increase 国家分散 另一方面 第二类和第三类国家彼此距离太近 这迫使我减小国家文本的大小 例如 IS UK 和绘制的估计值 例如 1 5 1 2 因此 一旦我将此文件提取
  • GCE Kubernetes 会话持久化

    我正在 GCE Kubernetes 上运行一个 wordpress woocommerce 网站 但由于会话持久性而在扩展时遇到问题 LoadBalancer GCE Ingress 将所有流量发送到反向代理 然后反向代理将流量发送到我设
  • 在 Scala 中将列表[Try[A]] 转换为列表[A]

    我想从输入数据中过滤掉错误的输入 我目前正在使用scala util Try包装任何异常 下面是一个简单的例子 其中 3I 抛出一个NumberFormatException 我想知道在 Scala 中是否有更好的方法来做到这一点 val
  • OpenGL 和 QtQuick 纹理问题

    我正在基于 Qt 附带的 openglunderqml 示例在 C 中开发一个简单的 QQuickItem 实现 我做了一些修改以使用不同的着色器和加载的两个纹理 这个想法是着色器将在两个纹理之间交叉淡入淡出 本质上只是我加载到纹理中的图像
  • Flutter Web:堆栈和耀斑问题

    我试图在 Flutter Web 开发频道 v1 13 2 上创建一个简单的网页 但出现了这个奇怪的问题 当我尝试在堆栈小部件中放置耀斑动画时 该堆栈小部件分别有 2 个附加小部件 一个背景和一个居中文本 耀斑似乎没有出现 但是当我移除背景
  • 如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包为 64 位整数的字节?

    给定一个 m256i打包 32 位有符号整数的价值 如何获取每个字节所在的单个 64 位数字1如果原始的相应 32 位有符号整数 m256i大于或等于0 并得到 1如果该 32 位整数是负数 AVX2 可能还有 AVX512 很有趣 这是另
  • Jenkins 要求接受 TFS EULA

    我在 Jenkins 上创建了一个附加到 TFS 服务器的构建作业 我使用 Team Explorer Everywhere 来促进这一点 我第一次运行该作业时 收到以下消息 Error You must accept the End Us
  • 如何使用 Express.js 指定 HTTP 错误代码?

    我努力了 app get function req res next var e new Error error message e status 400 next e and app get function req res next r
  • FIND_IN_SET 有两个字符串

    我有这个员工列表的员工表 ID EMPLOYEE ID SKILLS 1 1 3 4 2 2 3 5 2 3 3 1 5 和列
  • ARC Welder 打包的 Android 应用程序只能在 Chrome 操作系统上使用吗?

    如果我使用 Google ARC Welder 打包 Android 应用程序并通过 Chrome 网上应用店分发它 它是否适用于 Windows Mac Linux 还是仅适用于 Chrome 操作系统 如果是这样 有什么消息表明这种情况
  • 使用 openssl C 进行 AES(aes-cbc-128、aes-cbc-192、aes-cbc-256)加密/解密

    我只想用这 3 种模式测试 openSSL 的 AES 密钥长度为 128 192 和 256 但我的解密文本与我的输入不同 我不知道为什么 另外 当我传递一个巨大的输入长度 比方说 1024 字节 时 我的程序显示core dumped
  • 如何在张量流中实现多元线性随机梯度下降算法?

    我从单变量线性梯度下降的简单实现开始 但不知道将其扩展到多元随机梯度下降算法 单变量线性回归 import tensorflow as tf import numpy as np create random data x data np r
  • 我什么时候应该在 scanf() 中使用 & 符号

    在c中使用 符号时使用的规则是什么scanf struct Student char name 20 int id int main void struct Student std1 printf enter name and id of
  • 查看 Azure KeyVault 中 Secret 的内容

    这似乎是一个非常基本的问题 但我在 Azure 中创建了一个 KeyVault 并向其中添加了两个 Secret 它们是使用以下方法保护的纯文本 hello world 示例ConvertTo SecureString Using Get
  • gdb 'x' 命令有什么作用?

    在我寻求更多地了解计算机的一般知识时 我偶然发现了一本书 其中有一些关于反汇编 x86 汇编语言以及 C 和 x86 汇编之间的关系的章节 现在我一直在读这个GDB命令 但我无法完全理解它 该命令及其结果如下 gdb x 32xw esp