바이너리
4D 5A 90 00 03 00 01 00 0F 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 40 00 4C 00 40 00 00 00 00 00 0E 1F BA 5A 00 B4 09 CD 15 B8 01 4C CD 15 44 43 20 49 6E 73 69 64 65 2C 20 4A 61 65 68 6F 6F 6E 27 73 20 67 69 66 74 2C 20 62 75 74 2C 20 79 6F 75 20 63 61 6E 20 6E 6F 74 20 73 65 65 20 77 69 74 68 20 31 36 20 62 69 74 20 6D 61 63 68 69 6E 65 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 45 00 00 4C 01 07 00 0D E9 00 00 00 00 00 00 00 00 00 00 E0 00 02 01 0B 01 0C 00 00 3C 00 00 00 3E 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 40 00 00 40 00 00 00 02 00 00 06 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 74 65 78 74 2E 64 61 74 61 2E 62 73 73 31 C0 31 DB 31 C9 31 D2 EB FE FA F4 EB FE
소스코드
;디시 프로그래밍 갤러리 유져들을 위한 선물(이라기보다는 환영인사?)
[BITS 16]
;----------------------------------------------------------------------------------------------
; DOS Compatible header. .... 힘들다...
;----------------------------------------------------------------------------------------------
DB "MZ" ; 'MZ', 5A4D.
DW 0x0090 ; extra bytes
DW 0x0003 ; number of whole/partial pages
DW 0x0001 ; relocation items
DW 0x000F ; size of header in paragraphs
DW 0x0000 ; minimum extra paragraphs
DW 0xFFFF ; maximum extra paragraphs
DW 0x0000 ; initial(relative) stack segment
DW 0x00B8 ; initial stack pointer
DW 0x0000 ; checksum, not used.
DW 0x0000 ; initial instruction pointer. (NOT USED)
DW 0x0000 ; initial code segment. (relative)
DW __reloc_16bits ; offset to relocation table
DW 0x0000 ; overlay number
DD 0x00000000
DD 0x00000000 ; reserved words (4 words)
DD 0x0000 ; OEM identifier
DD 0x0000 ; OEM information
DD 0x00000000
DD 0x00000000
DD 0x00000000
DD 0x00000000
DD 0x00000000 ; reserved words (10 words)
DD ____EXE_header ; offset to new EXE header
;----------------------------------------------------------------------------------------------
__reloc_16bits:
__hibrid_section_16bit: ; 데이터/코드가 둘다 여기 때려박힘.
DD __startup_16bits
DD 0x00000000
__startup_16bits:
PUSH CS
POP DS
MOV DX, __16bit_msg
; AH = 09, WriteString
MOV AH, 09
INT 21
; AX = 4C01, Exit
MOV AX, 0x4C01
INT 21
__16bit_msg:
DB "DC Inside, Jaehoon's gift, but,"
DB " you can not see with 16 bit machine.", 0x00, 0x00
; 헤더 사이즈를 8개 줫으므로 16 * 16 해서 256바이트.
; 남는 영역은 0으로 매꿔버려.
TIMES 256-($-$$) DB 0x00
[BITS 32]
____EXE_header:
DB "PE" ; PE 헤더 시작이야
DW 0x0000 ; CPU 타입은 x86이야
DW 0x014C ; 섹션 개수야
DB 0x07, 0x00, 0x0D, 0xE9 ; 타임스템프인데 아마 2014/11/05 00:00쯤일거야
DD 0x00000000 ; 심볼 테이블 오프셋이야
DD 0x00000000 ; 심볼 갯수인데 0개야 EXE인데 심볼이 있으면 미친거지
DW 0x0000 ; 옵셔널 헤더... 32비트짜리 나올거야
DW 0x00E0 ; 이 파일 타입은 Executable EXE 파일이야
; 이제 시작이네 옵셔널 헤더다 아나 이런거
; 싫어 씨바ㅠ
DB 0x02, 0x01 ; 옵셔널 헤더 매직값이야
DW 0x010B ; 링커 버젼이야 (내손 버젼이구나 ...헐ㅋ)
DD 0x3C00000C ; 코드 크기야
DD 0x3E000000 ; 초기화된 데이터 크기
DD 0x00000000 ; 초기화 안된 데이터 크기
DD 0x00000000 ; 엔트리포인트야 "진입점" (Code base기준)
DD 0x00400000 ; 코드 기준주소 (Code base)
DD 0x40000000 ; 데이터 기준주소
DD 0x00400000 ; 이미지 베이스야
DD 131072 ; 섹션 크기 스케일 128 kb
DD 1536 ; 파일에서 섹션 크기 스케일
DD 0x00000000 ; 체크섬인데 이거 안쓴다없어도 알아서 돌아
DW 3 ; 콘솔 기반이야
DW 0 ; RVA랑 사이즈 개수야
; 자 변태들아 이제 디렉터리 엔트리 16개 나온다
; typedef struct _IMAGE_DATA_DIRECTORY {
; DWORD VirtualAddress;
; DWORD Size;
; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
; To DO: 여긴나중에 수정할거야
; EXPORT 디렉터리야
DD 0, 0 ; EXE에서 Export가 있을 리가 없어
; IMPORT 디렉터리야
DD 0, 0
; 리소스 디렉터리야
DD 0, 0
; Exception 디렉터리야
DD 0, 0
; 보안 디렉터리야
DD 0, 0
; 베이스 리로케이션 테이블, 걍 안쓰는건 말안하고 0박을께
DD 0, 0 ; base reloc
DD 0, 0 ; debug
DD 0, 0 ; x86 usage
DD 0, 0 ; arch
DD 0, 0 ; rva of gp
DD 0, 0 ; tls
DD 0, 0 ; configurations
; IMPORT 보충 헤더용 디렉터리야
DD 0, 0
; 지연 로드 디스크립터 디렉터리야
DD 0, 0
DD 0, 0 ; COM 런타임 그딴거 안써 씨#바ㄹ
; 여기 잡다한 헤더들 더들어갈거야
DB ".text"
; ToDO: text 섹션 정보 처너어
DB ".data"
; ToDO: data 섹션 정보 처너어
DB ".bss"
; ToDO: 스택 초기값 들고 있는 섹션이야
; 실제 text 섹션 데이터야
ORG 0x00400000 ; 4M 지점에 올라간다. (물론 가상주소)
__startup:
XOR EAX, EAX
XOR EBX, EBX
XOR ECX, ECX
XOR EDX, EDX
; 아 선물 줄라다가 때려치울란다 병신들아
; 힘들었다 새#ㄲㅣ들아
; 알아서 공부해
CLI ; 인터럽트 ㅈ까
HLT ; 조용히
JMP $ ; 무한루프나 돌란다
만들다가 생각해보니까
조ㄴ ㄴㅏ 쓸데없더라고
...
솔찍히
Hello DC~! 출력할라고 저짓하긴좀 재능낭비류 갑이더라고
그래서 걍 접음.
으읭노므오료오ㅠ^ㅠ...
요미고눙무릐@_@