为什么以下汇编代码崩溃?

时间:2014-09-22 23:26:57

标签: pointers assembly crash

我是一名学生在学校学习集会。  我正在浏览书中的一些问题,我看到一个问题,为什么以下代码会崩溃?

/*
gcc -o crashCity.exe crashCity.s
*/
.text
    .global _main
_main:  
    nop
    pushl %ebp
    movl %esp, %ebp
    addl $4, %ebp
    movl $0, %eax
    movl %ebp, %esp 
    popl %ebp
    ret

我知道导致程序崩溃的行是addl $4, %ebp,因为它将基本指针设置为堆栈的四个字节,并且因为我们将堆栈指针设置为基指针,所以它也将使堆栈指针向上移动4个字节。但是我仍然不明白为什么会导致程序崩溃? 起初我认为这是因为返回语句,因为ret将获取堆栈指针指向的值,并将其移动到指令指针。但是在我删除add $4, %ebp行之后,我删除了ret声明,一切正常(意味着ret甚至不是必需的。 是什么导致程序崩溃? 我正在使用MINGW 32位Windows GAS编译器。 任何帮助表示赞赏 谢谢!

0 个答案:

没有答案