Debugging (gdb)获取寄存器指示的内存地址值
我正在进行一个调试项目,该项目要求我使用GDB查看汇编代码。 一行内容为Debugging (gdb)获取寄存器指示的内存地址值,debugging,assembly,x86,gdb,Debugging,Assembly,X86,Gdb,我正在进行一个调试项目,该项目要求我使用GDB查看汇编代码。 一行内容为movzbl(%ebx),%eax。 据我所知,这会将(%ebx)的最低有效字节复制到%eax,并在所有较高有效位上添加零 现在,我正在尝试使用GDB来找出(%ebx)中的值 info registers告诉我%ebx处的值是0x804a6ac。据我所知,要获取(%ebx)处的值,我希望该值位于地址0x804a6ac。 如何获得该值? 我知道,在运行movzbl(%ebx),%eax之后,%eax的值为0x41。 因此,我怀
movzbl(%ebx),%eax
。
据我所知,这会将(%ebx)
的最低有效字节复制到%eax
,并在所有较高有效位上添加零
现在,我正在尝试使用GDB来找出(%ebx)
中的值
info registers
告诉我%ebx
处的值是0x804a6ac
。据我所知,要获取(%ebx)
处的值,我希望该值位于地址0x804a6ac
。
如何获得该值?
我知道,在运行movzbl(%ebx),%eax
之后,%eax
的值为0x41
。
因此,我怀疑41
是(%ebx)
的最低有效字节,但是我如何才能看到它的整个值呢
我尝试执行p/x$0x804a6ac
,但我得到$13=值无法转换为整数。
。
另外,我尝试执行p/x%ebx
,但是我得到了“表达式中的语法错误,靠近“%ebx”。用于此操作的“标准”命令是x/cx$ebx
这比
p/x*0x804a6ac
好,因为你不必剪切/粘贴$ebx
那么p/x*0x804a6ac
看起来我明白了:p/x{char*}0x804a6ac
给了我$18=0x69626d41
。编辑:哦,我刚看到杰瑞的帖子。这也奏效了。谢谢p/x*(char*)$ebx可以工作,也可以根据需要转换为任何其他类型,包括要重复的数组类型。但是强制转换更多的是类型化,如果没有它,您将尝试取消对泛型指针的引用。