UEFI做爲目前較爲流行的一套X86架構初始化的標準框架,已受到業界內的普遍承認。而其中不少編程所採用的思想確實值得學習。今天總結下UEFI的框架下修改代碼的一點小經驗,僅供菜鳥參考。
先列乾貨,具體的小結後續補充:
1. 明確你要的某個功能的實現邏輯,都須要在哪一個位置添加代碼。
(很重要,這決定着你的方案是否可行重要前提,一旦此步驟錯誤,後續的代碼實現也會因爲代碼框架的不合適而徹底崩塌)
2. 代碼須要良好的封裝性,高內聚性,低耦合性。秉着此原則。筆者建議寫代碼時從最終功能開始寫起,用到什麼變量,GUID,或者頭文件定義,就去添加什麼。這樣能保證你添加的都是你須要的,且思路不會亂。
3. UEFI框架下常常會涉及到一些GUID,包括跨Pkg的Lib調用,在此也會小結一下。
OK, 乾貨就這幾點,用筆者目前遇到的一個小問題--"BIOS Setup下UserPassWord重複設置密碼能夠成功的功能"爲例進行說明。html
1. 流程梳理程序員
a. 密碼的存儲和校驗通常多采用HASH值校驗的方式,優勢【安全,簡單】
b. BIOS下的密碼流程:編程
(CRB代碼中提供了對AdminPassword的過往三次密碼重複校驗,其實現的流程比較複雜一些,可是其原理應該是經過對過去三次設置的密碼進行Hash值存儲校驗,且須要按照順序存儲,畢竟只能存儲過去的三次。這個地方應該使用了相似隊列的方案,先進先出)安全
2. 方案設計架構
2.1 在最終保存密碼的時候,設置一個Variable存儲當前UserPassword的Hash框架
2.2 在輸入UserPassword後,讀取上一次設置的密碼Hash,與當前輸入的密碼Hash進行對比。判斷是否能夠被寫入函數
3. 編碼實現學習
3.1 設置保存UserPassword的Hash值,咱們僅須要拿到當前輸入密碼的字符串,而後獲得Sha256編值,再經過gRT->SetVariable的服務存儲保存便可。初步編寫的函數以下: 編碼
3.2 用戶輸入密碼後,在作完複雜度校驗後,添加UserPassWord的重複驗證,代碼以下: spa
3.3 最終將SetVariable的函數添加至BIOS保存退出時,設置密碼的位置便可。
小結梳理:
最終將SetVariable的函數添加至BIOS保存退出時,設置密碼的位置便可。
此Bug梳理以後其實挺簡單的,回想本身的解問題思路,應該注意的幾個點主要以下:
a. 理清處原有的AdminPassword的檢驗機制,學習其的一些處理方法
b. 編碼時,對GUID和一些Lib庫的調用有點不夠清晰,也是經過本次整理從新梳理了下GUID的用法和Lib庫的調用。(後續着重總結)
c. 有一些過程功能函數,僅限在某個.c文件內部使用,這種狀況下,果斷考慮重寫一套函數供本身使用。不要爲了外部調用原有函數而花費過多無用的時間。
d. 最最重要的一點,寫代碼時必定要明確需求,本身要寫什麼,在哪一個地方寫?而後從最根本的需求處入手,須要什麼就添加什麼,這樣才能穩住陣腳,從容應對。
針對這次解決的一些小Bug,作以上總結,給同爲程序猿的咱們,留下些許的足跡。
一個普通程序員的成長路程,歡迎關注個人公衆號,茫茫人海,能與你相遇既是有緣。哈哈
原文出處:https://www.cnblogs.com/szhb-5251/p/11518521.html