0

这是我的组装代码:

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

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

还有一个问题:我知道ESP寄存器查看堆栈的底部,可以说它的地址A。movl $0x80484d0,(%esp)当这条指令发生时会发生什么esp?我的意思是当某些信息设置为espesp应该更改为 x80484d0 的 A + 大小时?看看esp堆栈的底部?这张图片应该让我的问题更清楚。我知道我在某个地方弄错了。谢谢你。

4

1 回答 1

1

print打印它的论点。这里,参数是整数0x80484d0,十进制是134513872

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

x/1s 0x80484d0

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

print (char *) 0x80484d0
于 2015-05-13T17:47:07.457 回答