java开发系统内核:使用C语言开发系统应用程序

更详细的讲解和代码调试演示过程,请参看视频
用java开发C语言编译器

更详细的讲解和代码调试演示过程,请参看视频
如何进入google,算法面试技能全面提升指南

如果你对机器学习感兴趣,请参看一下链接:
机器学习:神经网络导论

更详细的讲解和代码调试演示过程,请参看视频
Linux kernel Hacker, 从零构建自己的内核

我们的操作系统通过增添内核接口导出机制后,已经可以作为平台,运行应用程序了,但目前应用程序的开发有一个不足就是,我们只能使用汇编语言开发应用程序,用汇编语言开发程序实在太累了,如果能使用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语言在我们的系统内核基础上开发应用程序的。

更详细的讲解还请参看视频。

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:


这里写图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,050评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,538评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,673评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,622评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,047评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,974评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,129评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,893评论 0 209
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,654评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,828评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,297评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,619评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,326评论 3 243
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,176评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,975评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,118评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,909评论 2 278

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,598评论 25 707
  • 汇编与C的交合调用 在这个例子中,源代码包含两个文件:foo.asm, 和 bar.c.程序入口在foo.asm ...
    望月从良阅读 1,785评论 0 6
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,186评论 2 35
  • 情理铭 闫贵忠 情不在多,至纯则真; 理不在深,守住就行。 世之情理,唯智可通。 情势不可逆,...
    闫贵忠阅读 377评论 0 4
  • 1. 模仿湖南儿歌《月亮粑粑》写一段荒诞不经然而押韵的文字(不用一韵到底,可以几句一变化): 月亮粑粑, 肚里坐个...
    起花生阅读 123评论 3 0