打開(kāi)文件,數(shù)據(jù)將以如下方式展示在我們面前。左邊是機(jī)器碼,右邊是反編譯文本。
![](https://file.elecfans.com/web2/M00/8C/10/poYBAGPaFpGAR9AzAAZJ9NhmHFY935.png)
很顯然,反編譯文本只是按照Ascii對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行編譯,所以能夠很好地恢復(fù)出來(lái)。而剩下的因?yàn)樵贏scii表中沒(méi)有對(duì)應(yīng)的編碼,所以也就不能恢復(fù)出來(lái)。
在扇區(qū)末尾可以很明顯的看到55aa結(jié)束標(biāo)志,而在之間填充的0完全是times 510 - ($-$$) db 0的功勞。如果不以0填充這些區(qū)域,程序拉起后的行為就不一定是我們所能夠預(yù)想的。
為了看懂剩下的區(qū)域內(nèi)容,使用ndisasm進(jìn)行反編譯。正常來(lái)說(shuō)我們可以得到下列結(jié)果,而從7C28到7DFC中間的內(nèi)容不過(guò)是簡(jiǎn)單重復(fù),沒(méi)有展示出來(lái)的必要。
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaFuCAfIGqAAJ5I1tjMnY660.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF3iAKiJpAABgkn3URW0184.png)
首先程序加載到7C00處,從這里進(jìn)行起跳;
然后數(shù)據(jù)對(duì)齊,并調(diào)用7C0B的程序;
7C0B命令裝載7c1E起始地址到ax,從1F到22要求端口傳輸字符串。
insb--輸入字符串到端口。
輸入字符串指令(Input String Instruction)。該指令是從某一指定的端口接受一個(gè)字符串,并存入一片存儲(chǔ)單元之中。輸入端口由DX指定,存儲(chǔ)單元的首地址和讀入數(shù)據(jù)的個(gè)數(shù)分別由ES:DI和CX來(lái)確定。在指令的執(zhí)行過(guò)程中,還根據(jù)標(biāo)志位DF對(duì)寄存器DI作相應(yīng)增減。該指令不影響任何標(biāo)志位。
Outsw—輸出字符串到端口。
輸出字符串指令(Output String Instruction)。該指令是把一個(gè)字符串輸入到指定的輸出端口中。輸出端口由DX指定,其輸出數(shù)據(jù)的首地址和個(gè)數(shù)分別由DS:SI和CX來(lái)確定。在指令的執(zhí)行過(guò)程中,還根據(jù)標(biāo)志位DF對(duì)寄存器SI作相應(yīng)增減。該指令的執(zhí)行不影響任何標(biāo)志位。
回到7C0E處,從0E到1D內(nèi)容作用如上文一致,不再解析。
7C0A有一個(gè)短跳轉(zhuǎn)到7C0A,即是要程序在此循環(huán),可是該命令存在空耗計(jì)算機(jī)資源嫌疑。
至此整個(gè)程序解析完畢,而剩余沒(méi)有解析的部分希望看客自行查找資料,這對(duì)于學(xué)習(xí)匯編與操作系統(tǒng)有好處。
三、運(yùn)行環(huán)境搭建
運(yùn)行環(huán)境使用VBox虛擬機(jī),也可以使用物理機(jī)驗(yàn)證。
Ⅰ.創(chuàng)建虛擬機(jī)。
新建
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF4-AIzflAAH-Kl8AVto242.png)
按圖填寫(xiě),下一步
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF5mAMMm5AAH0VhiVbWk346.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF8CAKNY4AAFSm8R45V8246.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaF8uAb9M_AAGx-fcYXQs713.png)
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaF9WAUGwrAAGVnOqaEl4977.png)
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaGEiAFfRSAAIXroAAvMM634.png)
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaGEyAND-BAAFCpvdT4ss153.png)
最后點(diǎn)擊創(chuàng)建。
Ⅱ.裝載.bin文件到虛擬硬盤(pán)。
使用李忠老師開(kāi)發(fā)的工具。
打開(kāi)按照如下方式寫(xiě)入即可。
![](https://file.elecfans.com/web2/M00/8C/97/pYYBAGPaGKOAHAMAAAD3x-j1MZA820.png)
Ⅲ.將盤(pán)片安裝到虛擬機(jī)。
![](https://file.elecfans.com/web2/M00/8C/11/poYBAGPaGMSAY2FDAAG-MpR2dw0920.png)
參考文獻(xiàn):
[1] General Software.[EB/OL]. https://cdn.embeddedts.com/resource-attachments/x86-edio-41.pdf
[2] 謝煥強(qiáng).精簡(jiǎn)32位Linux操作系統(tǒng)在X86上的設(shè)計(jì)與實(shí)現(xiàn)[D].2022.23-24.
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7527瀏覽量
88391 -
匯編
+關(guān)注
關(guān)注
2文章
214瀏覽量
25966 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
919瀏覽量
28336
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論