为什么打印(绝对值)在 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
这是我的汇编代码:
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