2011-03-21 100 views
4

提供的答案here是一個非常棒的技巧。爲了我自己的啓發,我想學習創建這種類型的程序。從文本創建COM文件

是否有一個很好的庫,我可以用它來確保我的輸出完全是ASCII?或者我會開始使用哪些工具來生成這種類型的輸出?我知道我可能會創建一個16位應用程序,但我是否也可以生成32位應用程序?

我發現MSFT的debug.exe程序有一個彙編程序,它可以處理這個問題,但是我從中得到的輸出並不完全是ASCII。另外,當拆解謝繼雷'Lenik的答案中提供的程序時,我看不到他在的位置寫入屏幕。這種類型的程序有更多的文檔嗎?

其他人可以解決這些謎團嗎?

回答

4

文本到com文件是一個非常巧妙的技巧。它利用了這樣的事實:16位加載器將加載偏移量爲0x0100的映像,並開始在該地址執行。

一個exe文件包含一個binary header,它不能被表示爲文本。因此,您無法創建嚴格爲文本的32位或64位可執行文件。

+0

非常好,這對於瞭解32位和64位可執行文件非常有用。但是,您能否提供一些資源來創建完全是ASCII的16位應用程序? – mrduclaw 2011-03-21 22:16:22

+1

@mrduclaw:基本上,您鏈接的示例中的程序是一個引導加載程序,它對隨後的文本進行解碼,以創建最終執行的代碼。我沒有時間坐下來研究他是如何做到的。但是您可以在debug.exe中加載該程序並單步執行以查看發生了什麼。 – 2011-03-21 22:50:01

+1

這只是一個簡單的異或編碼INT 21 INT 20 – ninjalj 2011-03-21 22:59:18

2

除了仔細使用所有映射到ASCII字符的機器碼之外,這裏並沒有真正的「技巧」。我目前無法反彙編這些代碼,但謝繼雷'Lenik表示,有一些自我修改的代碼涉及到。

+0

聽起來不錯。所以沒有資源來幫助生成這樣的代碼;只是很多的試驗和錯誤?或者只是編寫16位DOS程序集的任何資源都會很棒(例如,創建/寫入文件等)。 – mrduclaw 2011-03-21 22:20:29

2

在MSDOS程序當天,簡單的程序使用匯編編寫,或者編譯並鏈接到.COM--儘管這不如直接彙編到.COM。

要知道該怎麼辦(前www)一個人獲得了兩本或三本參考書,其中包括Peter Norton's Programmer's Guide to the IBM PC,又名'粉紅色襯衫書'。

拉爾夫布朗的中斷名單是一個合理的替代品,並在線here

除非您有可用的舊計算機,否則爲MSDOS .COM文件找到有效的執行環境可能會很困難。

+0

Windows XP(或更早版本)應該仍然包含可以運行COM文件的NTVDM。 – 2011-03-21 22:18:24

+0

@Greg:同意 - 這將是一臺*舊電腦*。 – wallyk 2011-03-21 22:22:15

+0

真棒,感謝您的資源! – mrduclaw 2011-03-21 22:22:56