span class=postbody이것은 EXE파일(16bit) 을 binary 또는 .COM인듯이 가공해주는 Overlap 코드입니다.
br /
_OVERLAY 세그먼트의 위치에 EXE파일 그대로 복사해넣으면 됩니다.
br /
초기 CS:IP를 검출하여 EXE파일 이미지를 적절히 재배치해주게 되는 그런겁니다.
br /
(PSP를 대체한다고 하면 이해가 쉬울려나?)
br /
옛날에 16bit 커널개발하시려고 도전해보셨던 분들이라면 이런것쯤 하나 만들어 두셨을거라 생각합니다.
br /
저 역시 예전부터 커널 개발한답시고 이것을 만들었지만 지금은 DOS가 아닌 32bit OS를 만들기
br /
때문에 이런거는 불필요해보이기도 합니다.
br /
하지만 이 개념 자체는 알아두면 좋은 내용인듯 하여 적어둡니다.
br /
(컴파일러가 요즘에는 좋아져서 이제는 이런 코드를 만들일은 없습니다만 알아두면 응용할곳은 많습니다.)
br /
br /
/spantable align=center border=0 cellpadding=3 cellspacing=1 width=90%tbodytr tdspan class=genmedb코드:/b/span/td /tr tr td class=code
br /
; /****************************
br /
;nbsp; *nbsp; nbsp; MINZ kernel overaynbsp; nbsp; *
br /
;nbsp; * Copyright(c)1998 by MINZ *
br /
;nbsp; *nbsp; nbsp; Code by Cho JaeHyuknbsp; nbsp;*
br /
;nbsp; ****************************/
br /
;nbsp; ------- MZIPOVER.ASM -------
br /
br /
.286
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;OGROUP group _TEXT, _OVERLAY
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;assume cs:OGROUP, ds:OGROUP, es:nothing, ss:nothing
br /
_TEXTnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; segment byte public use16 'CODE'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;org 0hnbsp; nbsp;
br /
_start@nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; label nearnbsp; nbsp; nbsp; nbsp; nbsp;
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;cli
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;call near ptr $ + 3 + 2
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;jmp short _getip0@
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov bp, sp
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov bx, word ptr [bp]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;sub bx, 4
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;retn
br /
_getip0@nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;label short
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push cs
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop ds
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;lea ax, OGROUP:_run_data@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;shr ax, 4
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov cx, cs
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, word ptr OGROUP:_run_data@[bx + 8]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov word ptr OGROUP:_run_seg@[bx], ax
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov cx, 16
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, cs
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mul cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;lea cx, OGROUP:_run_data@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;adc dx, 0
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, word ptr OGROUP:_run_data@[bx + 24]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov word ptr OGROUP:_run_src@[bx + 0], ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov word ptr OGROUP:_run_src@[bx + 2], dx
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_seg@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, word ptr OGROUP:_run_data@[bx + 22]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov word ptr OGROUP:_run_jump@[bx + 3], ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_data@[bx + 20]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov word ptr OGROUP:_run_jump@[bx + 1], ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_seg@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, word ptr OGROUP:_run_data@[bx + 14]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ss, ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov sp, word ptr OGROUP:_run_data@[bx + 16]
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov cx, word ptr OGROUP:_run_data@[bx + 6]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;or cx, cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;jz short _run_norelocate@
br /
_run_relocate@nbsp; nbsp; nbsp;label short
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov cx, 16
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_src@[bx + 0]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov dx, word ptr OGROUP:_run_src@[bx + 2]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov di, ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;and di, 0fh
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;div cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov es, ax
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_seg@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mul cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push dx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr es:[di + 2]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mul cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, word ptr es:[di]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;adc dx, 0
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop di
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop si
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add ax, di
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;adc dx, si
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov di, ax
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;and di, 0fh
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;div cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov es, ax
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;mov ax, word ptr OGROUP:_run_seg@[bx]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add word ptr es:[di], ax
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;add word ptr OGROUP:_run_src@[bx + 0], 4
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;adc word ptr OGROUP:_run_src@[bx + 2], 0
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop cx
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;loop short _run_relocate@
br /
_run_norelocate@nbsp; nbsp;label short
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push cs
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop ds
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;push cs
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;pop es
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;sti
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;jmp short $ + 2
br /
_run_jump@nbsp; nbsp; nbsp; nbsp; nbsp;db 0eahnbsp; nbsp; nbsp;
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;db 'MINZ'
br /
_run_seg@nbsp; nbsp; nbsp; nbsp; nbsp; db ' k'
br /
_run_src@nbsp; nbsp; nbsp; nbsp; nbsp; db 'ernel o'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;db 'verlay '
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;db 'by Cho JaeHyuk'
br /
_TEXTnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ends
br /
_OVERLAYnbsp; nbsp; nbsp; nbsp; nbsp; nbsp;segment para public use16 'OVERLAY'
br /
_run_data@nbsp; nbsp; nbsp; nbsp; nbsp;label bytenbsp; nbsp; nbsp;
br /
_OVERLAYnbsp; nbsp; nbsp; nbsp; nbsp; nbsp;ends
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;end _start@
br /
br /
; End of source
/td/tr/tbody/table
받은 트랙백이 없고,
댓글이 없습니다.

글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/64댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/64