正确的程序退出
编辑教程正确的程序退出
在第1课中成功地学习了如何执行系统调用之后,我们现在需要了解内核中最重要的系统调用之一,sys_exit。
注意在我们的“Hello, world!”'程序运行,我们有一个分割错误?好吧,计算机程序可以被认为是一长串指令,被载入内存并被分成若干段(或若干段)。这个通用的内存池在所有程序之间共享,可以用来存储变量、指令、其他程序或其他任何东西。每个段都有一个地址,以便以后可以找到存储在该段中的信息。
要执行加载在内存中的程序,我们使用全局标号_start:来告诉操作系统可以在内存中找到并执行程序的位置。然后按照程序逻辑顺序访问内存,程序逻辑确定了下一个要访问的地址。内核跳转到内存中的那个地址并执行它。
告诉操作系统应该在哪里开始执行,在哪里停止执行,这一点很重要。在第1课中,我们没有告诉内核在哪里停止执行。因此,在我们调用sys_write之后,程序继续在内存中依次执行下一个地址,这个地址可以是任何地址。我们不知道内核试图执行什么,但它导致阻塞和终止进程,而不是给我们留下'分割错误'的错误消息。在所有程序的末尾调用sys_exit将意味着内核确切地知道何时终止进程并将内存返回给常规池,从而避免出现错误。
写我们的程序
Sys_exit有一个简单的函数定义。在Linux系统调用表中,它被分配为OPCODE 1,并通过EBX传递一个参数。
为了执行这个函数,我们需要做的就是:
使用0加载EBX将0传递给函数,表示“零错误”。
用1加载EAX来调用sys_exit。
然后在libc上使用INT 80h请求一个中断。
然后编译、链接并再次运行它。
注意:只有在每个课程中添加的新代码才会被注释。
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