为什么打印(绝对值)在 gdb 中返回 ASCII 码

Why does print (absolute value) gives me back ASCII code in gdb

这是我的汇编代码:

 0x0804841d <+0>:   push   %ebp
 0x0804841e <+1>:   mov    %esp,%ebp
 0x08048420 <+3>:   and    [=10=]xfffffff0,%esp
 0x08048423 <+6>:   sub    [=10=]x20,%esp
 0x08048426 <+9>:   movl   [=10=]x8,0x1c(%esp)
 0x0804842e <+17>:  movl   [=10=]x80484d0,(%esp)
 0x08048435 <+24>:  call   0x80482f0 <printf@plt>
=>0x0804843a <+29>: leave  
 0x0804843b <+30>:  ret  

当我输入 print 0x80484d0 时,它返回 = 134513872,我知道它代表一个字符串 "asdfsfd"。所以我的问题是,为什么 gdb 返回 ASCII 代码而不是真正的字符串,以及如何更改我的选项以使 gdb 显示字符串。

还有一个问题:我知道 ESP 寄存器查看堆栈的底部让我们说它是地址 A。movl [=14=]x80484d0,(%esp) 当这条指令发生时 esp 会发生什么?我的意思是,当某些信息设置为 esp 时,不应该将 esp 更改为 A + x80484d0 的大小吗?使 esp 查看堆栈底部? This image should make my question clearer。我知道我在某个地方弄错了。谢谢。

print 打印其参数。这里,参数是整数 0x80484d0,十进制是 134513872.

如果你想打印一个字符串,你可以使用eXamine命令,要求1个字符串。例如:

x/1s 0x80484d0

或者,您也可以打印一个表达式:

print (char *) 0x80484d0