2013-05-22 37 views
1

剛剛發現自己需要在C#應用程序中打開* .COM文件。 * .COM由FASM生成的文件,與assemly代碼像這樣的:使用流打開* .COM文件

組織100H

JMP開始

消息:DB 「嗨」,0DH,0AH,24H

開始: MOV DX,味精

mov  ah, 09h 
    int  21h   
    mov  ah, 0 
    int  16h 

RET

當如Sublime textprocessors打開,它代表的是代碼這樣表示:

eb05 4869 0D0A 24BA 0201 B409 CD21 B400

CD16 C3

我試圖打開這個文件在應用這樣的代碼

string COMtext = File.ReadAllText(filename,encoding); 

byte[] info = new UTF8Encoding(true).GetBytes(COMtext); 

當與MessageBox.Show(info[i].ToString("x2")); 檢查它說什麼,第一個字節是EF,第二個是BF(拆分EB在一半),然後在第三個地方(BD)增加一個額外的字節。之後 - 所有事情都按計劃進行解析。 4th:05,5th:48 etc. 我該怎麼做是錯誤的,有什麼辦法可以解決它沒有解決方法(在這個階段哪一個我不清楚,因爲我不知道是否會有相同的行爲或不)

回答

3

您需要打開文件作爲二進制流,而不是文本蒸汽。作爲文本,它被編碼爲Unicode代理。使用File.OpenRead與一個字節數組。您也可以使用File.ReadAllBytes,但我不推薦它,因爲大文件會導致OutOfMemoryException

+0

謝謝,就像一個魅力。'File.ReadAllBytes'能夠讀取多少字節? i8088程序代碼,所以它不應該超過32kb或者這樣的 – user2380317

+0

'File.ReadAllBytes'可以讀取高達2GB的數據,IIRC。問題不在於該命令,而是因爲對於大文件,它將一次分配數組並讀取所有數據,這通常會佔用太多的內存。但是,至少在MSDOS中,COM文件被限制爲64k,所以我認爲'File.ReadAllBytes'就可以。 –