blob: f15857bc4d8e9413878c83a6eaa9ba855289baba [file] [log] [blame]
// Capstone Java binding
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
package capstone;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import java.util.List;
import java.util.Arrays;
import static capstone.M680x_const.*;
public class M680x {
public static class OpIndexed extends Structure {
public int base_reg;
public int offset_reg;
public short offset;
public short offset_addr;
public byte offset_bits;
public byte inc_dec;
public byte flags;
@Override
public List getFieldOrder() {
return Arrays.asList("base_reg", "offset_reg", "offset", "offset_addr", "offset_bits", "inc_dec", "flags");
}
}
public static class OpRelative extends Structure {
public short address;
public short offset;
@Override
public List getFieldOrder() {
return Arrays.asList("address", "offset");
}
}
public static class OpExtended extends Structure {
public short address;
public byte indirect;
@Override
public List getFieldOrder() {
return Arrays.asList("address", "indirect");
}
}
public static class OpValue extends Union {
public int imm;
public int reg;
public OpIndexed idx;
public OpRelative rel;
public OpExtended ext;
public byte direct_addr;
public byte const_val;
@Override
public List getFieldOrder() {
return Arrays.asList("imm", "reg", "idx", "rel", "ext", "direct_addr", "const_val");
}
}
public static class Operand extends Structure {
public int type;
public OpValue value;
public byte size;
public byte access;
public void read() {
readField("type");
if (type == M680X_OP_IMMEDIATE)
value.setType(Integer.TYPE);
if (type == M680X_OP_REGISTER)
value.setType(Integer.TYPE);
if (type == M680X_OP_INDEXED)
value.setType(OpIndexed.class);
if (type == M680X_OP_RELATIVE)
value.setType(OpRelative.class);
if (type == M680X_OP_EXTENDED)
value.setType(OpExtended.class);
if (type == M680X_OP_DIRECT)
value.setType(Integer.TYPE);
if (type == M680X_OP_INVALID)
return;
readField("value");
readField("size");
readField("access");
}
@Override
public List getFieldOrder() {
return Arrays.asList("type", "value", "size", "access");
}
}
public static class UnionOpInfo extends Capstone.UnionOpInfo {
public byte flags;
public byte op_count;
public Operand [] op;
public UnionOpInfo() {
op = new Operand[9];
}
public void read() {
readField("flags");
readField("op_count");
op = new Operand[op_count];
if (op_count != 0)
readField("op");
}
@Override
public List getFieldOrder() {
return Arrays.asList("flags", "op_count", "op");
}
}
public static class OpInfo extends Capstone.OpInfo {
public byte flags;
public Operand [] op = null;
public OpInfo(UnionOpInfo op_info) {
flags = op_info.flags;
op = op_info.op;
}
}
}