1// Capstone Java binding 2// By Nguyen Anh Quynh & Dang Hoang Vu, 2013 3 4package capstone; 5 6import com.sun.jna.Structure; 7import com.sun.jna.Union; 8 9import java.util.List; 10import java.util.Arrays; 11 12import static capstone.Xcore_const.*; 13 14public class Xcore { 15 16 public static class MemType extends Structure { 17 public byte base; 18 public byte index; 19 public int disp; 20 public int direct; 21 22 @Override 23 public List getFieldOrder() { 24 return Arrays.asList("base", "index", "disp", "direct"); 25 } 26 } 27 28 public static class OpValue extends Union { 29 public int reg; 30 public int imm; 31 public MemType mem; 32 } 33 34 public static class Operand extends Structure { 35 public int type; 36 public OpValue value; 37 38 public void read() { 39 readField("type"); 40 if (type == XCORE_OP_MEM) 41 value.setType(MemType.class); 42 if (type == XCORE_OP_IMM || type == XCORE_OP_REG) 43 value.setType(Integer.TYPE); 44 if (type == XCORE_OP_INVALID) 45 return; 46 readField("value"); 47 } 48 49 @Override 50 public List getFieldOrder() { 51 return Arrays.asList("type", "value"); 52 } 53 } 54 55 public static class UnionOpInfo extends Capstone.UnionOpInfo { 56 public byte op_count; 57 public Operand [] op; 58 59 public UnionOpInfo() { 60 op = new Operand[8]; 61 } 62 63 public void read() { 64 readField("op_count"); 65 op = new Operand[op_count]; 66 if (op_count != 0) 67 readField("op"); 68 } 69 70 @Override 71 public List getFieldOrder() { 72 return Arrays.asList("op_count", "op"); 73 } 74 } 75 76 public static class OpInfo extends Capstone.OpInfo { 77 public Operand [] op; 78 79 public OpInfo(UnionOpInfo op_info) { 80 op = op_info.op; 81 } 82 } 83} 84