1

我没有完整的源代码,但有一个带有符号的目标文件。有一条读线:

=> 0x080489cd <+169>:   call   0x8049275 <read_line>
   0x080489d2 <+174>:   mov    %eax,(%esp)
   0x080489d5 <+177>:   call   0x8048d59 <phase_1>

in the function:
 8048d59:   55                      push   %ebp
 8048d5a:   89 e5                   mov    %esp,%ebp
 8048d5c:   83 ec 08                sub    $0x8,%esp

我将 ab 放在第一行,并在函数名称中添加了一个以确保。输入“1”后尝试p *(char**)$esp,我得到:

0x80489da "\350\355\006"

这不是我所期望的。我预计会看到“1”。我也试过:

gdb x $esp
0xbffff0cc: 0x080489da

gdb x *0xbffff0cc

0x80489da <main+182>: 0x0006ede8
4

1 回答 1

4

如果你在第一个喜欢的函数上中断(我假设这就是你的意思:“我把 ab 放在第一行”)那么你看到的是返回地址。看起来您实际上是从调用 phase_1 看到返回地址。

如果您要查找的是第一个参数,请尝试:

p *(char**)($esp+4);
于 2012-10-06T19:37:10.090 回答