小華的部落格: DIY~~Dump BIOS code

搜尋此網誌

網頁

星期四, 5月 08, 2008

DIY~~Dump BIOS code

今天幫同事寫了一個Dump BIOS code的程式在Vista下去把BIOS code dump 出來,雖然是一個很簡單的程式但是卻出現一些小問題啦!

目前我是透過VB6去繪製畫面,然後透過C撰寫的IO.DLL與IO.SYS來存取4G頂端記憶體位址線的內容,由於VB每次存取時都是4Bytes 為單位,然後我又會去更新畫面,因此Dump 2MB大小的BIOS要花掉好幾分鐘的時間 ...光是看到就傻眼了!

不過目前還沒去解決這個問題,因為懶的去改C的部份,不過也算是一種體驗啦!
因為沒實做過都不知道自己會遇到什麼問題,呵呵!!!


或許你會問我說BIOS廠商不是提供WinFlash可以去Dump了嗎? 幹麻還自己搞一個,因為多點選擇嘛! (DOS下的還沒寫,找個時間在寫一下 >.<) 而且我目前拿到的P廠商WinFlash還有問題,還沒辦法做這部份的動作,所以就自己DIY囉~~

可能你還會問我說Dump出來幹麻? 因為我要拿來比對BIOS 啦,由於有些設定BIOS是開機後才會回寫回去BIOS ROM,所以進入OS後把BIOS傾印出來後比對原來燒進去的BIOS,這樣子就可以知道在Runtime過程中BIOS回寫了哪些東西回去BIOS ROM(因為遇到DMI字串找不到的問題,所以比對一下目前BIOS是放在哪邊)。

7 則留言:

匿名 提到...

小華您好,
一直有在看您的blog,內容很充實也讓我學到很多。
最近有個問題關於CPU的,一顆T9300的12.5頻的CPU,在POST畫面可以顯示12.5倍頻,但在Windows底下,用CPU-Z等一些工具程式郤只能顯示12倍頻,不知您是否有遇過相關問題。

匿名 提到...

Harrison,
你是:
read 4byte->show 4byte的方式 dump 2MB BIOS, or:
read 4byte until complete 2MB BIOS, then show ?

還有,進OS後 BIOS content不會被 modified;所以,似乎不用更新...

*還是有我沒想到的問題?

liaoo

匿名 提到...

[To 發表"T9300"匿名的那位]
有.5的倍頻是我第一次看到...不管如何,倍頻x外頻 = core freq. 有符合就好了 !
另外,假如真是12.5而cpuz顯示12,那應該是cpuz版本問題或是cpuz還沒有support這一顆吧 !

F.Y.I

小華的部落格 提到...

我是read 4byte->show 4byte 的方式 dump 2MB BIOS,不過就算是讀完2MB在show問題也是一樣啦,因為我是透過DLL方式去呼叫IO Driver來讀取的,所以你說的方式要改IO Driver,不過我目前還沒修正,因此用VB6去寫這個Tool的時候會遇到這個問題啦!

另外進OS後BIOS content理論上不會被改,會開發這個工具是因為目前P廠商給我同事的winflash不能做這件事情,因此我才會去寫這個無聊的工具啦!

而EFI BIOS在POST過程會修改一些NV variable,所以只是幫同事去dump BIOS 出來然後跟燒進去的做比較,比較看看P廠商改了哪些地方然後又沒告知我們啦!

而關於外頻的那個問題我沒注意過,但BIOS在開機過程中會去得到資訊然後顯示,不過顯示出來的資訊可能會跟CPUZ顯示的不同,這是因為每家BIOS做法不同,有些是直接讀資訊,有些是靠計算,所以你可能要查一下你們家的BIOS是靠計算後的值顯示在POST畫面中,還是靠讀值的方式來顯示!

匿名 提到...

其實,這樣的小工具是有用的...!因為,能解決問題,能幫助debug的就是好工具!

小華的部落格 提到...

恩恩,收到! 能幫助debug的就是好工具!^^

匿名 提到...

以前我也遇上類似需求.

要確保自己寫的 WinFlash, 能正確寫入到 EEPROM.
所以開 Shadow Memory 去讀真正燒到 EEPROM 的 BIOS,
跟 download BIOS.ROM file 做比對. 然後寫個 Aging Tool,
讓它自動跑上 1000 次.

不然那年頭把 BIOS 燒壞掉後, 可是要拆機殼, 把 EEPROM 挖出來,
用燒錄機然能解決.


從文中看來, EFI 是把
1. NV Variable 回寫到 EEPROM 中 ?
2. 還是讀取 CMOS 設定值, 然後修改完, 直接填到 Shadow ROM in memory ?

寫入地方, 會決定到底去 EEPROM or SHADOW ROM 挖 BIOS 來比對.

VB 單一 data type 最大值是 2 OR 4 BYTE.
但你也可以用 Array 形式, 做一次大量讀取.