2011-03-21 1 views
4

제공된 대답은 here입니다. 매우 놀라운 트릭입니다. 제 자신의 덕목을 위해서, 저는 그 종류의 프로그램을 만드는 법을 배우고 싶습니다.텍스트에서 COM 파일 만들기

출력이 완전히 ASCII인지 확인하는 데 사용할 수있는 멋진 라이브러리가 있습니까? 또는 그 유형의 출력을 생성하기 위해 어떤 도구를 사용하기 시작합니까? 필자는 16 비트 응용 프로그램을 만들 것이라고 생각하지만 32 비트 응용 프로그램도 생성 할 수 있습니까?

MSFT의 debug.exe 프로그램에는이 프로그램과 함께 작동하는 어셈블러가 있지만 그 출력은 전적으로 ASCII가 아닙니다. 또한, Lenik의 대답에 제공된 프로그램을 분해 할 때 나는 그가 int 21라고 부르는 곳을 화면에 쓰는 것을 보지 못했다. 이 유형의 프로그램을위한 더 많은 문서가 있습니까?

다른 누구도이 신비를 분류 할 수 있습니까?

답변

4

텍스트 - 투 - com 파일은 매우 깔끔한 트릭입니다. 16 비트 로더가 오프셋 0x0100에서 이미지를로드하고 해당 주소에서 실행을 시작한다는 점을 이용합니다.

exe ​​파일에 텍스트로 표시 할 수없는 binary header이 포함되어 있습니다. 따라서 엄격한 텍스트 인 32 비트 또는 64 비트 실행 파일을 만들 수 없습니다.

+0

우수합니다. 32 비트 및 64 비트 실행 파일에 대해 알아두면 좋습니다. 하지만 완전히 ASCII 인 16- 응용 프로그램을 만드는 데 필요한 리소스를 제공 할 수 있습니까? – mrduclaw

+1

@mrduclaw : 기본적으로 연결된 예제의 프로그램은 결국 실행되는 코드를 만들기 위해 뒤 따르는 텍스트를 디코딩하는 부트 스트랩 로더입니다. 나는 앉아서 정확하게 그가 한 일을 정확하게 할 시간이 없다. 하지만 debug.exe에서 프로그램을로드하고 단일 단계로 진행하면 어떤 일이 일어나는지 확인할 수 있습니다. –

+1

그것은 단순한 XOR 인코딩의 INT 21 INT 20 – ninjalj

2

ASCII 문자를 모두 매핑하는 기계 코드를 신중하게 사용하는 경우를 제외하고는 실제로 "트릭"이 아닙니다. 나는 지금 그 코드를 분해 할 수있는 입장이 아니지만, Lenik은 자체 수정 코드가 포함되어 있음을 나타냅니다.

+0

나에게 좋은 소리. 따라서 그러한 코드를 생성하는 데 도움이되는 리소스가 없습니다. 많은 시행 착오가 있었나요? 또는 16 비트 DOS 어셈블리를 작성하는 데 필요한 모든 리소스는 매우 훌륭합니다 (예 : 파일 만들기/쓰기 등). – mrduclaw

2

MSDOS 프로그램의 날에 간단한 프로그램은 .COM으로 직접 어셈블하는 것처럼 일반적인 것은 아니지만 어셈블리를 사용하여 작성되었거나 .COM으로 컴파일되고 연결되었습니다.

Peter Norton's Programmer's Guide to the IBM PC 일명 'The Pink Shirt Book'을 포함하여 2 권 또는 3 권의 참고 도서를 얻으려면 무엇을해야할지 (사전 www) 알아야합니다.

랄프 브라운의 인터럽트 목록은 합리적인 대체품이며 here입니다.

사용 가능한 오래된 컴퓨터가 없으면 MSDOS .COM 파일의 유효한 실행 환경을 찾는 것이 어려울 수 있습니다.

+0

Windows XP (또는 이전 버전)에는 COM 파일을 실행할 수있는 NTVDM이 있어야합니다. –

+0

@ 그렉 : 동의하길, 그건 오래된 컴퓨터 일 것이다. – wallyk

+0

신난다, 자원에 감사드립니다! – mrduclaw

4

인쇄 가능한 문자 만 사용하는 .COM 파일의 전형적인 예는 바이러스 백신 테스트에 사용되는 파일 인 EICAR입니다. 몇 시간 전, bugtraq에는 discussion thread about EICAR이있었습니다.

+0

우수 토론, 정말 고마워요! – mrduclaw