Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 为什么下面的汇编代码会崩溃?_Pointers_Assembly_Crash - Fatal编程技术网

Pointers 为什么下面的汇编代码会崩溃?

Pointers 为什么下面的汇编代码会崩溃?,pointers,assembly,crash,Pointers,Assembly,Crash,我是学校里的一个comp-sci学生学习大会。 我浏览了书中的一些问题,我看到一个问题,问为什么下面的代码会崩溃 /* 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

我是学校里的一个comp-sci学生学习大会。 我浏览了书中的一些问题,我看到一个问题,问为什么下面的代码会崩溃

/*
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
,因为它将基本指针设置为堆栈上的四个字节,并且由于我们将堆栈指针设置为基本指针,它也将使堆栈指针向堆栈上的四个字节。但是我仍然不明白为什么这会使程序崩溃? 起初我认为这是因为返回语句,因为
ret
将获取堆栈指针指向的任何值,并将其移动到指令指针。但是在我删除了
add$4,%ebp
行之后,我删除了
ret
station,一切都很好(这意味着
ret
甚至不是必需的)。 那么是什么导致程序崩溃呢? 我正在使用MINGW 32位windows GAS编译器。 谢谢你的帮助
谢谢!!

不同的汇编语言有不同的约定+语法。最好指定您的解释正确的语言。至于如果您删除
ret
,为什么它不会崩溃……您真幸运。