【发布时间】:2015-12-01 15:09:56
【问题描述】:
我正在学习 x86 汇编。我试图了解“退出程序”如何在 x86 上工作。我们有一个代码:
push ebp
mov ebp,esp
//Some stuff here
mov esp, ebp
pop ebp
ret
当处理器执行“ret”指令时:
EIP 将有值,从堆栈中弹出,即 0。
因此处理器将转到 0 地址并尝试执行不包含程序代码/可执行代码的指令。
那么,处理器到底发生了什么?是否有条件检查,例如if EIP = 0 -> exit program?Or if ESP out of bounds -> exit program?`处理器如何理解这条RET指令是程序的结束?
【问题讨论】:
-
“程序”和“退出”的概念仅在操作系统的上下文中才有意义。请查阅您的操作系统手册,了解如何以编程方式访问这些概念。 (在典型的桌面操作系统上,会有用于创建和退出进程的系统调用。)
-
".. 从堆栈中弹出,即 0。"你是怎么得出这个结论的?你的程序是不是叫做“从地址 0”?