|
|
/* Disasm.h - definitions for Don's Tiny Disassembler */
typedef unsigned long dword; typedef unsigned short word; typedef unsigned char byte;
extern word memOp; /* actual operation performed */ extern char *memName[]; /* name corresponding to memOp */ enum { memNOP, memRead, memWrite, memRMW, memSegReg, memSegMem};
extern word memSeg; /* value of segment of memory address */ extern dword memLinear, /* offset of operand */ memLinear2; extern word memSeg2, /* duplicate of above if dual mem op */ memSize2, memOp2, memDouble; /* true if two-mem-operand instruction */
extern word memSize; /* bytes of memory of operation */ enum { MemByte=1, MemWord=2, MemDWord=4, MemQWord=8, MemTword=10, Adr4, Adr6=6};
enum { memNoSeg, memES, memCS, memSS, memDS, memFS, memGS};
enum {strCX=1, strSI=2, strDI=4, segDS=8, segES=16, segFS=32, segGS=64}; extern word gpSafe, /* 1 if may continue instruction */ gpRegs, /* regs which instruction modifies as side effect */ gpStack; /* amount stack is changed by */
/* DisAsm86 is my nifty 80x86 disassembler (even handles 32 bit code) */ /* Given current CS:IP, it disassembles the instruction, and returns */ /* the number of code bytes used, and a pointer to a static array of */ /* chars holding the disassembly. It also sets up a bunch of global */ /* vars indicating what memory operations occurred, to aid in decoding */ /* the fault type. */ extern char *DisAsm86(byte far *cp, int *len);
/* Same as DisAsm86, but assumes 32 bit code and data */ extern char *DisAsm386(byte far *cp, int *len);
extern char hexData[];
#if !defined(MS_DOS)
#define sprintf wsprintf
#define vsprintf wvsprintf
#define FP void far *
#else
#define FP void *
#endif
|