1 /* 2 * HT Editor 3 * analy_x86.h 4 * 5 * Copyright (C) 1999-2002 Sebastian Biallas (sb@biallas.net) 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 ANALY_X86_H 22 #define ANALY_X86_H 23 24 #include "analy.h" 25 26 class AddressX86Flat32: public Address { 27 public: 28 uint32 addr; AddressX86Flat32(BuildCtorArg & a)29 AddressX86Flat32(BuildCtorArg&a): Address(a) {}; addr(a)30 AddressX86Flat32(uint32 a=0): addr(a) {}; 31 virtual bool add(int offset); 32 virtual int byteSize(); 33 virtual int compareTo(const Object *obj) const; 34 virtual int compareDelinear(Address *to); 35 virtual bool difference(int &result, Address *to); 36 virtual AddressX86Flat32 *clone() const; 37 virtual void getFromArray(const byte *array); 38 virtual void getFromCPUAddress(CPU_ADDR *ca); 39 virtual bool getFromUInt64(uint64 u); 40 virtual void load(ObjectStream &s); 41 virtual ObjectID getObjectID() const; 42 virtual int parseString(const char *s, int length, Analyser *a); 43 virtual void putIntoArray(byte *array) const; 44 virtual void putIntoCPUAddress(CPU_ADDR *ca) const; 45 virtual bool putIntoUInt64(uint64 &u) const; 46 virtual void store(ObjectStream &s) const; 47 virtual int stringify(char *s, int max_length, int format) const; 48 virtual int stringSize() const; 49 }; 50 51 class AddressX86_1616: public Address { 52 public: 53 uint16 seg; 54 uint16 addr; 55 public: AddressX86_1616(BuildCtorArg & a)56 AddressX86_1616(BuildCtorArg&a): Address(a) {}; 57 AddressX86_1616(uint16 seg=0, uint16 addr=0); 58 virtual bool add(int offset); 59 virtual int byteSize(); 60 virtual int compareTo(const Object *obj) const; 61 virtual int compareDelinear(Address *to); 62 virtual bool difference(int &result, Address *to); 63 virtual AddressX86_1616 *clone() const; 64 virtual void getFromArray(const byte *array); 65 virtual void getFromCPUAddress(CPU_ADDR *ca); 66 virtual bool getFromUInt64(uint64 u); 67 virtual void load(ObjectStream &s); 68 virtual ObjectID getObjectID() const; 69 virtual int parseString(const char *s, int length, Analyser *a); 70 virtual void putIntoArray(byte *array) const; 71 virtual void putIntoCPUAddress(CPU_ADDR *ca) const; 72 virtual bool putIntoUInt64(uint64 &u) const; 73 virtual void store(ObjectStream &s) const; 74 virtual int stringify(char *s, int max_length, int format) const; 75 virtual int stringSize() const; 76 }; 77 78 class AddressX86_1632: public Address { 79 public: 80 uint16 seg; 81 uint32 addr; 82 public: AddressX86_1632(BuildCtorArg & a)83 AddressX86_1632(BuildCtorArg&a): Address(a) {}; 84 AddressX86_1632(uint16 seg=0, uint32 addr=0); 85 virtual bool add(int offset); 86 virtual int byteSize(); 87 virtual int compareTo(const Object *obj) const; 88 virtual int compareDelinear(Address *obj); 89 virtual bool difference(int &result, Address *to); 90 virtual AddressX86_1632 *clone() const; 91 virtual void getFromArray(const byte *array); 92 virtual void getFromCPUAddress(CPU_ADDR *ca); 93 virtual bool getFromUInt64(uint64 u); 94 virtual void load(ObjectStream &s); 95 virtual ObjectID getObjectID() const; 96 virtual int parseString(const char *s, int length, Analyser *a); 97 virtual void putIntoArray(byte *array) const; 98 virtual void putIntoCPUAddress(CPU_ADDR *ca) const; 99 virtual bool putIntoUInt64(uint64 &u) const; 100 virtual void store(ObjectStream &s) const; 101 virtual int stringify(char *s, int max_length, int format) const; 102 virtual int stringSize() const; 103 }; 104 105 #define ANALYX86DISASSEMBLER_FLAGS_16BIT 1 106 #define ANALYX86DISASSEMBLER_FLAGS_SEGMENTED 2 107 #define ANALYX86DISASSEMBLER_FLAGS_FLAT64 4 108 #define ANALYX86DISASSEMBLER_FLAGS_VXD_X86DIS 8 109 #define ANALYX86DISASSEMBLER_FLAGS_AMD64 16 110 111 class AnalyX86Disassembler: public AnalyDisassembler { 112 protected: 113 void createUnasm(); 114 public: 115 int flags; 116 AnalyX86Disassembler()117 AnalyX86Disassembler() {}; AnalyX86Disassembler(BuildCtorArg & a)118 AnalyX86Disassembler(BuildCtorArg&a): AnalyDisassembler(a) {}; 119 void init(Analyser *A, int flags); 120 void load(ObjectStream &f); 121 virtual ObjectID getObjectID() const; 122 123 virtual Address *branchAddr(OPCODE *opcode, branch_enum_t branchtype, bool examine); 124 Address *createAddress(uint16 segment, uint64 offset); 125 uint16 getSegment(Address *addr); 126 virtual void examineOpcode(OPCODE *opcode); 127 virtual branch_enum_t isBranch(OPCODE *opcode); 128 virtual void store(ObjectStream &f) const; 129 }; 130 131 #endif 132