1 #include <palacios/vmm_decoder.h>
3 #include <xed/xed-interface.h>
9 PrintDebug("XED is not included in this kernel\n");
12 xed_decoded_inst_t xedd;
14 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};
15 xed_bool_t long_mode = true;
16 unsigned int first_argv;
20 for (i=0, num=1; i<100; i += length, num++){
22 xed_state_zero(&dstate);
23 //if (argc > 2 && strcmp(argv[1], "-64") == 0)
28 dstate.mmode=XED_MACHINE_MODE_LONG_64;
32 xed_state_init(&dstate,
33 XED_MACHINE_MODE_LEGACY_32,
34 XED_ADDRESS_WIDTH_32b,
35 XED_ADDRESS_WIDTH_32b);
38 xed_decoded_inst_zero_set_mode(&xedd, &dstate);
39 xed_error_enum_t xed_error = xed_decode(&xedd,
40 REINTERPRET_CAST(const xed_uint8_t*,&itext[i]),
41 XED_MAX_INSTRUCTION_BYTES);
45 case XED_ERROR_BUFFER_TOO_SHORT:
46 PrintDebug("Not enough bytes provided\n");
48 case XED_ERROR_GENERAL_ERROR:
49 PrintDebug("Could not decode given input.\n");
52 PrintDebug("Unhandled error code \n");
56 length = xed_decoded_inst_get_length (&xedd);
58 PrintDebug("\nThe %dth instruction:", num);
60 PrintDebug("\ncategory: ");
61 PrintDebug(" %s\n", xed_category_enum_t2str(xed_decoded_inst_get_category(&xedd)));;
62 PrintDebug("ISA-extension:%s\n ",xed_extension_enum_t2str(xed_decoded_inst_get_extension(&xedd)));
63 PrintDebug(" instruction-length: %d\n ", xed_decoded_inst_get_length(&xedd));
64 PrintDebug(" operand-size:%d\n ", xed_operand_values_get_effective_operand_width(xed_decoded_inst_operands_const(&xedd)));
65 PrintDebug("address-size:%d\n ", xed_operand_values_get_effective_address_width(xed_decoded_inst_operands_const(&xedd)));
66 PrintDebug("iform-enum-name:%s\n ",xed_iform_enum_t2str(xed_decoded_inst_get_iform_enum(&xedd)));
67 PrintDebug("iform-enum-name-dispatch (zero based):%d\n ", xed_decoded_inst_get_iform_enum_dispatch(&xedd));
68 PrintDebug("iclass-max-iform-dispatch: %d\n ", xed_iform_max_per_iclass(xed_decoded_inst_get_iclass(&xedd)));
71 // print_operands(&xedd);
74 // print_memops(&xedd);
80 //print_attributes(&xedd);*/