⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a64-2.h

📁 Intel x86处理器的汇编器
💻 H
字号:
#ifndef a64_H_#define a64_H_/* *	a64.h for mik's assembler attribute */#include "i_attribute.h"#include "opcode.h"/* memory operand type key word */typedef struct {	unsigned char base;		/* base register id */	unsigned char index;		/* index register id */	unsigned char scale;		/* scale value id */	long long disp;			/* disp64 value */	unsigned char oseg;		/* segment override id */	unsigned char cast;		/* operand size cast value */	unsigned char transfer_cast;	/* near or far cast */	unsigned char addr;		/* address size value */} mem_t;/* immediate operand type key word */typedef struct {	long long imme_value;	unsigned char cast;	} imme_t;/* encode information type */typedef struct prefix_struct {/*	unsigned char os_override;	unsigned char as_override;	unsigned char seg_override;*/	unsigned char lock;	unsigned char rep;} prefix_t;/* operand type key word */typedef struct {	unsigned char reg;	mem_t *mem;/*	long long imme;	*/	imme_t *imme; 	} o_key_t;	/* operands attribute key words */typedef struct {	long to_attr;	long do_attr;	long so_attr;} ops_attr_t;		typedef struct {	o_key_t *to_key;	o_key_t *do_key;	o_key_t *so_key;} ops_key_t;typedef struct o_link_t {	ops_key_t *ops_key;		/* operands */	struct o_link_t *next;		/* next operand */} o_link_t;/* the struct for greate instruct encodes key */typedef struct e_key_t {	ops_key_t *ops_key;		/* operands key word */	i_key_t *i_key;			/* instruction key word */	prefix_t *i_prefix;		/* encode information */	unsigned int bits;	unsigned int length;		/* encodes length */	unsigned long long current_pc;	/* next instructin pc value */	unsigned int line;		/* line */	struct e_key_t *next;		/* next encode key word */} e_key_t;/**************************************************************/typedef struct {	char *reg;	unsigned char reg_id;} reg_t;typedef struct {	char *oseg;	unsigned char oseg_id;} oseg_t;typedef struct {	char *scale;	unsigned char scale_id;} scale_t;typedef struct {	char *cast;	unsigned char cast_id;} cast_t;typedef struct {	char *prefix;	unsigned char prefix_id;} i_prefix_t;typedef struct {	char *mode;	unsigned char mode_id;} bitmode_t;typedef struct {	char *bits;	unsigned char bits_id;} bits_t;/***************************************************************//*  define registers id */#define AL	0x10		/* al */#define AX	0x20		/* ax */#define EAX	0x40		/* eax */#define RAX	0x80		/* rax */#define MMX0	0xe0		/* mmx0 */#define XMM0	0xf0		/* xmm0 */#define ES	0xa0		/* es */#define CR0	0xc0		/* cr0 */#define DR0	0xd0		/* dr0 */#define R8B	0x18		/* r8b */#define R8W	0x28		/* r8w */#define R8D	0x48		/* r8d */#define R8	0x88		/* r8 */#define XMM8	0xf8		/* xmm8 */#define CR8	0xc8		/* cr8 */#define DR8	0xd8		/* dr8 */#define CL	0x11		/* cl */#define CX	0x21		/* cx */#define ECX	0x41		/* ecx */#define RCX	0x81		/* rcx */#define MMX1	0xe1		/* mmx1 */#define XMM1	0xf1		/* xmm1 */#define CS	0xa1		/* cs */#define CR1	0xc1		/* cr1 */#define DR1	0xd1		/* dr1 */#define R9B	0x19		/* r9b */#define R9W	0x29		/* r9w */#define R9D	0x49		/* r9d */#define R9	0x89		/* r9 */#define XMM9	0xf9		/* xmm9 */#define CR9	0xc9		/* cr9 */#define DR9	0xd9		/* dr9 */#define DL	0x12		/* dl */#define DX	0x22		/* dx */#define EDX	0x42		/* edx */#define RDX	0x82		/* rdx */#define MMX2	0xe2		/* mmx2 */#define XMM2	0xf2		/* xmm2 */#define SS	0xa2		/* ss */#define CR2	0xc2		/* cr2 */#define DR2	0xd2		/* dr2 */#define R10B	0x1a		/* r10b */#define R10W	0x2a		/* r10w */#define R10D	0x4a		/* r10d */#define R10	0x8a		/* r10 */#define XMM10	0xfa		/* xmm10 */#define CR10	0xca		/* cr10 */#define DR10	0xda		/* dr10 */#define BL	0x13		/* bl */#define BX	0x23		/* bx */#define EBX	0x43		/* ebx */#define RBX	0x83		/* rbx */#define MMX3	0xe3		/* mmx3 */#define XMM3	0xf3		/* xmm3 */#define DS	0xa3		/* ds */#define CR3	0xc3		/* cr3 */#define DR3	0xd3		/* dr3 */#define R11B	0x1b		/* r11b */#define R11W	0x2b		/* r11w */#define R11D	0x4b		/* r11d */#define R11	0x8b		/* r11 */#define XMM11	0xfb		/* xmm11 */#define CR11	0xcb		/* cr11 */#define DR11	0xdb		/* dr11 */#define AH	0x14		/* ah */#define SPL	0x14		/* spl */#define SP	0x24		/* sp */#define ESP	0x44		/* esp */#define RSP	0x84		/* rsp */#define MMX4	0xe4		/* mmx4 */#define XMM4	0xf4		/* xmm4 */#define FS	0xa4		/* fs */#define CR4	0xc4		/* cr4 */#define DR4	0xd4		/* dr4 */#define R12B	0x1c		/* r12b */#define R12W	0x2c		/* r12w */#define R12D	0x4c		/* r12d */#define R12	0x8c		/* r12 */#define XMM12	0xfc		/* xmm12 */#define CR12	0xcc		/* cr12 */#define DR12	0xdc		/* dr12 */#define CH	0x15		/* ch */#define BPL	0x15		/* bpl */#define BP	0x25		/* bp */#define EBP	0x45		/* ebp */#define RBP	0x85		/* rbp */#define MMX5	0xe5		/* mmx5 */#define XMM5	0xf5		/* xmm5 */#define GS	0xa5		/* gs */#define CR5	0xc5		/* cr5 */#define DR5	0xd5		/* dr5 */#define R13B	0x1d		/* r13b */#define R13W	0x2d		/* r13w */#define R13D	0x4d		/* r13d */#define R13	0x8d		/* r13 */#define XMM13	0xfd		/* xmm13 */#define CR13	0xcd		/* cr13 */#define DR13	0xdd		/* dr13 */#define DH	0x16		/* dh */#define SIL	0x16		/* sil */#define SI	0x26		/* si */#define ESI	0x46 		/* esi */#define RSI	0x86		/* rsi */#define MMX6	0xe6		/* mmx6 */#define XMM6	0xf6		/* xmm6 */#define CR6	0xc6		/* cr6 */#define DR6	0xd6		/* dr6 */#define R14B	0x1e		/* r14b */#define R14W	0x2e		/* r14w */#define R14D	0x4e		/* r14d */#define R14	0x8e		/* r14 */#define XMM14	0xfe		/* xmm14 */#define CR14	0xce		/* cr14 */#define DR14	0xde		/* dr14 */#define BH	0x17		/* bh */#define DIL	0x17		/* dil */#define DI	0x27		/* di */#define EDI	0x47		/* edi */#define RDI	0x87		/* rdi */#define MMX7	0xa7		/* mmx7 */#define XMM7	0xf7		/* xmm7 */#define CR7	0xc7		/* cr7 */#define DR7	0xd7		/* dr7 */#define R15B	0x1f		/* r15b */#define R15W	0x2f		/* r15w */#define R15D	0x4f		/* r15d */#define R15	0x8f		/* r15 */#define XMM15	0xff		/* xmm15 */#define CR15	0xcf		/* cr15 */#define DR15	0xdf		/* dr15 *//********************************************************************/#define LONG_64			0x40#define LONG_COMPATIBILITY	0x20#define PROTECTED		0x20#define V86			0x10#define REAL			0x10#define BITS64			0x40#define BITS32			0x20#define BITS16			0x10#define NEAR_ID		(0x80|16)#define FAR_ID		(0x80|32)/*******************************************************************/typedef enum {	KW_MODE = 1,	KW_BITS,	KW_ORG,	KW_BYTE,	KW_WORD,	KW_DWORD,	KW_QWORD,	KW_DQWORD,	KW_PTR,	KW_CONST,	KW_FUNCTION,	KW_VAR,	KW_MACRO,	KW_TEXT,	KW_CODE} kw_id_t;typedef struct {	char *keyword;	kw_id_t keyword_id;} keyword_t;/*********************************************************************/#define BUF_PAGE	4096	/* for encodes a page *//* *	x86-64 full registers */reg_t regs[131];/******************************************************/oseg_t osegs[7];scale_t scales[5];cast_t casts[7];//cast_t transfer_cast[3];i_prefix_t i_prefixs[7];/******************************************************************/keyword_t keyword[16];bitmode_t modes[6];bits_t bits[4];/************************************************************//***** 	a64 gloabl variable *****/          unsigned int current_mode;unsigned int current_bits;unsigned long long current_pc;unsigned long long org;unsigned long line;e_key_t *e_key_link;/* a64's function */void mem_zero(void *ptr, unsigned int size);void *a64_malloc(unsigned int);void a64_free(void *ptr);int get_sum_of_1bit(unsigned int b);int str_cmp(char *d, char *s);int str_len(char *s);int str_cat(char *d, char *s);int get_c(char *s, char c);int trim_space(char *d, char *s);int is_keyword(char *s);unsigned char get_regid(char *s);unsigned char get_osegid(char *s);unsigned char get_scaleid(char *s);unsigned char get_castid(char *s);unsigned char get_modeid(char *s);unsigned char get_bitsid(char *s);unsigned char get_prefixid(char *s);/**********************************/int check_cast(unsigned char cast);int check_oseg(unsigned char oseg);int check_mreg(unsigned char regid);int is_c(char c);int is_n(char c);/* the string is numeric ? */int is_hex(char *s);int is_dec(char *s);int is_binary(char *s);int is_numeric(char *s);int get_sizeof(long long n);/* string to numeric */long long str_to_n(char *s);e_key_t *get_ekey_from_elem(void *elem);/********** instruction function ***********/i_key_t *get_ins(char *s);i_key_t *get_transfer_ins(char *s);i_key_t *get_i_key(i_key_t *i_key, ops_attr_t *ops_attr);int is_free_sym(char *s);	/* true if the symbol is free & can use */int is_label(char *s);		/* true if operand is label  */int is_variable(char *s);	/* true if operand is variable */int is_valid_sym(char *s);	/* for operands */#define is_GPR(regid)	((regid) && ((regid & 0xf0) < 0xa0))#define is_sREG(regid)	((regid) && ((regid & 0xf0) == 0xa0))#define is_cREG(regid) 	((regid) && ((regid & 0xf0) == 0xc0))#define is_dREG(regid)	((regid) && ((regid & 0xf0) == 0xd0))#define is_MMX(regid)	((regid) && ((regid & 0xf0) == 0xe0))#define is_XMM(regid)	((regid) && ((regid & 0xf0) == 0xf0))#define is_qGPR(regid)	((regid) && ((regid & 0xf0) == 0x80))#define is_eGPR(regid)	(is_qGPR(regid) && (regid & 0x08))/**************************************/void release_resource();#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -