我正在尝试学习如何理解汇编程序中的 c 函数。我使用“gcc code.c -m32 -o code -S -fno-stack-protector”编译了以下 c 程序
#include <stdio.h>
void function( int a, int b, int c )
{
char buffer1[5];
char buffer2[10];
}
void main()
{
function( 1, 2, 3 );
}
汇编输出如下:
.section __TEXT,__text,regular,pure_instructions
.globl _function
.align 4, 0x90
_function:
pushl %ebp
movl %esp, %ebp
subl $28, %esp
movl 16(%ebp), %eax
movl 12(%ebp), %ecx
movl 8(%ebp), %edx
movl %edx, -4(%ebp)
movl %ecx, -8(%ebp)
movl %eax, -12(%ebp)
addl $28, %esp
popl %ebp
ret
.globl _main
.align 4, 0x90
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $1, (%esp)
movl $2, 4(%esp)
movl $3, 8(%esp)
call _function
addl $24, %esp
popl %ebp
ret
.subsections_via_symbols
esp 和 ebp 寄存器不能相等,因为定义 int a,b,c 的偏移量在 _main 和 _function 中不同。哪一行从 ebp 中减去 4?
谢谢!