c java 系统开发_java开发系统内核:使用C语言开发系统应用程序
更详细的讲解和代码调试演示过程,请参看视频
用java开发C语言编译器
如果你对机器学习感兴趣,请参看一下链接:
机器学习:神经网络导论
我们的操作系统通过增添内核接口导出机制后,已经可以作为平台,运行应用程序了,但目前应用程序的开发有一个不足就是,我们只能使用汇编语言开发应用程序,用汇编语言开发程序实在太累了,如果能使用C语言就好了,例如当我们想要开发一个在控制台上输出一个字符的应用程序,如果代码能用C语言这么写就好了(app.c):
void api_putchar(int c);
void main() {
api_putchar('C');
return;
}
如果上面的代码能编译成二进制文件,并能通过系统加载执行,那么在我们的操作系统上开发应用程序就不必要像以前那么痛苦。我们这一节要做的是,研究如何使用C语言开发运行在我们系统之上的应用程序。
实际上,我们用C语言开发内核的步骤,可以平移到开发应用程序上。我们开发内核时,实际上遵循着的基本逻辑是这样的:用汇编开发底层接口,然后用C语言调用汇编语言导出的接口,实现业务逻辑。然后把C代码编译成二进制文件,接着使用objconv 工具把C语言反编译成汇编语言,下一步就是把原来的用汇编开发的代码跟反编译后得到的汇编代码合二为一,最后用汇编编译器把整合起来的汇编代码编译成一个统一的二进制可执行文件。
我们用C语言开发应用程序也遵循上面的逻辑。首先我们用汇编语言导出内核API接口,用C语言调用汇编语言导出的接口完成业务逻辑的编写,接着把C语言代码编译成二进制,再使用objconv反汇编,最后把两个汇编语言代码合二为一,统一编译成一个可执行的二进制文件。
基于上面的逻辑步骤,我们第一步要做的就是用汇编语言导出api_putchar函数调用的接口,实现代码如下(api_call.asm):
[SECTION .s32]
BITS 32
call main
retf
api_putchar:
mov edx, 1
mov al, [esp + 4]
int 02Dh
ret
%include "app.asm"
我们先看api_putchar部分,前面我们讲过,内核所有api都对应一个编号,向控制台输出一个字符的api编号就是1,要调用对应api时,只要把对应编号放入寄存器edx, 同时把参数提交给指定寄存器,最后调用2D号中断就可以了。
在代码的前面,我们首先执行语句call main, 也就直接调用main函数,这意味着用C语言开发程序时,主入口函数必须是main, 所有C语言开发的程序代码编译成二进制文件后,然后反汇编成汇编程序,反汇编后的程序文件就是app.asm,通过include指令把app.asm的代码整合到api_call.asm中来,最后使用汇编编译器nasm 编译 api_call.asm 所得到的二进制文件就是用C语言开发的应用程序。
因此我们通过以下步骤就可以使用C语言来开发应用程序了:
1, 完成api_call.asm 在里面导出C语言程序所需要使用的接口
2, 使用C语言,通过接口调用完成业务逻辑的开发,例如完成前面所述的app.c
3, 使用命令gcc -m32 -fno-asynchronous-unwind-tables -s -c -o app.o app.c 来编译C语言代码,
4, 使用objconv 反汇编步骤3所得到的二进制文件, ./objconv -fnasm app.o app_u.asm
5,使用我们早先开发的java工具对反汇编得到的app_u.asm进行预处理,去掉app_u.asm 里面一些无用的指令
6,使用nasm编译api_call.asm , nasm -o hlt.bat api_call.asm 得到二进制可执行文件hlt.bat
7, 把hlt.bat的二进制数据加载到系统中执行便是执行了用C语言开发的应用程序。
具体的操作步骤请参看视频,上面的步骤是一系列步骤精简后的过程,更详实的讲解和代码运行调试过程,请参看视频。
经过上述步骤后,把得到的二进制文件加载到系统进行执行后,所得结果如下:
这里写图片描述
可见运行hlt命令后,C语言开发的程序逻辑被执行,字符C正确的显示到了控制台窗口里,由此可见,经过上述步骤,我们是可以使用C语言在我们的系统内核基础上开发应用程序的。
更详细的讲解还请参看视频。
更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述
c java 系统开发_java开发系统内核:使用C语言开发系统应用程序相关推荐
- eos 区块链 java 开发_EOS区块链用什么语言开发?
最近大热的EOS,代表了区块链技术发展到了新的阶段,那么EOS区块链用什么语言开发的呢?答案是C++. 学习区块链开发,主要学好3条公链就足够了,就是比特币.以太坊.EOS,因为他们分别是区块链1.0 ...
- linux系统最好的c类语言开发软件,Linux下基于C 语言开发即时通信软件.doc
Linux下基于C 语言开发即时通信软件 Linux下基于C++语言开发即时通信软件 关键词:聊天软件 文字聊天 Linux平台 C/S架构ICE中间件 Linux-based instant mes ...
- java银行取款_Java写简单的银行取钱系统
按ctrl+a 选中所有的代码删除,再复制下面的代码输入即可 import java.util.Scanner; public class 简单的银行取钱系统 //class的名字可以自己新建和这个一 ...
- tomcat用c语言开发服务,apache tomcat是什么语言开发的
通常情况下我们要自己建一个web服务器的话,直接去apache的官网: 下载的安装包,直接安装就可以了. 所以很多人觉得apache tomcat就是一个web 服务器程序,并且大多数情况下,直接简称 ...
- 【区块链技术开发】 关于Windows10平台Solidity语言开发环境配置
目录 1.安装 Node.js 2.安装 Solidity 编译器 3.安装 Remix IDE 4.安装 MetaMask 浏览器插件 5.环境配置与问题解决 6. 安装Ganache:以太坊区块链 ...
- 二级c语言考试系统安卓,无忧考吧二级c语言考试系统下载_无忧考吧二级c语言考试系统官方下载-太平洋下载中心...
无忧考吧二级c语言考试系统是一款可以帮助用户朋友们对全国计算机二级C语言考试进行模拟测试学习的考试系统,如果您对这一门课程并没有什么把握需要练习,这款考试模拟系统一定是你的最佳帮手. 软件截图1 基本 ...
- 二级c语言考试系统安卓,无忧考吧二级c语言考试系统下载
无忧考吧二级c语言考试系统是一款可以帮助用户朋友们对全国计算机二级C语言考试进行模拟测试学习的考试系统,如果您对这一门课程并没有什么把握需要练习,这款考试模拟系统一定是你的最佳帮手. 基本简介 C语言 ...
- php免费开源cms系统 th,三大免费开源的php语言cms系统 用好它们让你一天建好一个网站...
php语言只所以在web开发领域占据半壁江山,是因为它有太多的生态,成熟的框架体系,广泛的开源cms系统.建设网站的时候,都想提升开发效率,效率就是成本,如果你用原生php语言开发一个项目,既要设计数 ...
- java水印图片_JAVA实用案例之图片水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- java servlet 开发_Java之基于Servlet的Web开发简介
由于学习的过程中,接触到了这部分内容,所以特别的在这进行整理,分享给大家. 1.定义 Servlet是Java Servlet的简称,称为小服务程序或服务连接器: 2.原理 从原理上讲,Servlet ...
最新文章
- OPEN ERP相关财务的基本概念
- apns 服务器 php,PHP技术来查询APNs反馈服务器
- 性能测试工具MultiMechanize的使用介绍
- android 根据文件Uri获取图片url
- python数据拼接: pd.concat
- 属性 方法c语言,C语言如何实现C++中对象属性和方法
- 用BlockingExecutor限制任务提交
- Java基础——String类(一)
- Hystrix 简介和使用
- Web前端和后端开发的区别和要求
- 苹果新功能惹众怒,4000多家组织和个人签署公开信 敦促苹果放弃“儿童安全”功能...
- IDEA 编写JDBC 第一个示例
- c语言词法分析例子,实验一词法分析器实验报告示例
- 史上最全的 iOS 各种测试工具集锦,看看有没有你不知道的
- 平安智慧城市总部智慧政务事业部总监张巍:平安智慧城市大数据应用实践分享
- EBS 采购订单入库
- 编程需要高等数学吗_编程需要了解数学吗?
- MATLAB 2016b--神经网络工具箱中图形用户界面的使用
- 基于51单片机制作超声波避障小车+舵机控制
- PHP 发送电子邮件
热门文章
- [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(5)
- 【渝粤题库】陕西师范大学700005 遗传学
- 表示微型计算机系统稳定性,计算机基础知识(三)135
- es数据频繁的更新_es之文档更新过程中并发冲突问题
- 现代交换技术学习笔记001
- mysql 更新时间加数字_Mysql实战45讲笔记:8、聚合函数count
- pks系统如何添加服务器,pks服务器的上电步骤.pdf
- php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)
- Verilog HDL中模块参数传递的方法
- python声明编码为gbk_Python字符串编码坑彻底详细解决