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語言在我們的系統核心基礎上開發應用程式的。
更詳細的講解還請參看視訊。
更多技術資訊,包括作業系統,編譯器,面試演算法,機器學習,人工智慧,請關照我的公眾號:
相關文章
- Java實用系統開發指南Java
- 開發Android系統應用Android
- 鴻蒙系統應用開發之開發準備鴻蒙
- java、.net、php等語言開發商城系統優劣勢JavaPHP
- to《Java實用系統開發指南》作者Java
- 急需……《JAVA實用系統開發指南》Java
- 糖果世界模式系統應用開發模式
- Windows 應用開發的系統要求Windows
- 鴻蒙系統應用基礎開發鴻蒙
- 用C#開發Windows服務監控系統使用C#Windows
- 《Java實用系統開發指南》初感Java
- 系統維護開發核心祕籍
- 如何開發DAPP系統|去中心化應用系統模式APP中心化模式
- ERP系統開發 ERP系統詳解及應用
- 消除遊戲/猜成語/系統開發/成語猜謎/Python程式語言遊戲Python
- 開源的大型商城系統,支援多程式語言二次開發_OctShop
- 《Java實用系統開發指南》和《JAVA與模式》?Java模式
- 量化合約開發(原始碼)丨量化合約系統開發(海外版)丨量化合約系統開發(多語言)原始碼
- 元宇宙NFT鏈遊開發(農人計劃系統開發)Solidity程式語言元宇宙Solid
- 微商複合模式系統開發(開發系統模式)模式
- DeFi系統開發|DeFi質押模式系統開發模式
- SWP智慧合約語言系統技術開發搭建
- owl - Go語言開發的分散式監控系統Go分散式
- Java實用系統開發指南的疑問Java
- 狗屎書籍《Java實用系統開發指南》Java
- DAPP——分散式應用系統開發分析APP分散式
- 分投趣fintoch系統合約開發分析(Solidity程式語言)Solid
- 量化/合約跟單/系統程式設計開發/策略交易開發技術/Python程式語言程式設計Python
- 合約量化交易對沖策略系統開發應用程式
- 量化跟單系統對沖交易策略Python系統程式設計開發技術語言Python程式設計
- 理財分紅系統開發-分紅系統開發
- 使用Go語言開發iOS應用(Swift版)GoiOSSwift
- 量化交易系統極速開發/Python語言/現貨量化開發技術Python
- 陪診系統小程式開發
- Panorama系統程式開發規範
- 語音直播系統原始碼開發語音直播系統部署搭建原始碼
- 索拉迪(SolaRoad)系統開發技術/Solidity語言Solid
- 為什麼中國開發不出流行的作業系統和程式語言作業系統