GDB 是否正确解释内存地址?

2023-11-29

我正在使用 GDB 检查内存地址的内容,但不知道它是否正确显示。

(gdb) p (char *)0x8182f40
 $4 = 0x8182f40 "XYZ"
(gdb)


(gdb) x/40x 0x8182f40-16
0x8182f30:      0x00000000      0x00000000      0x000000a8      0x00000010
0x8182f40:      0x005a5958      0x00000000      0x00000000      0x00000029
0x8182f50:      0x00000000      0x00000000      0x00010000      0x082439d8
0x8182f60:      0x08199100      0x00000000      0x08000000      0x00002f08
0x8182f70:      0x00000002      0x000000b1      0x00000000      0x00000000
0x8182f80:      0x00000000      0x00000000      0x00000000      0x00000000
0x8182f90:      0x00000000      0x00000000      0x000000d4      0x00000002
0x8182fa0:      0x000003f1      0x00007162      0x00000002      0x08178d00
0x8182fb0:      0x00000000      0x080ef4b8      0x00000000      0x00000000
0x8182fc0:      0x00000000      0x00000000      0x0000021d      0x00000000

内容位于0x8182f40上图显示为0x005a5958,但这看起来相反。那是对的吗?

现在按字节打印,我得到这个:

(gdb) x/40bx 0x8182f40-16
0x8182f30:      0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
0x8182f38:      0xa8    0x00    0x00    0x00    0x10    0x00    0x00    0x00
0x8182f40:      0x58    0x59    0x5a    0x00    0x00    0x00    0x00    0x00
0x8182f48:      0x00    0x00    0x00    0x00    0x29    0x00    0x00    0x00
0x8182f50:      0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00

这个更有意义:0x8182f40: 0x58 0x59 0x5a
X Y Z

如何正确解读这些地址和内容?


That's 小端.

When storing multi-byte values in memory, there are two1 ways to store them:

  • 较低地址上的较低字节。这称为小尾数或最低有效字节优先 (LSB)。

  • 较低地址上的较高字节。这称为大端字节序或最高有效字节优先 (MSB)。

从历史上看,有些 CPU 是小端字节序,有些是大端字节序,其中大端字节序可能更常见,但小端字节序占主导地位。部分原因是最常见的 ix86 架构是小尾数法。第二个最常见的架构,ARM,可以配置为任一,虽然传统上许多操作系统将其用作大端(包括早期的 Linux),但最近每个人似乎都使用它的小端。主要原因可能是为了避免检查从 ix86 移植的代码是否是字节序中立的。

原因是看起来“错误”只是两个约定的冲突:

  1. 数字从左到右书写,最高有效数字在前
  2. 内存内容按照地址递增的顺序从左到右写入。

但这只是一个惯例。在计算机中,小端可能在给定的情况下稍微更符合逻辑int value x,平等(char)x == *(char *)&x成立,但在大端字节序中则不然。当然,C 规范足够仔细,保留了定义的实现(使用char它不违反严格的别名规则)。

1PDP-11 featured a third way, a special abomination called middle endian, where 16-bit values were little endian, but 32-bit values were composed of the two 16-bit units in big endian.

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

GDB 是否正确解释内存地址? 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 C# 读取 Soap 消息

  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中

