大家都知道UEFI已經變成這個世代中的BIOS代名詞,但是這個環境下在開發BIOS的時候最怕遇到甚麼事情呢?
答案就是: C語言指標的邊界檢查
指標這個東西在C的環境中讓人又愛又怕。愛的地方是因為指標可以任意的轉型態、任意的操作你想存取的記憶體區塊,但是往往致命的吸引力中就會有他無可避免的壞處!
例如,你可以宣告一個陣列 a[10]; 然後拿一個指標 p指向這個陣列
但是當你的code寫成 *(p+13) 時,就會是個大麻煩!
因為Compiler 並不會告訴你說,嘿! 兄弟你的指標超出存取範圍了! 然後當CODE執行到那邊的時候就出現當機或是難以解釋的事件發生! 往往悲劇就是出現在不注意的小地方~
所以BIOS工程師在撰寫CODE的時候就必須對於指標操作很清楚,不然在UEFI BIOS環境下一定會出現許許多多靈異事件的~ (以前Legacy BIOS最被忽略的是堆疊PUSH/POP沒對齊,現在變成指標 >.<)
不過可喜可賀的是我們家的BIOS工程師對於這一點都很講究啦~
沒有留言:
張貼留言