« 私的メモ | メイン | 地雷だったのね »

2007年10月16日

 ■ 私的メモ2

AWARD BIOS は比較的簡単であるが、AMI BIOS は(ちょっとだけ)難易度が高い。

ここ数年、AMI BIOS を採用している ASUSTEK製のマザーボード "P5B-Delux" のBIOSを改造してみる。
BIOSファイルをダウンロードし解凍すると、 P5B-ASUS-Delux-1216.ROM というファイルになる。

ちょっと長ったらしいファイル名なので、"P5BD-1216.ROM" というファイル名に変更する。


管理者モードでコマンドプロンプトを開き、USモードにする。
BIOSファイルより、"1B"モジュールを抜き出す。
AMI1.jpg


実際のPCの物理メモリの内容をダンプするツールを起動する。
WindowsVista(x64)では HWDIRECT が動かなかった。
WinHEXを起動しても、Vista(x64)では覗けないので、WindwsXPに切り替えてWinHEXを起動する。
AMI2.jpg


"CTRL+F"で検索画面を出し、"((pp(("の文字列検索を行う。
この場合のアドレスを確認する。 アドレスは、0xFF0EC である。
AMI3.jpg


先ほど抽出した "1B" モジュールをバイナリエディタで読み込む。
同時に、"DELL.BIN" もバイナリエディタに読み込む。
"((pp(("の文字列検索を行い、"DELL.BIN" の貼り付け位置をきめて、貼り付ける。
AMI4.jpg


貼り付けを開始したアドレスを 1バイト単位に区切り、逆順に並び替える。
物理メモリのアドレスを基準にして考える。
この場合、"((pp((" が 0xFF0EC なので、
0xFF110 → 10 F1 0F

"RSDT" の文字列を検索し、その直後の数値に +4 する。 0x28 → 0x2C
さらに、"DELL " , "M07 " を埋め込む。

さらに、"RSDT" の "R" の文字から 41 バイト目 (0x28 = 40なので) に
アドレスの "10 F1 0F" を埋め込む。
AMI5.jpg


"XSDT" の文字列を検索し、その直後の数値に +8 する。 0x2C → 0x34
さらに、"DELL " , "M07 " を埋め込む。

さらに、"XSDT" の "X" の文字から 45 バイト目 に アドレスの "10 F1 0F" を埋め込む。
AMI6.jpg


"1B" モジュールを上書き保存し、バイナリエディタを終了する。

コマンドプロンプトより、"1B" モジュールを書き戻す。
AMI7.jpg


ASUS製マザーボード特有の処理として、"ASUSTEK" の文字列を特定の箇所に埋め込む必要がある。
P5B-Delux の場合、0x10000 のアドレスに埋め込んでやらなければいけない。
これをしないと、起動時に "OVER CLOCK ERROR" でまともに起動しなくなるのだ。
AMI8.jpg

BIOSをアップデートしたら、OSを起動し、モジュールとアドレスを確認する。

投稿者 pikachu7500 : 2007年10月16日 22:05

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)