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

📄 asm.h

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 H
字号:
/* *	The HT Editor *	asm.h * *	Copyright (C) 1999-2002 Stefan Weyergraf * *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License version 2 as *	published by the Free Software Foundation. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *	GNU General Public License for more details. * *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#ifndef __ASM_H__#define __ASM_H__#include "data.h"#define MAX_INSN_SIZE	16struct CPU_ADDR {	union {		struct {			uint16 seg;			uint32 offset;		} addr32;		struct {			uint64 addr;		} flat64;	};};struct asm_code {	asm_code *next;	int size;	byte data[MAX_INSN_SIZE];	void *context;};typedef void dis_insn;typedef void asm_insn;/* *	CLASS assembler */class Assembler: public Object {protected:	int (*imm_eval_proc)(void *context, const char *s, uint64 &v);	void *imm_eval_context;	asm_code *codes;	asm_code code;	char error_msg[256];	bool error;	int options;	bool bigendian;		void emitbyte(byte b);		void emitword(uint16 w);		void emitdword(uint32 d);		void emitqword(uint64 q);		void free_asm_codes();		void deletecode(asm_code *c);		void clearcode();		void newcode();		void pushcode();public:			Assembler(bool bigendian);			Assembler(BuildCtorArg&a): Object(a) {};	virtual		~Assembler();/* new */	virtual	asm_insn *alloc_insn();	virtual	asm_code *encode(asm_insn *asm_insn, int options, CPU_ADDR cur_address);		const char *get_error_msg();	virtual	const char *get_name();	virtual	bool translate_str(asm_insn *asm_insn, const char *s) = 0;		void set_error_msg(const char *format, ...);		void set_imm_eval_proc(int (*imm_eval_proc)(void *context, const char *s, uint64 &v), void *imm_eval_context);		asm_code *shortest(asm_code *codes);};/* *	CLASS disassembler *//* generic disassembler styles */#define DIS_STYLE_HIGHLIGHT		0x80000000		/* create highlighting information in strf() */#define DIS_STYLE_HEX_CSTYLE		0x40000000		/* IF SET: mov eax, 0x12345678 		ELSE: mov eax, 12345678 */#define DIS_STYLE_HEX_ASMSTYLE		0x20000000		/* IF SET: mov eax, 12345678h 		ELSE: mov eax, 12345678 */#define DIS_STYLE_HEX_UPPERCASE		0x10000000		/* IF SET: mov eax, 5678ABCD	 	ELSE: mov eax, 5678abcd */#define DIS_STYLE_HEX_NOZEROPAD		0x08000000		/* IF SET: mov eax, 8002344	 	ELSE: mov eax, 008002344 */#define DIS_STYLE_SIGNED		0x04000000		/* IF SET: mov eax, -1	 		ELSE: mov eax, 0ffffffffh */#define DIS_STYLE_TABSIZE			12extern char* (*addr_sym_func)(CPU_ADDR addr, int *symstrlen, void *context);extern void* addr_sym_func_context;enum AsmSyntaxHighlightEnum {	e_cs_default=0,	e_cs_comment,	e_cs_number,	e_cs_symbol,	e_cs_string};class Disassembler: public Object {protected:	int options;	bool highlight;		const char *get_cs(AsmSyntaxHighlightEnum style);		void hexd(char **s, int size, int options, uint32 imm);		void hexq(char **s, int size, int options, uint64 imm);		void enable_highlighting();		void disable_highlighting();public:		Disassembler();		Disassembler(BuildCtorArg&a): Object(a) {};		void load(ObjectStream &f);/* new */	virtual	dis_insn *createInvalidInsn();	virtual	dis_insn *decode(byte *code, int maxlen, CPU_ADDR cur_address)=0;	virtual	dis_insn *duplicateInsn(dis_insn *disasm_insn)=0;	virtual	void	getOpcodeMetrics(int &min_length, int &max_length, int &min_look_ahead, int &avg_look_ahead, int &addr_align)=0;	virtual	byte getSize(dis_insn *disasm_insn)=0;	virtual	const char *getName()=0;	virtual	bool selectNext(dis_insn *disasm_insn);	virtual	const char *str(dis_insn *disasm_insn, int style);	virtual	const char *strf(dis_insn *disasm_insn, int style, const char *format)=0;	virtual	bool validInsn(dis_insn *disasm_insn)=0;};/***************************************************************************** *	The strf() format                                                       * *****************************************************************************	String	Action    --------------------------------------------------	%x		substitute expression with symbol "x"	?xy...y	if symbol "x" is undefined leave out the whole expression,			otherwise subsitute expression with string between the two "y"s	Symbol	Desc    --------------------------------------------------	p 		prefix	n 		name	1 		first operand	2 		second operand	3 		third operand	4 		forth operand*/#define DISASM_STRF_VAR			'%'#define DISASM_STRF_COND		'?'#define DISASM_STRF_PREFIX		'p'#define DISASM_STRF_NAME		'n'#define DISASM_STRF_FIRST		'1'#define DISASM_STRF_SECOND		'2'#define DISASM_STRF_THIRD		'3'#define DISASM_STRF_FORTH		'4'#define DISASM_STRF_FIFTH		'5'//#define DISASM_STRF_DEFAULT_FORMAT	"?p#%p #%n\t%1?2#, %2?3/, %3/?4-, %4-#"#define DISASM_STRF_DEFAULT_FORMAT	"?p#%p #%n\t%1?2#, %2#?3#, %3#?4#, %4#?5#, %5#"#define DISASM_STRF_SMALL_FORMAT	"?p#%p #%n?1# %1#?2#,%2#?3#,%3#?4#,%4#?5#,%5#"#define ATOM_DISASM_X86		MAGIC32("DIS\x01")#define ATOM_DISASM_ALPHA	MAGIC32("DIS\x02")#define ATOM_DISASM_JAVA	MAGIC32("DIS\x03")#define ATOM_DISASM_IA64	MAGIC32("DIS\x04")#define ATOM_DISASM_IL		MAGIC32("DIS\x05")#define ATOM_DISASM_X86_VXD	MAGIC32("DIS\x06")#define ATOM_DISASM_PPC		MAGIC32("DIS\x07")#define ATOM_DISASM_X86_64	MAGIC32("DIS\x08")#define ATOM_DISASM_ARM         MAGIC32("DIS\x09")#define ASM_SYNTAX_DEFAULT "\\@d"#define ASM_SYNTAX_COMMENT "\\@#"#define ASM_SYNTAX_NUMBER "\\@n"#define ASM_SYNTAX_SYMBOL "\\@c"#define ASM_SYNTAX_STRING "\\@s"bool init_asm();void done_asm();#endif /* __ASM_H__ */

⌨️ 快捷键说明

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