天天看點

IDA Pro切換到16bit模式,分析BootLoader

最近想寫一篇關于Intel開機上電執行Reset Vector指令的文章,遂提取了公司筆記本晶片上的Bootloader,并用UEFITool提取其中BootBlock部分(Reset Vector位于BootBlock内部):

IDA Pro切換到16bit模式,分析BootLoader

[圖1,UEFITool加載提取的Bios image]

IDA Pro切換到16bit模式,分析BootLoader

[圖2,從Bios Image中提取BootBlock]

BootBlock的任務之一是将CPU從實模式切換到保護模式(16Bit Mode切換到32Bit Mode)。是以,BootBlock最開始部分是16Bit程式。然而,當我将提取的BootBlock拖進IDA Pro後發現,IDA Pro竟然将.text段解析為32Bit程式:

IDA Pro切換到16bit模式,分析BootLoader

[圖3,從IDA加載SecCore.bin]

和EDKII project中SecCore子產品的源碼(IntelFsp2WrapperPkg\Library\SecFspWrapperPlatformSecLibSample\Ia32\SecEntry.nasm)對比,感覺IDA将代碼變異了:

IDA Pro切換到16bit模式,分析BootLoader

 研究了一下,可能是要将IDA切換到16Bit Mode:

1.IDA Pro--View--"Open subviews"--Segments打開段寄存器:

IDA Pro切換到16bit模式,分析BootLoader

 記下.text段起止位址/Base/Class值

2.IDA Pro--"Edit"--Segments--"Create Segment",在彈出的Create a new segment對話框中,根據前一步記錄的Segment的值修改新.text段的值:

IDA Pro切換到16bit模式,分析BootLoader

3.勾選"Create a new segment"對話框中"16-bit segment"

IDA Pro切換到16bit模式,分析BootLoader

4.建立新Segment後,".text"段更加不堪入目,此時需要重新分析代碼段

IDA Pro切換到16bit模式,分析BootLoader

5.重新分析代碼段:框選需要分析的code--"Analyze seleced are"--在彈出的"Please Confirm"對話框中點選Force按鈕.IDA将重新分析代碼段,并生成下列代碼: