/[pearpc]/src/debug/x86dis.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /src/debug/x86dis.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 3192 byte(s)
import upstream CVS
1 dpavlin 1 /*
2     * HT Editor
3     * x86dis.h
4     *
5     * Copyright (C) 1999-2002 Stefan Weyergraf
6     *
7     * This program is free software; you can redistribute it and/or modify
8     * it under the terms of the GNU General Public License version 2 as
9     * published by the Free Software Foundation.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19     */
20    
21     #ifndef __X86DIS_H__
22     #define __X86DIS_H__
23    
24     #include "asm.h"
25     #include "x86opc.h"
26     #include "tools/data.h"
27    
28     #define word uint16
29    
30     #define X86DIS_OPCODE_CLASS_STD 0 /* no prefix */
31     #define X86DIS_OPCODE_CLASS_EXT 1 /* 0F */
32     #define X86DIS_OPCODE_CLASS_EXTEXT 2 /* 0F0F */
33    
34     /* x86-specific styles */
35     #define X86DIS_STYLE_EXPLICIT_MEMSIZE 0x00000001 /* IF SET: mov word ptr [0000], ax ELSE: mov [0000], ax */
36     #define X86DIS_STYLE_OPTIMIZE_ADDR 0x00000002 /* IF SET: mov [eax*3], ax ELSE: mov [eax+eax*2+00000000], ax */
37     /*#define X86DIS_STYLE_USE16 0x00000004
38     #define X86DIS_STYLE_USE32 0x00000008*/
39    
40     struct x86dis_insn {
41     bool invalid;
42     sint8 lockprefix;
43     sint8 repprefix;
44     sint8 segprefix;
45     byte size;
46     int opcode;
47     int opcodeclass;
48     int eopsize;
49     int eaddrsize;
50     char *name;
51     x86_insn_op op[3];
52     };
53    
54     /*
55     * CLASS x86dis
56     */
57    
58     class X86Disassembler: public Disassembler {
59     public:
60     int opsize, addrsize;
61     protected:
62     x86dis_insn insn;
63     char insnstr[256];
64     /* initme! */
65     const byte *codep, *ocodep;
66     int seg;
67     int addr; // FIXME: int??
68     byte c;
69     int modrm;
70     int sib;
71     int maxlen;
72    
73     /* new */
74     void decode_insn(x86opc_insn *insn);
75     void decode_modrm(x86_insn_op *op, char size, int allow_reg, int allow_mem, int mmx);
76     void decode_op(x86_insn_op *op, x86opc_insn_op *xop);
77     void decode_sib(x86_insn_op *op, int mod);
78     int esizeaddr(char c);
79     int esizeop(char c);
80     byte getbyte();
81     word getword();
82     dword getdword();
83     int getmodrm();
84     int getsib();
85     void invalidate();
86     int isfloat(char c);
87     void prefixes();
88     int special_param_ambiguity(x86dis_insn *disasm_insn);
89     void str_format(char **str, char **format, char *p, char *n, char *op[3], int oplen[3], char stopchar, int print);
90     virtual void str_op(char *opstr, int *opstrlen, x86dis_insn *insn, x86_insn_op *op, bool explicit_params);
91     public:
92     X86Disassembler();
93     X86Disassembler(int opsize, int addrsize);
94     virtual ~X86Disassembler();
95    
96     /* overwritten */
97     virtual dis_insn *decode(const byte *code, int maxlen, CPU_ADDR addr);
98     virtual dis_insn *duplicateInsn(dis_insn *disasm_insn);
99     virtual void getOpcodeMetrics(int &min_length, int &max_length, int &min_look_ahead, int &avg_look_ahead, int &addr_align);
100     virtual char *getName();
101     virtual byte getSize(dis_insn *disasm_insn);
102     virtual char *str(dis_insn *disasm_insn, int options);
103     virtual char *strf(dis_insn *disasm_insn, int options, char *format);
104     virtual bool validInsn(dis_insn *disasm_insn);
105     };
106    
107    
108     #endif /* __X86DIS_H__ */

  ViewVC Help
Powered by ViewVC 1.1.26