2013-05-22 12 views
1

C# 응용 프로그램에서 * .COM 파일을 열 필요가 있음을 알게되었습니다. 파일은이 같은 assemly 코드, FASM에 의해 생성 * .COM :스트림을 사용하여 * .COM 파일 열기

는 JMP 시작 조직 100H

메시지 : dB "안녕", 0DH, 0AH, 24 시간

시작

: mov 인 DX, MSG를

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

RET

내가 열려고

eb05 4869 0d0a의 24ba 0201 b409의 CD21의 B400

CD16의 C3

:

숭고한 같은 textprocessors을 열 때, 그 코드는 다음과 같이 표현 나타내는 것 이 코드로 응용 프로그램에있는이 파일

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

파일을 텍스트 스트림이 아닌 이진 스트림으로 열어야합니다. 텍스트로서 유니 코드 대리자로 인코딩됩니다.

바이트 배열로 File.OpenRead을 사용하십시오. File.ReadAllBytes을 사용할 수도 있지만 큰 파일은 OutOfMemoryException이 될 것이므로 권장하지 않습니다.

+0

감사합니다. charm.What 양의 바이트'File.ReadAllBytes' 읽을 수 있습니까? i8088 프로그램 코드이므로 32kb 또는 그 이상이 될 수 없습니다. – user2380317

+0

'File.ReadAllBytes'는 최대 2GB의 데이터 인 IIRC를 읽을 수 있습니다. 문제는 명령과 관련이 없지만 대용량 파일의 경우 배열을 할당하고 한 번에 모든 데이터를 읽습니다. 일반적으로 너무 많은 메모리를 사용합니다. 그러나 MSDOS의 COM 파일은 최소한 64k로 제한되어 있으므로'File.ReadAllBytes'가 좋을 것 같습니다. –

관련 문제