【发布时间】:2015-01-10 10:37:27
【问题描述】:
这是我的代码:
17 mov ebx,msg
18 mov edx,5
19 push ebx
我正在使用 gdb 进行调试,这是我的输出:
Breakpoint 1, print () at hello.asm:17
(gdb) info register sp
sp: 0xbffff37c
(gdb) info stack
#0 print () at hello.asm:17
(gdb) step
(gdb) info register sp
sp: 0xbffff37c
(gdb) info stack
#0 print () at hello.asm:18
(gdb) step
(gdb) info register sp
sp: 0xbffff378
(gdb) info stack
#0 print () at hello.asm:19
很明显
push ebx
'递减' register sp 4 个字节。但是当我键入时
info stack
我仍然在 hello.asm:19 看到 print()
我的问题是,什么是 info stack 显示给我,什么是 info register sp 显示给我?堆栈寄存器和信息堆栈之间有什么关系?
【问题讨论】:
-
您是否设置了赏金来奖励其中一个答案,或者您错过了信息?我的意思是,你已经得到了 2 个正确答案,还是没有?否则你需要说明你仍然不明白的地方。
-
@Blechdose 我不明白当前的答案。
-
我认为你的问题有一个问题,标题是“堆栈和堆栈框架有什么区别?”在问题中,您实际上提出了一些不同的问题。你问软件gdb“info stack”和“info register esp”的两个命令有什么区别。
-
也许这有助于理解什么是栈帧:stackoverflow.com/a/3700219/4394435