Home | History | Annotate | Download | only in libudis86
      1 /* udis86 - libudis86/extern.h
      2  *
      3  * Copyright (c) 2002-2009, 2013 Vivek Thampi
      4  * All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without modification,
      7  * are permitted provided that the following conditions are met:
      8  *
      9  *     * Redistributions of source code must retain the above copyright notice,
     10  *       this list of conditions and the following disclaimer.
     11  *     * Redistributions in binary form must reproduce the above copyright notice,
     12  *       this list of conditions and the following disclaimer in the documentation
     13  *       and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     18  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
     19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     22  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25  */
     26 #ifndef UD_EXTERN_H
     27 #define UD_EXTERN_H
     28 
     29 #ifdef __cplusplus
     30 extern "C" {
     31 #endif
     32 
     33 #include "types.h"
     34 
     35 /* ============================= PUBLIC API ================================= */
     36 
     37 extern void ud_init(struct ud*);
     38 
     39 extern void ud_set_mode(struct ud*, uint8_t);
     40 
     41 extern void ud_set_pc(struct ud*, uint64_t);
     42 
     43 extern void ud_set_input_hook(struct ud*, int (*)(struct ud*));
     44 
     45 extern void ud_set_input_buffer(struct ud*, const uint8_t*, size_t);
     46 
     47 #ifndef __UD_STANDALONE__
     48 extern void ud_set_input_file(struct ud*, FILE*);
     49 #endif /* __UD_STANDALONE__ */
     50 
     51 extern void ud_set_vendor(struct ud*, unsigned);
     52 
     53 extern void ud_set_syntax(struct ud*, void (*)(struct ud*));
     54 
     55 extern void ud_input_skip(struct ud*, size_t);
     56 
     57 extern int ud_input_end(const struct ud*);
     58 
     59 extern unsigned int ud_decode(struct ud*);
     60 
     61 extern unsigned int ud_disassemble(struct ud*);
     62 
     63 extern void ud_translate_intel(struct ud*);
     64 
     65 extern void ud_translate_att(struct ud*);
     66 
     67 extern const char* ud_insn_asm(const struct ud* u);
     68 
     69 extern const uint8_t* ud_insn_ptr(const struct ud* u);
     70 
     71 extern uint64_t ud_insn_off(const struct ud*);
     72 
     73 extern const char* ud_insn_hex(struct ud*);
     74 
     75 extern unsigned int ud_insn_len(const struct ud* u);
     76 
     77 extern const struct ud_operand* ud_insn_opr(const struct ud *u, unsigned int n);
     78 
     79 extern int ud_opr_is_sreg(const struct ud_operand *opr);
     80 
     81 extern int ud_opr_isgpr(const struct ud_operand *opr);
     82 
     83 extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c);
     84 
     85 extern void ud_set_user_opaque_data(struct ud*, void*);
     86 
     87 extern void* ud_get_user_opaque_data(const struct ud*);
     88 
     89 extern uint64_t ud_insn_sext_imm(const struct ud*, const struct ud_operand*);
     90 
     91 extern void ud_set_asm_buffer(struct ud *u, char *buf, size_t size);
     92 
     93 extern void ud_set_sym_resolver(struct ud *u,
     94                                 const char* (*resolver)(struct ud*,
     95                                                         uint64_t addr,
     96                                                         int64_t *offset));
     97 
     98 /* ========================================================================== */
     99 
    100 #ifdef __cplusplus
    101 }
    102 #endif
    103 #endif /* UD_EXTERN_H */
    104