1 #include <palacios/vmm_xed.h>
2 #include <xed/xed-interface.h>
6 int v3_decode(struct guest_info * info, addr_t instr_ptr, struct x86_instr * instr) {
9 xed_decoded_inst_t xedd;
11 xed_uint8_t itext[100] = {0x01,0x00,0x00,0x00,0x12,0x00,0x55,0x48,0x89,0xe5,0x48,0x89,0x7d,0xf8,0x89,0x75,0xf4,0x89,0x55,0xf0,0x89,0x4d,0xec,0x48,0x8b,0x55,0xf8,0x8b,0x45,0xf4,0x89,0x02,0x48,0x8b,0x55,0xf8,0x8b,0x45,0xf0,0x89,0x42,0x04,0x48,0x8b,0x55,0xf8,0x8b,0x45,0xec,0x89,0x42,0x08,0xc9,0xc3,0x55,0x48,0x89,0xe5,0x48,0x89,0x7d,0xf8,0x48,0x8b,0x45,0xf8,0x8b,0x40,0x08,0xc9,0xc3,0x90,0x0};
12 xed_bool_t long_mode = true;
13 unsigned int first_argv;
17 for (i=0, num=1; i<100; i += length, num++){
19 xed_state_zero(&dstate);
20 //if (argc > 2 && strcmp(argv[1], "-64") == 0)
25 dstate.mmode=XED_MACHINE_MODE_LONG_64;
29 xed_state_init(&dstate,
30 XED_MACHINE_MODE_LEGACY_32,
31 XED_ADDRESS_WIDTH_32b,
32 XED_ADDRESS_WIDTH_32b);
35 xed_decoded_inst_zero_set_mode(&xedd, &dstate);
36 xed_error_enum_t xed_error = xed_decode(&xedd,
37 REINTERPRET_CAST(const xed_uint8_t*,&itext[i]),
38 XED_MAX_INSTRUCTION_BYTES);
42 case XED_ERROR_BUFFER_TOO_SHORT:
43 PrintDebug("Not enough bytes provided\n");
45 case XED_ERROR_GENERAL_ERROR:
46 PrintDebug("Could not decode given input.\n");
49 PrintDebug("Unhandled error code \n");
53 length = xed_decoded_inst_get_length (&xedd);
55 PrintDebug("\nThe %dth instruction:", num);
57 PrintDebug("\ncategory: ");
58 PrintDebug(" %s\n", xed_category_enum_t2str(xed_decoded_inst_get_category(&xedd)));;
59 PrintDebug("ISA-extension:%s\n ",xed_extension_enum_t2str(xed_decoded_inst_get_extension(&xedd)));
60 PrintDebug(" instruction-length: %d\n ", xed_decoded_inst_get_length(&xedd));
61 PrintDebug(" operand-size:%d\n ", xed_operand_values_get_effective_operand_width(xed_decoded_inst_operands_const(&xedd)));
62 PrintDebug("address-size:%d\n ", xed_operand_values_get_effective_address_width(xed_decoded_inst_operands_const(&xedd)));
63 PrintDebug("iform-enum-name:%s\n ",xed_iform_enum_t2str(xed_decoded_inst_get_iform_enum(&xedd)));
64 PrintDebug("iform-enum-name-dispatch (zero based):%d\n ", xed_decoded_inst_get_iform_enum_dispatch(&xedd));
65 PrintDebug("iclass-max-iform-dispatch: %d\n ", xed_iform_max_per_iclass(xed_decoded_inst_get_iclass(&xedd)));
68 // print_operands(&xedd);
71 // print_memops(&xedd);
77 //print_attributes(&xedd);*/
86 int v3_encode(struct guest_info * info, struct x86_instr * instr, char * instr_buf) {