我没有完整的源代码,而是带有符号的目标文件。有一条读线:
=> 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
我在第一行放了一个b,并且还在函数名中加了一个以确定。输入“1”后尝试p *(char**)$esp
,我得到:
0x80489da "\350\355\006"
这不是我的预期。我原本应该看到“1”。我也尝试过:
gdb x $esp
0xbffff0cc: 0x080489da
gdb x *0xbffff0cc
0x80489da <main+182>: 0x0006ede8
答案 0 :(得分:4)
如果你打破第一个功能(我假设你的意思是:“我在第一行放了一个b”)然后你看到的是返回地址。看起来你实际上是在看到调用phase_1的返回地址。
如果您正在寻找的是第一个参数,请尝试:
p *(char**)($esp+4);