/ * Các giao diện giữa các thư viện opcode và người gọi của mình. Bản quyền (C) 1999-2014 Free Software Foundation, Inc. Chương trình này là phần mềm miễn phí; bạn có thể phát hành lại nó và/hoặc sửa đổi nó theo các điều khoản của GNU General Public License như được xuất bản bởi Quỹ phần mềm tự do; cả hai phiên bản 3, hoặc (tùy chọn) bất kỳ phiên bản sau này. Chương trình này được phân phối với hy vọng rằng nó sẽ là hữu ích, nhưng mà không có bất kỳ bảo hành; Nếu không có bảo hành ngay cả ngụ ý của Mua bán, hoặc thể dục cho một mục đích cụ thể. Xem các GNU General Public License để biết thêm chi tiết. Bạn nên đã nhận được một bản sao của GNU General Public License cùng với chương trình này; Nếu không, viết các phần mềm miễn phí Foundation, Inc., 51 Franklin Street - tầng thứ năm, Boston, MA 02110-1301, USA. Viết bởi Cygnus hỗ trợ, năm 1993. Thư viện opcode (libopcodes.a) cung cấp hướng dẫn giải mã cho nhiều hướng dẫn bộ, callable với một giống hệt nhau giao diện, cho việc thực hiện chương trình hướng dẫn xử lý độc lập chỉ dẫn thiết lập được xử lý. */#ifndef DIS_ASM_H#define DIS_ASM_H#ifdef __cplusplusextern "C" {}#endif#include #include "bfd.h" typedef int (* fprintf_ftype) (void *, const char *,...) ATTRIBUTE_FPTR_PRINTF_2;ENUM dis_insn_type{ dis_noninsn, / * không phải là một chỉ dẫn hợp lệ. */ dis_nonbranch, / * không phải là một hướng dẫn chi nhánh. */ dis_branch, / * chi nhánh vô điều kiện. */ dis_condbranch, / * chi nhánh có điều kiện. */ dis_jsr, / * nhảy để chương trình con. */ dis_condjsr, / * có điều kiện chuyển đến chương trình con. */ dis_dref, / * dữ liệu tham khảo chỉ dẫn. */ dis_dref2 / * hai dữ liệu tham khảo trong giảng dạy. */};/ * Struct này được thông qua vào các hướng dẫn giải mã các thói quen, và được thông qua trở lại ra thành từng gọi lại. Các lĩnh vực khác nhau được sử dụng để truyền đạt thông tin từ chính thói quen của bạn vào callbacks của bạn, cho đi qua các thông tin vào bộ giải mã chỉ dẫn (chẳng hạn như các địa chỉ của các chức năng gọi lại), hoặc cho đi thông tin trở lại từ các bộ giải mã chỉ dẫn cho người gọi của họ. Nó phải được khởi tạo trước khi nó lần đầu tiên được thông qua; Điều này có thể được thực hiện bằng tay hoặc bằng cách sử dụng một trong các khởi tạo macro dưới đây. */typedef struct disassemble_info{ fprintf_ftype fprintf_func; void * stream; void * application_data; / * Nhắm mục tiêu các mô tả. Chúng tôi có thể thay thế này với một con trỏ đến bfd, nhưng điều đó sẽ yêu cầu một. Hiện nay không có bất kỳ yêu cầu như vậy Vì vậy để tránh giới thiệu một trong những chúng tôi ghi lại chúng một cách rõ ràng. */ / * Bfd_flavour. Điều này có thể là bfd_target_unknown_flavour. */ ENUM bfd_flavour hương vị; / * Giá trị bfd_arch. */ ENUM bfd_architecture kiến trúc; / * Giá trị bfd_mach. */ unsigned dài mach; / * Endianness (cho bi-về cuối CPU). Về cuối mono CPU có thể bỏ qua này. */ ENUM bfd_endian về cuối; / * Endianness của mã, cho hỗn hợp về cuối tình huống như cánh tay BE8. */ ENUM bfd_endian endian_code; / * Một bitmask mach-kiến trúc đặc trưng của chọn tập con hướng dẫn, chủ yếu là for processors with run-time-switchable instruction sets. The default, zero, means that there is no constraint. CGEN-based opcodes ports may use ISA_foo masks. */ void *insn_sets; /* Some targets need information about the current section to accurately display insns. If this is NULL, the target disassembler function will have to make its best guess. */ asection *section; /* An array of pointers to symbols either at the location being disassembled or at the start of the function being disassembled. The array is sorted so that the first symbol is intended to be the one used. The others are present for any misc. purposes. This is not set reliably, but if it is not NULL, it is correct. */ asymbol **symbols; /* Number of symbols in array. */ int num_symbols; /* Symbol table provided for targets that want to look at it. This is used on Arm to find mapping symbols and determine Arm/Thumb code. */ asymbol **symtab; int symtab_pos; int symtab_size; /* For use by the disassembler. The top 16 bits are reserved for public use (and are documented here). The bottom 16 bits are for the internal use of the disassembler. */ unsigned long flags; /* Set if the disassembler has determined that there are one or more relocations associated with the instruction being disassembled. */#define INSN_HAS_RELOC (1 << 31) /* Set if the user has requested the disassembly of data as well as code. */#define DISASSEMBLE_DATA (1 << 30) /* Set if the user has specifically set the machine type encoded in the mach field of this structure. */#define USER_SPECIFIED_MACHINE_TYPE (1 << 29) /* Use internally by the target specific disassembly code. */ void *private_data; /* Function used to get bytes to disassemble. MEMADDR is the address of the stuff to be disassembled, MYADDR is t
đang được dịch, vui lòng đợi..
