NT4/private/sdktools/dis32/dis32.h
2020-09-30 17:12:29 +02:00

272 lines
7.4 KiB
C

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <alphaops.h>
#include "optable.h"
#define MajorVersion 4
#define MinorVersion 0
#ifndef _CRTAPI1
#define _CRTAPI1 __cdecl
#endif
#define RMALLOC( ret, size, string ) \
ret = (PVOID)malloc( size ); \
if (ret == NULL) { \
fprintf(stderr,"Failed to allocate memory: %s (0x%x bytes)\n", \
string, size); \
return FAILURE; \
}
#define EMALLOC( ret, size, string ) \
ret = (PVOID)malloc( size ); \
if (ret == NULL) { \
fprintf(stderr,"Failed to allocate memory: %s (0x%x bytes)\n", \
string, size); \
exit( 1 ); \
}
#define RFREAD( ret, buf, len, num, file, string ) \
ret = fread( (PUCHAR)buf, len, num, file ); \
if ((UINT)ret != num) { \
fprintf(stderr,"Failed to read: %s (0x%x bytes)\n", string, len*num); \
return FAILURE; \
}
#define EFREAD( ret, buf, len, num, file, string ) \
ret = fread( (PUCHAR)buf, len, num, file ); \
if ((UINT)ret != num) { \
fprintf(stderr,"Failed to read: %s (0x%x bytes)\n", string, len*num); \
return; \
}
//--------------------------------------------
#define EvenByte(x) ( (x&1) ? (x+1) : x )
#define MAX_SECTIONS 1024
//
// options
//
#define VERBOSE 0x00000001
#define EMPTY_OPT 0x00000002
#define DEBUG 0x00000004
#define TVB 0x00000008
#define MARK_FLOAT 0x00000010
#define NO_SYMBOLS 0x00000020
#define SPECIFIC 0x00000040
#define ASSEMBLE_ME 0x00000080
#define DEBUG_DIR 0x00000100
#define SYMBOLS_ONLY 0x00000200
#define DISASSEMBLE_ADDRESS 0x00000400
//
// drive table for print/format control
//
#define INTEL_OPCODE_COL 25
#define INTEL_OPCODE_COL_ASSEMBLE 5
#define INTEL_OPERAND_COL 28
#define INTEL_OPERAND_COL_ASSEMBLE 23
#define INTEL_COMMENT_COL 48
#define INTEL_COMMENT_COL_ASSEMBLE 40
#define INTEL_EMPTY_INSTRUCTION 0x00000000
#define INTEL_COMMENT_CHARS "; "
#define INTEL_ASSEMBLE_INCLUDE "#include <???>"
#define MIPS_OPCODE_COL 10
#define MIPS_OPCODE_COL_ASSEMBLE 5
#define MIPS_OPERAND_COL 28
#define MIPS_OPERAND_COL_ASSEMBLE 23
#define MIPS_COMMENT_COL 48
#define MIPS_COMMENT_COL_ASSEMBLE 40
#define MIPS_EMPTY_INSTRUCTION 0x00000000
#define MIPS_COMMENT_CHARS "// "
#define MIPS_ASSEMBLE_INCLUDE "#include <???>"
#define ALPHA_OPCODE_COL 10
#define ALPHA_OPCODE_COL_ASSEMBLE 5
#define ALPHA_OPERAND_COL 28
#define ALPHA_OPERAND_COL_ASSEMBLE 23
#define ALPHA_COMMENT_COL 48
#define ALPHA_COMMENT_COL_ASSEMBLE 40
#define ALPHA_EMPTY_INSTRUCTION 0x00000000
#define ALPHA_COMMENT_CHARS "// "
#define ALPHA_ASSEMBLE_INCLUDE "#include <ksalpha.h>\n#define at AT\n\n\t.set noat"
#define ALPHA_INDEX 0
#define MIPS_INDEX 1
#define INTEL_INDEX 2
#define MAX_PLATFORM 3
#define REGULAR_DISASSEMBLE 0
#define ASSEMBLE_DISASSEMBLE 1
#define OPCODE_COL 0
#define OPERAND_COL 1
#define COMMENT_COL 2
//
// define file types
//
#define LIBRARY_FILE 0
#define OBJECT_FILE 1
#define EXE_FILE 2
#define ROM_FILE 3
//
// misc stuff
//
#define FAILURE -1
#define SUCCESS 0
#define LAST_ONE 0xffffffff
//--------------------------------------------
typedef struct _Options {
unsigned long Mask;
} Options;
typedef struct _SymLookup {
ULONG Value;
PIMAGE_SYMBOL pSymbol;
} SymLookup, *pSymLookup;
typedef struct _FileList {
struct _FileList *Next;
//
// Stuff right out of the image/object/library, and exists
// only once per image/object/library.
//
UCHAR *Name;
PVOID pSymbolTable;
PVOID pStringTable;
PVOID pPdata;
ULONG NumSymbols;
ULONG NumPdataEntries;
//
// Stuff that gets cycled through, on a section by section basis
//
PVOID pData;
PVOID pRelocations;
PVOID pLineNumbers;
//
// Messaged information
//
//
// 0'th element is a sorted list of ALL symbols.
// the n'th element is a sorted list of all symbols for that section.
//
pSymLookup pSectionSymbols[MAX_SECTIONS];
ULONG SymbolCount[MAX_SECTIONS];
} FileList, *pFileList;
typedef unsigned long ADDR;
typedef unsigned long *PADDR;
typedef struct _PlatformGoop {
ULONG OpcodeColumn[2];
ULONG OperandColumn[2];
ULONG CommentColumn[2];
PUCHAR pCommentChars;
PUCHAR pIncludeString;
ULONG EmptyInstruction;
} PlatformGoop, *pPlatformGoop;
extern PlatformGoop PlatformAttr[MAX_PLATFORM];
//
// In dis32.c
//
extern VOID PrintHelp(VOID);
extern INT _CRTAPI1 main(INT, PUCHAR *);
extern INT ProcessCommandLine(INT, PUCHAR *);
extern VOID Disassemble(VOID);
extern VOID FreeFileList(VOID);
extern INT SetOptions(INT, PUCHAR *);
extern VOID GetFileList(INT, PUCHAR *);
extern INT OpenDisFile(PUCHAR);
extern VOID CloseDisFile(VOID);
extern VOID Dump(pFileList, INT);
extern VOID DumpLib(pFileList);
extern INT ReadPdata(pFileList, INT);
extern INT ReadSymbolTable(pFileList, INT);
extern VOID GenerateDataSections(PUCHAR, ULONG, PIMAGE_SECTION_HEADER, ULONG,
pFileList);
extern VOID OutputCommonSymbols(pFileList);
//
// From common discom.c
//
extern PUCHAR BlankFill(PUCHAR, PUCHAR, ULONG);
extern PUCHAR OutputHex(PUCHAR, ULONG, ULONG, BOOLEAN);
extern PUCHAR OutputHexString (PUCHAR, PUCHAR, INT);
extern PUCHAR OutputHexCode(PUCHAR, PUCHAR, INT);
extern PUCHAR OutputHexValue(PUCHAR, PUCHAR, INT, INT);
extern PUCHAR OutputEffectiveAddress(PUCHAR, ULONG);
extern PUCHAR OutputString(PUCHAR, PUCHAR);
extern PUCHAR OutputCountString(PUCHAR, PUCHAR, ULONG);
extern PUCHAR OutputReg(PUCHAR, ULONG);
extern PUCHAR OutputFReg(PUCHAR, ULONG);
extern PUCHAR OutputSymbol(PUCHAR, PIMAGE_SYMBOL, ULONG);
extern INT HexDigits(ULONG);
extern PIMAGE_SYMBOL FindObjSymbolByRelocation(ULONG, PIMAGE_SECTION_HEADER);
extern PIMAGE_SYMBOL FindObjSymbolByAddress(ULONG, ULONG);
extern PIMAGE_SYMBOL FindExeSymbol(ULONG);
extern PIMAGE_RELOCATION FindRelocation(ULONG, PIMAGE_SECTION_HEADER);
extern PUCHAR GetSymbolString(PIMAGE_SYMBOL, PULONG);
//
// Misc external routines
//
extern VOID opTableInit(VOID);
//
// Platform routines
//
extern INT disasm_alpha (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
PIMAGE_SECTION_HEADER, ULONG );
extern INT disasm_mips (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
PIMAGE_SECTION_HEADER, ULONG );
extern INT disasm_intel (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
PIMAGE_SECTION_HEADER, ULONG );
//
// data
//
extern pFileList FilesList;
extern IMAGE_FILE_HEADER FileHeader;
extern INT FileType;
extern Options Option;
extern PUCHAR Procedure;
extern INT ArchitectureType;
extern ULONG ImageBase;