바이너리


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~! 출력할라고 저짓하긴좀 재능낭비류 갑이더라고


그래서 걍 접음.