打開文件,數(shù)據(jù)將以如下方式展示在我們面前。左邊是機器碼,右邊是反編譯文本。

很顯然,反編譯文本只是按照Ascii對二進制數(shù)據(jù)進行編譯,所以能夠很好地恢復(fù)出來。而剩下的因為在Ascii表中沒有對應(yīng)的編碼,所以也就不能恢復(fù)出來。
在扇區(qū)末尾可以很明顯的看到55aa結(jié)束標(biāo)志,而在之間填充的0完全是times 510 - ($-$$) db 0的功勞。如果不以0填充這些區(qū)域,程序拉起后的行為就不一定是我們所能夠預(yù)想的。
為了看懂剩下的區(qū)域內(nèi)容,使用ndisasm進行反編譯。正常來說我們可以得到下列結(jié)果,而從7C28到7DFC中間的內(nèi)容不過是簡單重復(fù),沒有展示出來的必要。


首先程序加載到7C00處,從這里進行起跳;
然后數(shù)據(jù)對齊,并調(diào)用7C0B的程序;
7C0B命令裝載7c1E起始地址到ax,從1F到22要求端口傳輸字符串。
insb--輸入字符串到端口。
輸入字符串指令(Input String Instruction)。該指令是從某一指定的端口接受一個字符串,并存入一片存儲單元之中。輸入端口由DX指定,存儲單元的首地址和讀入數(shù)據(jù)的個數(shù)分別由ES:DI和CX來確定。在指令的執(zhí)行過程中,還根據(jù)標(biāo)志位DF對寄存器DI作相應(yīng)增減。該指令不影響任何標(biāo)志位。
Outsw—輸出字符串到端口。
輸出字符串指令(Output String Instruction)。該指令是把一個字符串輸入到指定的輸出端口中。輸出端口由DX指定,其輸出數(shù)據(jù)的首地址和個數(shù)分別由DS:SI和CX來確定。在指令的執(zhí)行過程中,還根據(jù)標(biāo)志位DF對寄存器SI作相應(yīng)增減。該指令的執(zhí)行不影響任何標(biāo)志位。
回到7C0E處,從0E到1D內(nèi)容作用如上文一致,不再解析。
7C0A有一個短跳轉(zhuǎn)到7C0A,即是要程序在此循環(huán),可是該命令存在空耗計算機資源嫌疑。
至此整個程序解析完畢,而剩余沒有解析的部分希望看客自行查找資料,這對于學(xué)習(xí)匯編與操作系統(tǒng)有好處。
三、運行環(huán)境搭建
運行環(huán)境使用VBox虛擬機,也可以使用物理機驗證。
Ⅰ.創(chuàng)建虛擬機。
新建

按圖填寫,下一步






最后點擊創(chuàng)建。
Ⅱ.裝載.bin文件到虛擬硬盤。
使用李忠老師開發(fā)的工具。
打開按照如下方式寫入即可。

Ⅲ.將盤片安裝到虛擬機。

參考文獻(xiàn):
[1] General Software.[EB/OL]. https://cdn.embeddedts.com/resource-attachments/x86-edio-41.pdf
[2] 謝煥強.精簡32位Linux操作系統(tǒng)在X86上的設(shè)計與實現(xiàn)[D].2022.23-24.
-
計算機
+關(guān)注
關(guān)注
19文章
7662瀏覽量
90769 -
匯編
+關(guān)注
關(guān)注
2文章
214瀏覽量
26564 -
虛擬機
+關(guān)注
關(guān)注
1文章
966瀏覽量
29353
發(fā)布評論請先 登錄
計算機安全使用常識
什么是計算機系統(tǒng)、計算機硬件和計算機軟件?
計算機組成原理 精選資料分享
計算機開機啟動過程詳解 精選資料分享
計算機組成期末復(fù)習(xí) 精選資料分享
微型計算機原理及應(yīng)用
計算機應(yīng)用
5. 電子計算機的應(yīng)用,計算機應(yīng)用基礎(chǔ)(試卷版)5|計算機應(yīng)用基礎(chǔ)試卷 精選資料分享
計算機組成原理與匯編語言程序設(shè)計

計算機組成原理與匯編語言習(xí)題一
計算機的機器語言和匯編語言與高級語言的詳細(xì)資料介紹
構(gòu)建 4 位計算機:匯編語言和匯編器(第 2 部分)

計算機啟動的細(xì)節(jié)與匯編Demo的拆解1

計算機啟動的細(xì)節(jié)與匯編Demo的拆解2

評論