MacOS环境-手写操作系统-45-C语言开发应用程序

简介: MacOS环境-手写操作系统-45-C语言开发应用程序

C语言开发应用程序

1.简介

前边跳了几节 一个是内容比较细碎 另一个是原老师的文章链接挂掉了


我也不太好做笔记 所以就跳过去啦 中间修复了一些bug和加了一些功能


也不是那么重要 所以就忽略啦


我们的操作系统通过增添内核接口导出机制后


已经可以作为平台 运行应用程序了


但目前应用程序的开发有一个不足就是


我们只能使用汇编语言开发应用程序 用汇编语言开发程序实在太累了


如果能使用C语言就好了

例如当我们想要开发一个在控制台上输出一个字符的应用程序


如果代码能用C语言这么写就好了(app.c):


void api_putchar(int c);
void main() {
    api_putchar('C');
    return;
}


如果上面的代码能编译成二进制文件 并能通过系统加载执行


那么在我们的操作系统上开发应用程序就不必要像以前那么痛苦


我们这一节要做的是 研究如何使用C语言开发运行在我们系统之上的应用程序


2.代码

实际上 我们用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语言开发的应用程序


3.编译和运行

编译运行后(注意makefile更新了)


运行后


切换焦点 输入hlt运行程序


打印了如下的结果


相关文章
|
1天前
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
9 0
|
1天前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
8 0
|
2月前
|
关系型数据库 MySQL 数据库
【Mac os系统】安装MySQL数据库
本文详细介绍了在Mac OS系统上安装MySQL数据库的步骤,包括下载、安装、配置环境变量、启动服务、授权设置以及解决常见问题,并提供了一些常用的MySQL命令。
104 0
【Mac os系统】安装MySQL数据库
|
3月前
|
Linux 虚拟化 iOS开发
部署06--MacOS安装VMware Fusion安装
部署06--MacOS安装VMware Fusion安装
|
2月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
68 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
2月前
|
虚拟化 数据安全/隐私保护 iOS开发
VMware——安装MacOS 系统教程(仅供学习交流)
VMware——安装MacOS 系统教程(仅供学习交流)
55 4
|
4月前
|
Java Shell 开发工具
03. 【Java教程】在 MacOS 上安装 Java
03. 【Java教程】在 MacOS 上安装 Java
44 1
|
4月前
|
JavaScript iOS开发 开发者
pnpm的安装与配置(Windows/macOS)
pnpm的安装与配置(Windows/macOS)
1236 0
|
4月前
|
资源调度 JavaScript iOS开发
yarn的安装与配置(Windows/macOS)
yarn的安装与配置(Windows/macOS)
368 0
|
5月前
|
编解码 Oracle iOS开发
VirtualBox虚拟机安装Mac OS X Lion系统详解
VirtualBox虚拟机安装Mac OS X Lion系统详解
271 1