mirror of
https://github.com/SimoneN64/Kaizen.git
synced 2025-04-02 10:41:53 -04:00
132 lines
3 KiB
Java
132 lines
3 KiB
Java
// 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;
|
|
}
|
|
}
|
|
}
|