Rizin
unix-like reverse engineering framework and cli tools
M680x.java
Go to the documentation of this file.
1 // Capstone Java binding
2 /* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
3 
4 package capstone;
5 
6 import com.sun.jna.Structure;
7 import com.sun.jna.Union;
8 
9 import java.util.List;
10 import java.util.Arrays;
11 
12 import static capstone.M680x_const.*;
13 
14 public class M680x {
15 
16  public static class OpIndexed extends Structure {
17  public int base_reg;
18  public int offset_reg;
19  public short offset;
20  public short offset_addr;
21  public byte offset_bits;
22  public byte inc_dec;
23  public byte flags;
24 
25  @Override
26  public List getFieldOrder() {
27  return Arrays.asList("base_reg", "offset_reg", "offset", "offset_addr", "offset_bits", "inc_dec", "flags");
28  }
29  }
30 
31  public static class OpRelative extends Structure {
32  public short address;
33  public short offset;
34 
35  @Override
36  public List getFieldOrder() {
37  return Arrays.asList("address", "offset");
38  }
39  }
40 
41  public static class OpExtended extends Structure {
42  public short address;
43  public byte indirect;
44 
45  @Override
46  public List getFieldOrder() {
47  return Arrays.asList("address", "indirect");
48  }
49  }
50 
51  public static class OpValue extends Union {
52  public int imm;
53  public int reg;
54  public OpIndexed idx;
55  public OpRelative rel;
56  public OpExtended ext;
57  public byte direct_addr;
58  public byte const_val;
59 
60  @Override
61  public List getFieldOrder() {
62  return Arrays.asList("imm", "reg", "idx", "rel", "ext", "direct_addr", "const_val");
63  }
64  }
65 
66  public static class Operand extends Structure {
67  public int type;
68  public OpValue value;
69  public byte size;
70  public byte access;
71 
72  public void read() {
73  readField("type");
74  if (type == M680X_OP_IMMEDIATE)
75  value.setType(Integer.TYPE);
76  if (type == M680X_OP_REGISTER)
77  value.setType(Integer.TYPE);
78  if (type == M680X_OP_INDEXED)
79  value.setType(OpIndexed.class);
80  if (type == M680X_OP_RELATIVE)
81  value.setType(OpRelative.class);
82  if (type == M680X_OP_EXTENDED)
83  value.setType(OpExtended.class);
84  if (type == M680X_OP_DIRECT)
85  value.setType(Integer.TYPE);
86  if (type == M680X_OP_INVALID)
87  return;
88  readField("value");
89  readField("size");
90  readField("access");
91  }
92 
93  @Override
94  public List getFieldOrder() {
95  return Arrays.asList("type", "value", "size", "access");
96  }
97  }
98 
99  public static class UnionOpInfo extends Capstone.UnionOpInfo {
100  public byte flags;
101  public byte op_count;
102 
103  public Operand [] op;
104 
105  public UnionOpInfo() {
106  op = new Operand[9];
107  }
108 
109  public void read() {
110  readField("flags");
111  readField("op_count");
112  op = new Operand[op_count];
113  if (op_count != 0)
114  readField("op");
115  }
116 
117  @Override
118  public List getFieldOrder() {
119  return Arrays.asList("flags", "op_count", "op");
120  }
121  }
122 
123  public static class OpInfo extends Capstone.OpInfo {
124  public byte flags;
125  public Operand [] op = null;
126 
127  public OpInfo(UnionOpInfo op_info) {
128  flags = op_info.flags;
129  op = op_info.op;
130  }
131  }
132 }
OpInfo(UnionOpInfo op_info)
Definition: M680x.java:127
OpExtended ext
Definition: M680x.java:56
OpRelative rel
Definition: M680x.java:55
@ M680X_OP_EXTENDED
= Extended addressing operand.
Definition: m680x.h:60
@ M680X_OP_INDEXED
= Indexed addressing operand.
Definition: m680x.h:59
@ M680X_OP_IMMEDIATE
= Immediate operand.
Definition: m680x.h:58
@ M680X_OP_INVALID
= CS_OP_INVALID (Uninitialized).
Definition: m680x.h:56
@ M680X_OP_REGISTER
= Register operand.
Definition: m680x.h:57
@ M680X_OP_RELATIVE
= Relative addressing operand.
Definition: m680x.h:62
@ M680X_OP_DIRECT
= Direct addressing operand.
Definition: m680x.h:61
Definition: Arm.java:4
Definition: dis.c:32