X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=misc%2Fdecoder_test%2FXED2%2Fexamples%2Fxed-ex2.cpp;fp=misc%2Fdecoder_test%2FXED2%2Fexamples%2Fxed-ex2.cpp;h=79ba59053c4f6922171af569b4764f0d25afcb75;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/misc/decoder_test/XED2/examples/xed-ex2.cpp b/misc/decoder_test/XED2/examples/xed-ex2.cpp new file mode 100644 index 0000000..79ba590 --- /dev/null +++ b/misc/decoder_test/XED2/examples/xed-ex2.cpp @@ -0,0 +1,128 @@ +/*BEGIN_LEGAL +Intel Open Source License + +Copyright (c) 2002-2007 Intel Corporation +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. Redistributions +in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. Neither the name of +the Intel Corporation nor the names of its contributors may be used to +endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +END_LEGAL */ +/// @file xed-ex2.cpp +/// @author Mark Charney + +// decoder example. C++ version of xed-ex4.c + +extern "C" { +#include "xed-interface.h" +} +#include +#include +#include +#include +using namespace std; + +int main(int argc, char** argv); + +int main(int argc, char** argv) { + xed_bool_t long_mode = false; + xed_state_t dstate; + int first_argv; + int bytes = 0; + unsigned char itext[XED_MAX_INSTRUCTION_BYTES]; + int i; + unsigned int u; + xed_decoded_inst_t xedd; +#define BUFLEN 1000 + char buffer[BUFLEN]; + + xed_tables_init(); + xed_state_zero(&dstate); + xed_set_verbosity( 99 ); + + if (argc > 2 && strcmp(argv[1], "-64") == 0) + long_mode = true; + + if (long_mode) { + first_argv = 2; + dstate.mmode=XED_MACHINE_MODE_LONG_64; + } + else { + first_argv=1; + xed_state_init(&dstate, + XED_MACHINE_MODE_LEGACY_32, + XED_ADDRESS_WIDTH_32b, + XED_ADDRESS_WIDTH_32b); + } + xed_decoded_inst_zero_set_mode(&xedd, &dstate); + for( i=first_argv ;i < argc; i++) { + unsigned int x; + istringstream s(argv[i]); + s >> hex >> x; + + assert(bytes < XED_MAX_INSTRUCTION_BYTES); + itext[bytes++] = STATIC_CAST(xed_uint8_t,x); + } + if (bytes == 0) { + cout << "Must supply some hex bytes" << endl; + exit(1); + } + + cout << "PARSING BYTES: "; + for( i=0;i(u); + ok = xed_format(syntax, &xedd, buffer, BUFLEN, 0); + if (ok) + cout << xed_syntax_enum_t2str(syntax) << " syntax: " << buffer << endl; + else + cout << "Error disassembling " << xed_syntax_enum_t2str(syntax) << " syntax" << endl; + } + return 0; +}