안녕하세요.
최근 도스 관련되서 이런저런 작업을 진행하고 있습니다.
그러다가 일단 바이너리를 x86 opcode로 disassemble을 해야 할꺼 같아서
OPCODE 관련되서 이것저것 찾아보는데요.
핵심은 DOS 별 약간씩 OPCODE 방식이 다르네요.
x8086 스펙에서약간 다른게 몇가지가 있는데요.
그래서 DOSBOX의 OPCODE 관련된 항목을 갖고 분석을 했습니다.
아래는 비교 표 입니다.
간단히 opcode (0 ~ 255 )까지만 비교 한거입니다.
84,85,86,87 이렇게 다르네요
DOSBOX , x86 opcode (http://www.mlsite.net/8086/) 입니다.
CASE_B(0x00) /* ADD Eb,Gb */
CASE_W(0x01) /* ADD Ew,Gw */
CASE_B(0x02) /* ADD Gb,Eb */
CASE_W(0x03) /* ADD Gw,Ew */
CASE_B(0x04) /* ADD AL,Ib */
CASE_W(0x05) /* ADD AX,Iw */
CASE_W(0x06) /* PUSH ES */
CASE_W(0x07) /* POP ES */
CASE_B(0x08) /* OR Eb,Gb */
CASE_W(0x09) /* OR Ew,Gw */
CASE_B(0x0a) /* OR Gb,Eb */
CASE_W(0x0b) /* OR Gw,Ew */
CASE_B(0x0c) /* OR AL,Ib */
CASE_W(0x0d) /* OR AX,Iw */
CASE_W(0x0e) /* PUSH CS */
CASE_B(0x0f) /* 2 byte opcodes*/
CASE_B(0x10) /* ADC Eb,Gb */
CASE_W(0x11) /* ADC Ew,Gw */
CASE_B(0x12) /* ADC Gb,Eb */
CASE_W(0x13) /* ADC Gw,Ew */
CASE_B(0x14) /* ADC AL,Ib */
CASE_W(0x15) /* ADC AX,Iw */
CASE_W(0x16) /* PUSH SS */
CASE_W(0x17) /* POP SS */
CASE_B(0x18) /* SBB Eb,Gb */
CASE_W(0x19) /* SBB Ew,Gw */
CASE_B(0x1a) /* SBB Gb,Eb */
CASE_W(0x1b) /* SBB Gw,Ew */
CASE_B(0x1c) /* SBB AL,Ib */
CASE_W(0x1d) /* SBB AX,Iw */
CASE_W(0x1e) /* PUSH DS */
CASE_W(0x1f) /* POP DS */
CASE_B(0x20) /* AND Eb,Gb */
CASE_W(0x21) /* AND Ew,Gw */
CASE_B(0x22) /* AND Gb,Eb */
CASE_W(0x23) /* AND Gw,Ew */
CASE_B(0x24) /* AND AL,Ib */
CASE_W(0x25) /* AND AX,Iw */
CASE_B(0x26) /* SEG ES: */
CASE_B(0x27) /* DAA */
CASE_B(0x28) /* SUB Eb,Gb */
CASE_W(0x29) /* SUB Ew,Gw */
CASE_B(0x2a) /* SUB Gb,Eb */
CASE_W(0x2b) /* SUB Gw,Ew */
CASE_B(0x2c) /* SUB AL,Ib */
CASE_W(0x2d) /* SUB AX,Iw */
CASE_B(0x2e) /* SEG CS: */
CASE_B(0x2f) /* DAS */
CASE_B(0x30) /* XOR Eb,Gb */
CASE_W(0x31) /* XOR Ew,Gw */
CASE_B(0x32) /* XOR Gb,Eb */
CASE_W(0x33) /* XOR Gw,Ew */
CASE_B(0x34) /* XOR AL,Ib */
CASE_W(0x35) /* XOR AX,Iw */
CASE_B(0x36) /* SEG SS: */
CASE_B(0x37) /* AAA */
CASE_B(0x38) /* CMP Eb,Gb */
CASE_W(0x39) /* CMP Ew,Gw */
CASE_B(0x3a) /* CMP Gb,Eb */
CASE_W(0x3b) /* CMP Gw,Ew */
CASE_B(0x3c) /* CMP AL,Ib */
CASE_W(0x3d) /* CMP AX,Iw */
CASE_B(0x3e) /* SEG DS: */
CASE_B(0x3f) /* AAS */
CASE_W(0x40) /* INC AX */
CASE_W(0x41) /* INC CX */
CASE_W(0x42) /* INC DX */
CASE_W(0x43) /* INC BX */
CASE_W(0x44) /* INC SP */
CASE_W(0x45) /* INC BP */
CASE_W(0x46) /* INC SI */
CASE_W(0x47) /* INC DI */
CASE_W(0x48) /* DEC AX */
CASE_W(0x49) /* DEC CX */
CASE_W(0x4a) /* DEC DX */
CASE_W(0x4b) /* DEC BX */
CASE_W(0x4c) /* DEC SP */
CASE_W(0x4d) /* DEC BP */
CASE_W(0x4e) /* DEC SI */
CASE_W(0x4f) /* DEC DI */
CASE_W(0x50) /* PUSH AX */
CASE_W(0x51) /* PUSH CX */
CASE_W(0x52) /* PUSH DX */
CASE_W(0x53) /* PUSH BX */
CASE_W(0x54) /* PUSH SP */
CASE_W(0x55) /* PUSH BP */
CASE_W(0x56) /* PUSH SI */
CASE_W(0x57) /* PUSH DI */
CASE_W(0x58) /* POP AX */
CASE_W(0x59) /* POP CX */
CASE_W(0x5a) /* POP DX */
CASE_W(0x5b) /* POP BX */
CASE_W(0x5c) /* POP SP */
CASE_W(0x5d) /* POP BP */
CASE_W(0x5e) /* POP SI */
CASE_W(0x5f) /* POP DI */
CASE_W(0x60) /* PUSHA */
CASE_W(0x61) /* POPA */
CASE_W(0x62) /* BOUND */
CASE_W(0x63) /* ARPL Ew,Rw */
CASE_B(0x64) /* SEG FS: */
CASE_B(0x65) /* SEG GS: */
CASE_B(0x66) /* Operand Size Prefix */
CASE_B(0x67) /* Address Size Prefix */
CASE_W(0x68) /* PUSH Iw */
CASE_W(0x69) /* IMUL Gw,Ew,Iw */
CASE_W(0x6a) /* PUSH Ib */
CASE_W(0x6b) /* IMUL Gw,Ew,Ib */
CASE_B(0x6c) /* INSB */
CASE_W(0x6d) /* INSW */
CASE_B(0x6e) /* OUTSB */
CASE_W(0x6f) /* OUTSW */
CASE_W(0x70) /* JO */
CASE_W(0x71) /* JNO */
CASE_W(0x72) /* JB */
CASE_W(0x73) /* JNB */
CASE_W(0x74) /* JZ */
CASE_W(0x75) /* JNZ */
CASE_W(0x76) /* JBE */
CASE_W(0x77) /* JNBE */
CASE_W(0x78) /* JS */
CASE_W(0x79) /* JNS */
CASE_W(0x7a) /* JP */
CASE_W(0x7b) /* JNP */
CASE_W(0x7c) /* JL */
CASE_W(0x7d) /* JNL */
CASE_W(0x7e) /* JLE */
CASE_W(0x7f) /* JNLE */
CASE_B(0x80) /* Grpl Eb,Ib */
CASE_B(0x82) /* Grpl Eb,Ib Mirror instruction*/
CASE_W(0x81) /* Grpl Ew,Iw */
CASE_W(0x83) /* Grpl Ew,Ix */
CASE_B(0x84) /* TEST Eb,Gb */
CASE_W(0x85) /* TEST Ew,Gw */
CASE_B(0x86) /* XCHG Eb,Gb */
CASE_W(0x87) /* XCHG Ew,Gw */
CASE_B(0x88) /* MOV Eb,Gb */
CASE_W(0x89) /* MOV Ew,Gw */
CASE_B(0x8a) /* MOV Gb,Eb */
CASE_W(0x8b) /* MOV Gw,Ew */
CASE_W(0x8c) /* Mov Ew,Sw */
CASE_W(0x8d) /* LEA Gw */
CASE_B(0x8e) /* MOV Sw,Ew */
CASE_W(0x8f) /* POP Ew */
CASE_B(0x90) /* NOP */
CASE_W(0x91) /* XCHG CX,AX */
CASE_W(0x92) /* XCHG DX,AX */
CASE_W(0x93) /* XCHG BX,AX */
CASE_W(0x94) /* XCHG SP,AX */
CASE_W(0x95) /* XCHG BP,AX */
CASE_W(0x96) /* XCHG SI,AX */
CASE_W(0x97) /* XCHG DI,AX */
CASE_W(0x98) /* CBW */
CASE_W(0x99) /* CWD */
CASE_W(0x9a) /* CALL Ap */
CASE_B(0x9b) /* WAIT */
CASE_W(0x9c) /* PUSHF */
CASE_W(0x9d) /* POPF */
CASE_B(0x9e) /* SAHF */
CASE_B(0x9f) /* LAHF */
CASE_B(0xa0) /* MOV AL,Ob */
CASE_W(0xa1) /* MOV AX,Ow */
CASE_B(0xa2) /* MOV Ob,AL */
CASE_W(0xa3) /* MOV Ow,AX */
CASE_B(0xa4) /* MOVSB */
CASE_W(0xa5) /* MOVSW */
CASE_B(0xa6) /* CMPSB */
CASE_W(0xa7) /* CMPSW */
CASE_B(0xa8) /* TEST AL,Ib */
CASE_W(0xa9) /* TEST AX,Iw */
CASE_B(0xaa) /* STOSB */
CASE_W(0xab) /* STOSW */
CASE_B(0xac) /* LODSB */
CASE_W(0xad) /* LODSW */
CASE_B(0xae) /* SCASB */
CASE_W(0xaf) /* SCASW */
CASE_B(0xb0) /* MOV AL,Ib */
CASE_B(0xb1) /* MOV CL,Ib */
CASE_B(0xb2) /* MOV DL,Ib */
CASE_B(0xb3) /* MOV BL,Ib */
CASE_B(0xb4) /* MOV AH,Ib */
CASE_B(0xb5) /* MOV CH,Ib */
CASE_B(0xb6) /* MOV DH,Ib */
CASE_B(0xb7) /* MOV BH,Ib */
CASE_W(0xb8) /* MOV AX,Iw */
CASE_W(0xb9) /* MOV CX,Iw */
CASE_W(0xba) /* MOV DX,Iw */
CASE_W(0xbb) /* MOV BX,Iw */
CASE_W(0xbc) /* MOV SP,Iw */
CASE_W(0xbd) /* MOV BP.Iw */
CASE_W(0xbe) /* MOV SI,Iw */
CASE_W(0xbf) /* MOV DI,Iw */
CASE_B(0xc0) /* GRP2 Eb,Ib */
CASE_W(0xc1) /* GRP2 Ew,Ib */
CASE_W(0xc2) /* RETN Iw */
CASE_W(0xc3) /* RETN */
CASE_W(0xc4) /* LES */
CASE_W(0xc5) /* LDS */
CASE_B(0xc6) /* MOV Eb,Ib */
CASE_W(0xc7) /* MOV EW,Iw */
CASE_W(0xc8) /* ENTER Iw,Ib */
CASE_W(0xc9) /* LEAVE */
CASE_W(0xca) /* RETF Iw */
CASE_W(0xcb) /* RETF */
CASE_B(0xcc) /* INT3 */
CASE_B(0xcd) /* INT Ib */
CASE_B(0xce) /* INTO */
CASE_W(0xcf) /* IRET */
CASE_B(0xd0) /* GRP2 Eb,1 */
CASE_W(0xd1) /* GRP2 Ew,1 */
CASE_B(0xd2) /* GRP2 Eb,CL */
CASE_W(0xd3) /* GRP2 Ew,CL */
CASE_B(0xd4) /* AAM Ib */
CASE_B(0xd5) /* AAD Ib */
CASE_B(0xd6) /* SALC */
CASE_B(0xd7) /* XLAT */
CASE_B(0xd8) /* FPU ESC 0 */
CASE_B(0xd9) /* FPU ESC 1 */
CASE_B(0xda) /* FPU ESC 2 */
CASE_B(0xdb) /* FPU ESC 3 */
CASE_B(0xdc) /* FPU ESC 4 */
CASE_B(0xdd) /* FPU ESC 5 */
CASE_B(0xde) /* FPU ESC 6 */
CASE_B(0xdf) /* FPU ESC 7 */
CASE_B(0xd8) /* FPU ESC 0 */
CASE_B(0xd9) /* FPU ESC 1 */
CASE_B(0xda) /* FPU ESC 2 */
CASE_B(0xdb) /* FPU ESC 3 */
CASE_B(0xdc) /* FPU ESC 4 */
CASE_B(0xdd) /* FPU ESC 5 */
CASE_B(0xde) /* FPU ESC 6 */
CASE_B(0xdf) /* FPU ESC 7 */
CASE_W(0xe0) /* LOOPNZ */
CASE_W(0xe1) /* LOOPZ */
CASE_W(0xe2) /* LOOP */
CASE_W(0xe3) /* JCXZ */
CASE_B(0xe4) /* IN AL,Ib */
CASE_W(0xe5) /* IN AX,Ib */
CASE_B(0xe6) /* OUT Ib,AL */
CASE_W(0xe7) /* OUT Ib,AX */
CASE_W(0xe8) /* CALL Jw */
CASE_W(0xe9) /* JMP Jw */
CASE_W(0xea) /* JMP Ap */
CASE_W(0xeb) /* JMP Jb */
CASE_B(0xec) /* IN AL,DX */
CASE_W(0xed) /* IN AX,DX */
CASE_B(0xee) /* OUT DX,AL */
CASE_W(0xef) /* OUT DX,AX */
CASE_B(0xf0) /* LOCK */
CASE_B(0xf1) /* ICEBP */
CASE_B(0xf2) /* REPNZ */
CASE_B(0xf3) /* REPZ */
CASE_B(0xf4) /* HLT */
CASE_B(0xf5) /* CMC */
CASE_B(0xf6) /* GRP3 Eb(,Ib) */
CASE_W(0xf7) /* GRP3 Ew(,Iw) */
CASE_B(0xf8) /* CLC */
CASE_B(0xf9) /* STC */
CASE_B(0xfa) /* CLI */
CASE_B(0xfb) /* STI */
CASE_B(0xfc) /* CLD */
CASE_B(0xfd) /* STD */
CASE_B(0xfe) /* GRP4 Eb */
CASE_W(0xff) /* GRP5 Ew */
-----------------------------------
00 ADD Eb Gb
01 ADD Ev Gv
02 ADD Gb Eb
03 ADD Gv Ev
04 ADD AL Ib
05 ADD eAX Iv
06 PUSH ES
07 POP ES
08 OR Eb Gb
09 OR Ev Gv
0A OR Gb Eb
0B OR Gv Ev
0C OR AL Ib
0D OR eAX Iv
0E PUSH CS
0F --
10 ADC Eb Gb
11 ADC Ev Gv
12 ADC Gb Eb
13 ADC Gv Ev
14 ADC AL Ib
15 ADC eAX Iv
16 PUSH SS
17 POP SS
18 SBB Eb Gb
19 SBB Ev Gv
1A SBB Gb Eb
1B SBB Gv Ev
1C SBB AL Ib
1D SBB eAX Iv
1E PUSH DS
1F POP DS
20 AND Eb Gb
21 AND Ev Gv
22 AND Gb Eb
23 AND Gv Ev
24 AND AL Ib
25 AND eAX Iv
26 ES:
27 DAA
28 SUB Eb Gb
29 SUB Ev Gv
2A SUB Gb Eb
2B SUB Gv Ev
2C SUB AL Ib
2D SUB eAX Iv
2E CS:
2F DAS
30 XOR Eb Gb
31 XOR Ev Gv
32 XOR Gb Eb
33 XOR Gv Ev
34 XOR AL Ib
35 XOR eAX Iv
36 SS:
37 AAA
38 CMP Eb Gb
39 CMP Ev Gv
3A CMP Gb Eb
3B CMP Gv Ev
3C CMP AL Ib
3D CMP eAX Iv
3E DS:
3F AAS
40 INC eAX
41 INC eCX
42 INC eDX
43 INC eBX
44 INC eSP
45 INC eBP
46 INC eSI
47 INC eDI
48 DEC eAX
49 DEC eCX
4A DEC eDX
4B DEC eBX
4C DEC eSP
4D DEC eBP
4E DEC eSI
4F DEC eDI
50 PUSH eAX
51 PUSH eCX
52 PUSH eDX
53 PUSH eBX
54 PUSH eSP
55 PUSH eBP
56 PUSH eSI
57 PUSH eDI
58 POP eAX
59 POP eCX
5A POP eDX
5B POP eBX
5C POP eSP
5D POP eBP
5E POP eSI
5F POP eDI
60 --
61 --
62 --
63 --
64 --
65 --
66 --
67 --
68 --
69 --
6A --
6B --
6C --
6D --
6E --
6F --
70 JO Jb
71 JNO Jb
72 JB Jb
73 JNB Jb
74 JZ Jb
75 JNZ Jb
76 JBE Jb
77 JA Jb
78 JS Jb
79 JNS Jb
7A JPE Jb
7B JPO Jb
7C JL Jb
7D JGE Jb
7E JLE Jb
7F JG Jb
80 GRP1 Eb Ib
81 GRP1 Ev Iv
82 GRP1 Eb Ib
83 GRP1 Ev Ib
84 TEST Gb Eb
85 TEST Gv Ev
86 XCHG Gb Eb
87 XCHG Gv Ev
88 MOV Eb Gb
89 MOV Ev Gv
8A MOV Gb Eb
8B MOV Gv Ev
8C MOV Ew Sw
8D LEA Gv M
8E MOV Sw Ew
8F POP Ev
90 NOP
91 XCHG eCX eAX
92 XCHG eDX eAX
93 XCHG eBX eAX
94 XCHG eSP eAX
95 XCHG eBP eAX
96 XCHG eSI eAX
97 XCHG eDI eAX
98 CBW
99 CWD
9A CALL Ap
9B WAIT
9C PUSHF
9D POPF
9E SAHF
9F LAHF
A0 MOV AL Ob
A1 MOV eAX Ov
A2 MOV Ob AL
A3 MOV Ov eAX
A4 MOVSB
A5 MOVSW
A6 CMPSB
A7 CMPSW
A8 TEST AL Ib
A9 TEST eAX Iv
AA STOSB
AB STOSW
AC LODSB
AD LODSW
AE SCASB
AF SCASW
B0 MOV AL Ib
B1 MOV CL Ib
B2 MOV DL Ib
B3 MOV BL Ib
B4 MOV AH Ib
B5 MOV CH Ib
B6 MOV DH Ib
B7 MOV BH Ib
B8 MOV eAX Iv
B9 MOV eCX Iv
BA MOV eDX Iv
BB MOV eBX Iv
BC MOV eSP Iv
BD MOV eBP Iv
BE MOV eSI Iv
BF MOV eDI Iv
C0 --
C1 --
C2 RET Iw
C3 RET
C4 LES Gv Mp
C5 LDS Gv Mp
C6 MOV Eb Ib
C7 MOV Ev Iv
C8 --
C9 --
CA RETF Iw
CB RETF
CC INT 3
CD INT Ib
CE INTO
CF IRET
D0 GRP2 Eb 1
D1 GRP2 Ev 1
D2 GRP2 Eb CL
D3 GRP2 Ev CL
D4 AAM I0
D5 AAD I0
D6 --
D7 XLAT
D8 --
D9 --
DA --
DB --
DC --
DD --
DE --
DF --
E0 LOOPNZ Jb
E1 LOOPZ Jb
E2 LOOP Jb
E3 JCXZ Jb
E4 IN AL Ib
E5 IN eAX Ib
E6 OUT Ib AL
E7 OUT Ib eAX
E8 CALL Jv
E9 JMP Jv
EA JMP Ap
EB JMP Jb
EC IN AL DX
ED IN eAX DX
EE OUT DX AL
EF OUT DX eAX
F0 LOCK
F1 --
F2 REPNZ
F3 REPZ
F4 HLT
F5 CMC
F6 GRP3a Eb
F7 GRP3b Ev
F8 CLC
F9 STC
FA CLI
FB STI
FC CLD
FD STD
FE GRP4 Eb
FF GRP5 Ev
GRP1/0 ADD
GRP1/1 OR
GRP1/2 ADC
GRP1/3 SBB
GRP1/4 AND
GRP1/5 SUB
GRP1/6 XOR
GRP1/7 CMP
GRP2/0 ROL
GRP2/1 ROR
GRP2/2 RCL
GRP2/3 RCR
GRP2/4 SHL
GRP2/5 SHR
GRP2/6 --
GRP2/7 SAR
GRP3a/0 TEST Eb Ib
GRP3a/1 --
GRP3a/2 NOT
GRP3a/3 NEG
GRP3a/4 MUL
GRP3a/5 IMUL
GRP3a/6 DIV
GRP3a/7 IDIV
GRP3b/0 TEST Ev Iv
GRP3b/1 --
GRP3b/2 NOT
GRP3b/3 NEG
GRP3b/4 MUL
GRP3b/5 IMUL
GRP3b/6 DIV
GRP3b/7 IDIV
GRP4/0 INC
GRP4/1 DEC
GRP4/2 --
GRP4/3 --
GRP4/4 --
GRP4/5 --
GRP4/6 --
GRP4/7 --
GRP5/0 INC
GRP5/1 DEC
GRP5/2 CALL
GRP5/3 CALL Mp
GRP5/4 JMP
GRP5/5 JMP Mp
GRP5/6 PUSH
GRP5/7 --
-------------------------------------------------------
'오픈소스관련' 카테고리의 다른 글
Dos Relocation 관련 작업. (0) | 2016.12.16 |
---|---|
DOS PSP 관련 스펙. (0) | 2016.12.16 |
터보씨 3.0 입니다. (0) | 2016.11.08 |
라즈베리파이 서버 세팅 관련 (0) | 2016.02.29 |
Phantomjs + ajax 함수 호출 (0) | 2015.08.03 |