c java 系统开发_java开发系统内核:使用C语言开发系统应用程序
更詳細的講解和代碼調試演示過程,請參看視頻
用java開發(fā)C語言編譯器
如果你對機器學習感興趣,請參看一下鏈接:
機器學習:神經網絡導論
我們的操作系統(tǒng)通過增添內核接口導出機制后,已經可以作為平臺,運行應用程序了,但目前應用程序的開發(fā)有一個不足就是,我們只能使用匯編語言開發(fā)應用程序,用匯編語言開發(fā)程序實在太累了,如果能使用C語言就好了,例如當我們想要開發(fā)一個在控制臺上輸出一個字符的應用程序,如果代碼能用C語言這么寫就好了(app.c):
void api_putchar(int c);
void main() {
api_putchar('C');
return;
}
如果上面的代碼能編譯成二進制文件,并能通過系統(tǒng)加載執(zhí)行,那么在我們的操作系統(tǒng)上開發(fā)應用程序就不必要像以前那么痛苦。我們這一節(jié)要做的是,研究如何使用C語言開發(fā)運行在我們系統(tǒng)之上的應用程序。
實際上,我們用C語言開發(fā)內核的步驟,可以平移到開發(fā)應用程序上。我們開發(fā)內核時,實際上遵循著的基本邏輯是這樣的:用匯編開發(fā)底層接口,然后用C語言調用匯編語言導出的接口,實現業(yè)務邏輯。然后把C代碼編譯成二進制文件,接著使用objconv 工具把C語言反編譯成匯編語言,下一步就是把原來的用匯編開發(fā)的代碼跟反編譯后得到的匯編代碼合二為一,最后用匯編編譯器把整合起來的匯編代碼編譯成一個統(tǒng)一的二進制可執(zhí)行文件。
我們用C語言開發(fā)應用程序也遵循上面的邏輯。首先我們用匯編語言導出內核API接口,用C語言調用匯編語言導出的接口完成業(yè)務邏輯的編寫,接著把C語言代碼編譯成二進制,再使用objconv反匯編,最后把兩個匯編語言代碼合二為一,統(tǒng)一編譯成一個可執(zhí)行的二進制文件。
基于上面的邏輯步驟,我們第一步要做的就是用匯編語言導出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號中斷就可以了。
在代碼的前面,我們首先執(zhí)行語句call main, 也就直接調用main函數,這意味著用C語言開發(fā)程序時,主入口函數必須是main, 所有C語言開發(fā)的程序代碼編譯成二進制文件后,然后反匯編成匯編程序,反匯編后的程序文件就是app.asm,通過include指令把app.asm的代碼整合到api_call.asm中來,最后使用匯編編譯器nasm 編譯 api_call.asm 所得到的二進制文件就是用C語言開發(fā)的應用程序。
因此我們通過以下步驟就可以使用C語言來開發(fā)應用程序了:
1, 完成api_call.asm 在里面導出C語言程序所需要使用的接口
2, 使用C語言,通過接口調用完成業(yè)務邏輯的開發(fā),例如完成前面所述的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,使用我們早先開發(fā)的java工具對反匯編得到的app_u.asm進行預處理,去掉app_u.asm 里面一些無用的指令
6,使用nasm編譯api_call.asm , nasm -o hlt.bat api_call.asm 得到二進制可執(zhí)行文件hlt.bat
7, 把hlt.bat的二進制數據加載到系統(tǒng)中執(zhí)行便是執(zhí)行了用C語言開發(fā)的應用程序。
具體的操作步驟請參看視頻,上面的步驟是一系列步驟精簡后的過程,更詳實的講解和代碼運行調試過程,請參看視頻。
經過上述步驟后,把得到的二進制文件加載到系統(tǒng)進行執(zhí)行后,所得結果如下:
這里寫圖片描述
可見運行hlt命令后,C語言開發(fā)的程序邏輯被執(zhí)行,字符C正確的顯示到了控制臺窗口里,由此可見,經過上述步驟,我們是可以使用C語言在我們的系統(tǒng)內核基礎上開發(fā)應用程序的。
更詳細的講解還請參看視頻。
更多技術信息,包括操作系統(tǒng),編譯器,面試算法,機器學習,人工智能,請關照我的公眾號:
這里寫圖片描述
總結
以上是生活随笔為你收集整理的c java 系统开发_java开发系统内核:使用C语言开发系统应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java socket 判断断网_jav
- 下一篇: java fx 内置图标_图标 – 如何