OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Table of relevant information about how to decode the ModR/M byte. | |
6 // Based on information in the IA-32 Intel Architecture | |
7 // Software Developer's Manual Volume 2: Instruction Set Reference. | |
8 | |
9 #include "sandbox/win/src/sidestep/mini_disassembler.h" | |
10 #include "sandbox/win/src/sidestep/mini_disassembler_types.h" | |
11 | |
12 namespace sidestep { | |
13 | |
14 const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = { | |
15 // mod == 00 | |
16 /* r/m == 000 */ { false, false, OS_ZERO }, | |
17 /* r/m == 001 */ { false, false, OS_ZERO }, | |
18 /* r/m == 010 */ { false, false, OS_ZERO }, | |
19 /* r/m == 011 */ { false, false, OS_ZERO }, | |
20 /* r/m == 100 */ { false, false, OS_ZERO }, | |
21 /* r/m == 101 */ { false, false, OS_ZERO }, | |
22 /* r/m == 110 */ { true, false, OS_WORD }, | |
23 /* r/m == 111 */ { false, false, OS_ZERO }, | |
24 // mod == 01 | |
25 /* r/m == 000 */ { true, false, OS_BYTE }, | |
26 /* r/m == 001 */ { true, false, OS_BYTE }, | |
27 /* r/m == 010 */ { true, false, OS_BYTE }, | |
28 /* r/m == 011 */ { true, false, OS_BYTE }, | |
29 /* r/m == 100 */ { true, false, OS_BYTE }, | |
30 /* r/m == 101 */ { true, false, OS_BYTE }, | |
31 /* r/m == 110 */ { true, false, OS_BYTE }, | |
32 /* r/m == 111 */ { true, false, OS_BYTE }, | |
33 // mod == 10 | |
34 /* r/m == 000 */ { true, false, OS_WORD }, | |
35 /* r/m == 001 */ { true, false, OS_WORD }, | |
36 /* r/m == 010 */ { true, false, OS_WORD }, | |
37 /* r/m == 011 */ { true, false, OS_WORD }, | |
38 /* r/m == 100 */ { true, false, OS_WORD }, | |
39 /* r/m == 101 */ { true, false, OS_WORD }, | |
40 /* r/m == 110 */ { true, false, OS_WORD }, | |
41 /* r/m == 111 */ { true, false, OS_WORD }, | |
42 // mod == 11 | |
43 /* r/m == 000 */ { false, false, OS_ZERO }, | |
44 /* r/m == 001 */ { false, false, OS_ZERO }, | |
45 /* r/m == 010 */ { false, false, OS_ZERO }, | |
46 /* r/m == 011 */ { false, false, OS_ZERO }, | |
47 /* r/m == 100 */ { false, false, OS_ZERO }, | |
48 /* r/m == 101 */ { false, false, OS_ZERO }, | |
49 /* r/m == 110 */ { false, false, OS_ZERO }, | |
50 /* r/m == 111 */ { false, false, OS_ZERO } | |
51 }; | |
52 | |
53 const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = { | |
54 // mod == 00 | |
55 /* r/m == 000 */ { false, false, OS_ZERO }, | |
56 /* r/m == 001 */ { false, false, OS_ZERO }, | |
57 /* r/m == 010 */ { false, false, OS_ZERO }, | |
58 /* r/m == 011 */ { false, false, OS_ZERO }, | |
59 /* r/m == 100 */ { false, true, OS_ZERO }, | |
60 /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, | |
61 /* r/m == 110 */ { false, false, OS_ZERO }, | |
62 /* r/m == 111 */ { false, false, OS_ZERO }, | |
63 // mod == 01 | |
64 /* r/m == 000 */ { true, false, OS_BYTE }, | |
65 /* r/m == 001 */ { true, false, OS_BYTE }, | |
66 /* r/m == 010 */ { true, false, OS_BYTE }, | |
67 /* r/m == 011 */ { true, false, OS_BYTE }, | |
68 /* r/m == 100 */ { true, true, OS_BYTE }, | |
69 /* r/m == 101 */ { true, false, OS_BYTE }, | |
70 /* r/m == 110 */ { true, false, OS_BYTE }, | |
71 /* r/m == 111 */ { true, false, OS_BYTE }, | |
72 // mod == 10 | |
73 /* r/m == 000 */ { true, false, OS_DOUBLE_WORD }, | |
74 /* r/m == 001 */ { true, false, OS_DOUBLE_WORD }, | |
75 /* r/m == 010 */ { true, false, OS_DOUBLE_WORD }, | |
76 /* r/m == 011 */ { true, false, OS_DOUBLE_WORD }, | |
77 /* r/m == 100 */ { true, true, OS_DOUBLE_WORD }, | |
78 /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, | |
79 /* r/m == 110 */ { true, false, OS_DOUBLE_WORD }, | |
80 /* r/m == 111 */ { true, false, OS_DOUBLE_WORD }, | |
81 // mod == 11 | |
82 /* r/m == 000 */ { false, false, OS_ZERO }, | |
83 /* r/m == 001 */ { false, false, OS_ZERO }, | |
84 /* r/m == 010 */ { false, false, OS_ZERO }, | |
85 /* r/m == 011 */ { false, false, OS_ZERO }, | |
86 /* r/m == 100 */ { false, false, OS_ZERO }, | |
87 /* r/m == 101 */ { false, false, OS_ZERO }, | |
88 /* r/m == 110 */ { false, false, OS_ZERO }, | |
89 /* r/m == 111 */ { false, false, OS_ZERO }, | |
90 }; | |
91 | |
92 }; // namespace sidestep | |
OLD | NEW |