【发布时间】:2023-03-12 05:06:01
【问题描述】:
我正在尝试探索汇编代码(x86、32 位、C 源代码)的调试。
我想了解如何在使用 gdb 时计算我的汇编代码中特定函数的堆栈帧的实际大小。
在弹出所有内容之前,框架的大小是%esp 和%ebp 之间的绝对差值与影响%esp 的每个值相加吗?
pushl %ebp
movl %esp, %ebp
subl $24, %esp
subl $48, 8(%ebp)
软件:GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
gcc -m32 -fno-asynchronous-unwind-tables -fno-pic -S main.c
gcc -c -m32 main.s -o main.out
gcc -g -m32 main.s -o main.out
gcc -m32 -g -o main main.s
as -a main.s
如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
ebp几乎无关紧要(优化的代码甚至不使用它)。这是入口时的esp与其在函数中的最小值之间的差异。