【问题标题】:(gdb) Get the value of the memory address indicated by a register(gdb) 获取寄存器所指示的内存地址的值
【发布时间】:2014-04-24 02:13:32
【问题描述】:

我正在进行一个调试项目,该项目需要我使用 GDB 查看汇编代码。 一行读取movzbl (%ebx),%eax。 我知道这会将(%ebx) 的最低有效字节复制到%eax,并将零附加到所有更有效的位。

现在,我正在尝试使用 GDB 来找出 (%ebx) 的值。

info registers 告诉我%ebx 的值是0x804a6ac。据我了解,要获得(%ebx) 的值,我希望该值位于地址0x804a6ac。 我如何获得这个值? 我知道,movzbl (%ebx),%eax 运行后,%eax 的值为0x41。 因此,我怀疑41(%ebx) 的最低有效字节,但是如何才能看到它的全部值呢?

我尝试做p/x $0x804a6ac,但我得到$13 = Value can't be converted to integer.。 另外,我尝试做p/x %ebx,但我得到“表达式中的语法错误,靠近`%ebx'。”

【问题讨论】:

  • p/x *0x804a6ac怎么样
  • 看来我明白了:p/x {char *} 0x804a6ac 给了我$18 = 0x69626d41。编辑:哦,我刚看到杰瑞的帖子。那也行得通。谢谢!

标签: debugging assembly x86 gdb


【解决方案1】:

对此的“标准”命令是x/cx $ebx

这比p/x *0x804a6ac 更好,因为您不必剪切/粘贴$ebx 的值。

【讨论】:

  • p /x *(char*)$ebx 确实有效,或者根据需要转换为任何其他类型,包括要重复的数组类型。但是演员阵容更多的是打字,没有它你会得到尝试取消引用通用指针。
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2021-12-30
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2014-04-02
相关资源
最近更新 更多