随机推荐

  • 查看更多和查看更少按钮

    下面的脚本每次单击按钮时都会显示 4 个项目 我需要的是在单击后更改按钮的文本以 显示更多 然后在显示所有项目时更改为 显示更少 我尝试添加这个 if nowShowing gt numInList partners button a to
  • ngRepeat 按深层属性过滤

    如果我有一个以对象作为属性值的复杂对象 如何按嵌套属性之一进行过滤 这可以通过 OOB ng repeat 过滤器来完成吗 Data Name John Smith Manager id 123 Name Bill Lumburg ngRe
  • 使用 href onclick 更新 div 而不重新加载页面?

    我用这个现有的问题来帮助我 HTML 更改 更新页面内容而不刷新 重新加载页面 template comparison php 文件从 header php 代码中获取代码 但实际的 获取代码 并未显示 否则 模板页面将没有标题 templ
  • Play 位置服务 getLastLocation 返回 null

    我正在尝试聆听位置变化 但有时onLocationChanged回调永远不会被调用并且getLastLocation回报null 而谷歌地图始终运行完美 Note 如果我重新启动设备 定位服务将仅工作约 2 天 之后我的应用程序和SDK 示
  • 即使提供了参数,过程仍需要参数

    我看到其他一些人也面临着类似的问题 我已阅读并检查了标题为的问题过程需要未提供的参数 我认为这可以解决我的问题 但我错了 我确实检查了那里建议的步骤 但没有成功 这是我的代码 oOleDbCommand CommandText usp Pe
  • 如何在 iPhone 上以卡拉 OK 风格显示歌词?

    我目前正在创建一个播放音乐的应用程序 我想添加一个功能 在播放音乐时显示音乐歌词 并标记文本的当前位置以匹配歌曲中的当前位置 弹跳球效果 就像您在播放歌曲时在每个卡拉 OK 屏幕上看到的一样 我一直在考虑扩展我的咖啡馆文件 添加 字符串块
  • 实体框架查找方法无法正常工作

    我有名为 课程 学生 和 教师 的课程 如下所示 public class Course Key DatabaseGenerated DatabaseGenerationOption Identity public Guid CourseI
  • 如何将 Bluebird 与 Angular 结合使用?

    我尝试使用 Angular 和 Bluebird 承诺 HTML div name also div JS javascript var app angular module HelloApp app controller HomeCont
  • 通过 Powershell 更改 Chrome 设置

    我想编写一个脚本来更改 Chrome 中的默认页面缩放 但我不知道这些选项存储在哪里 我想我必须找到一个合适的选项文本文件 解析它 然后使用 powershell 进行文本替换才能应用更改 每次将笔记本电脑连接到外部显示器时 我都需要执行此
  • 非拉丁字符和哎哟

    我正在了解 Cake PHP 它发现了一个关于 PHP MySQL 字符集内容最佳实践的一般问题 我希望可以在这里得到解答 我的 练习 系统包含一个 mysql 电影表 该列表源自 Excel 工作表 该工作表导出为 CSV 并通过 php
  • 亚马逊 Linux 上的 uwsgi 新贵

    我按照本教程创建了一个 uwsgi 文件https uwsgi readthedocs org en latest Upstart html在亚马逊Linux上 虽然它似乎没有运行 因为 Nginx 只是说网关不好 如果我运行 etc in
  • JLabel:异步加载 HTML 图像

    A JLabel允许 HTML 内容 其中可以包含图像 String html img src JLabel label new JLabel html 请注意 我使用JLabel用于渲染图像JXTreeTable 因此更新文本JLabel
  • 如何从 C# 应用程序中将焦点设置到桌面

    Winforms 应用程序 Net 3 5 我需要将焦点从 C 应用程序设置到用户桌面 几乎就像模拟鼠标在桌面上单击一样 有人可以告诉我如何用 C 做到这一点吗 我只想将焦点设置在桌面上 以便焦点不再位于我的应用程序上 但我想在我的应用程序
  • 在 Perl 中打印字符串

    有没有一种简单的方法 也许使用子例程 在 Perl 中打印字符串而不转义每个特殊字符 这就是我想做的 print DELIMITER i DELIMITER 显然 如果我可以使用字符串而不是特殊字符作为分隔符 那就太好了 佩尔多克 佩洛普
  • 多线程并发访问和全局互斥

    OpenSSL 常见问题解答指出它可以在线程应用程序中使用 1 OpenSSL是线程安全的吗 如果应用程序设置了线程回调函数 答案是肯定的 此回调函数引用全局 SSL 锁 因此如果您有 2 个 ssl 连接运行 它们都将使用此全局锁 然而
  • Spring Oauth2隐式流程

    致力于使用 Spring 实现 Oauth2 我想实现隐式工作流程 我的配置文件 Configuration EnableAutoConfiguration RestController public class App Autowired
  • 打开我的应用程序以获取特定文件和 URL 扩展名 - 意图过滤器未按预期工作

    问题 如何让我的应用程序无条件打开文件和 URL 扩展名 我对设置我的intent filter因为这些都没有任何意义 我的最终目标是开放任何有path以某个扩展结尾 为了举例 我们选择 riley 作为我的目标延伸 我的基地 意图过滤器
  • 使用 if 语句检查 div 是否为空

    如果单独的 div 为空 我尝试删除特定的 div 这是我正在使用的 document ready function if leftmenu empty menuTitleWrapper remove middlemenu css righ
  • 将加拿大邮政编码转换为经度和纬度

    我有 100 个加拿大邮政编码的列表 例如M4B 1C7 有没有办法将这些邮政编码转换为近似的经度和纬度值 目前 我正在使用以下网站手动执行此操作 https geocoder ca 在 R 中是否有更快的方法来做到这一点 我碰到tidyg
  • GDB 是否正确解释内存地址?

    我正在使用 GDB 检查内存地址的内容 但不知道它是否正确显示 gdb p char 0x8182f40 4 0x8182f40 XYZ gdb gdb x 40x 0x8182f40 16 0x8182f30 0x00000000 0x0