旧电脑做php网站服务器,石家庄58同城,公司网站设计 杭州 推荐,东莞网站更详细的讲解和代码调试演示过程#xff0c;请参看视频用java开发C语言编译器如果你对机器学习感兴趣#xff0c;请参看一下链接#xff1a;机器学习#xff1a;神经网络导论我们的操作系统通过增添内核接口导出机制后#xff0c;已经可以作为平台#xff0c;运行应用程序…更详细的讲解和代码调试演示过程请参看视频用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 32call mainretfapi_putchar:mov edx, 1mov al, [esp 4]int 02Dhret%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.c3 使用命令gcc -m32 -fno-asynchronous-unwind-tables -s -c -o app.o app.c 来编译C语言代码4, 使用objconv 反汇编步骤3所得到的二进制文件 ./objconv -fnasm app.o app_u.asm5使用我们早先开发的java工具对反汇编得到的app_u.asm进行预处理去掉app_u.asm 里面一些无用的指令6使用nasm编译api_call.asm , nasm -o hlt.bat api_call.asm 得到二进制可执行文件hlt.bat7, 把hlt.bat的二进制数据加载到系统中执行便是执行了用C语言开发的应用程序。具体的操作步骤请参看视频上面的步骤是一系列步骤精简后的过程更详实的讲解和代码运行调试过程请参看视频。经过上述步骤后把得到的二进制文件加载到系统进行执行后所得结果如下这里写图片描述可见运行hlt命令后C语言开发的程序逻辑被执行字符C正确的显示到了控制台窗口里由此可见经过上述步骤我们是可以使用C语言在我们的系统内核基础上开发应用程序的。更详细的讲解还请参看视频。更多技术信息包括操作系统编译器面试算法机器学习人工智能请关照我的公众号这里写图片描述