Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

271 lines
7.4 KiB

4 years ago
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <io.h>
  5. #include <alphaops.h>
  6. #include "optable.h"
  7. #define MajorVersion 4
  8. #define MinorVersion 0
  9. #ifndef _CRTAPI1
  10. #define _CRTAPI1 __cdecl
  11. #endif
  12. #define RMALLOC( ret, size, string ) \
  13. ret = (PVOID)malloc( size ); \
  14. if (ret == NULL) { \
  15. fprintf(stderr,"Failed to allocate memory: %s (0x%x bytes)\n", \
  16. string, size); \
  17. return FAILURE; \
  18. }
  19. #define EMALLOC( ret, size, string ) \
  20. ret = (PVOID)malloc( size ); \
  21. if (ret == NULL) { \
  22. fprintf(stderr,"Failed to allocate memory: %s (0x%x bytes)\n", \
  23. string, size); \
  24. exit( 1 ); \
  25. }
  26. #define RFREAD( ret, buf, len, num, file, string ) \
  27. ret = fread( (PUCHAR)buf, len, num, file ); \
  28. if ((UINT)ret != num) { \
  29. fprintf(stderr,"Failed to read: %s (0x%x bytes)\n", string, len*num); \
  30. return FAILURE; \
  31. }
  32. #define EFREAD( ret, buf, len, num, file, string ) \
  33. ret = fread( (PUCHAR)buf, len, num, file ); \
  34. if ((UINT)ret != num) { \
  35. fprintf(stderr,"Failed to read: %s (0x%x bytes)\n", string, len*num); \
  36. return; \
  37. }
  38. //--------------------------------------------
  39. #define EvenByte(x) ( (x&1) ? (x+1) : x )
  40. #define MAX_SECTIONS 1024
  41. //
  42. // options
  43. //
  44. #define VERBOSE 0x00000001
  45. #define EMPTY_OPT 0x00000002
  46. #define DEBUG 0x00000004
  47. #define TVB 0x00000008
  48. #define MARK_FLOAT 0x00000010
  49. #define NO_SYMBOLS 0x00000020
  50. #define SPECIFIC 0x00000040
  51. #define ASSEMBLE_ME 0x00000080
  52. #define DEBUG_DIR 0x00000100
  53. #define SYMBOLS_ONLY 0x00000200
  54. #define DISASSEMBLE_ADDRESS 0x00000400
  55. //
  56. // drive table for print/format control
  57. //
  58. #define INTEL_OPCODE_COL 25
  59. #define INTEL_OPCODE_COL_ASSEMBLE 5
  60. #define INTEL_OPERAND_COL 28
  61. #define INTEL_OPERAND_COL_ASSEMBLE 23
  62. #define INTEL_COMMENT_COL 48
  63. #define INTEL_COMMENT_COL_ASSEMBLE 40
  64. #define INTEL_EMPTY_INSTRUCTION 0x00000000
  65. #define INTEL_COMMENT_CHARS "; "
  66. #define INTEL_ASSEMBLE_INCLUDE "#include <???>"
  67. #define MIPS_OPCODE_COL 10
  68. #define MIPS_OPCODE_COL_ASSEMBLE 5
  69. #define MIPS_OPERAND_COL 28
  70. #define MIPS_OPERAND_COL_ASSEMBLE 23
  71. #define MIPS_COMMENT_COL 48
  72. #define MIPS_COMMENT_COL_ASSEMBLE 40
  73. #define MIPS_EMPTY_INSTRUCTION 0x00000000
  74. #define MIPS_COMMENT_CHARS "// "
  75. #define MIPS_ASSEMBLE_INCLUDE "#include <???>"
  76. #define ALPHA_OPCODE_COL 10
  77. #define ALPHA_OPCODE_COL_ASSEMBLE 5
  78. #define ALPHA_OPERAND_COL 28
  79. #define ALPHA_OPERAND_COL_ASSEMBLE 23
  80. #define ALPHA_COMMENT_COL 48
  81. #define ALPHA_COMMENT_COL_ASSEMBLE 40
  82. #define ALPHA_EMPTY_INSTRUCTION 0x00000000
  83. #define ALPHA_COMMENT_CHARS "// "
  84. #define ALPHA_ASSEMBLE_INCLUDE "#include <ksalpha.h>\n#define at AT\n\n\t.set noat"
  85. #define ALPHA_INDEX 0
  86. #define MIPS_INDEX 1
  87. #define INTEL_INDEX 2
  88. #define MAX_PLATFORM 3
  89. #define REGULAR_DISASSEMBLE 0
  90. #define ASSEMBLE_DISASSEMBLE 1
  91. #define OPCODE_COL 0
  92. #define OPERAND_COL 1
  93. #define COMMENT_COL 2
  94. //
  95. // define file types
  96. //
  97. #define LIBRARY_FILE 0
  98. #define OBJECT_FILE 1
  99. #define EXE_FILE 2
  100. #define ROM_FILE 3
  101. //
  102. // misc stuff
  103. //
  104. #define FAILURE -1
  105. #define SUCCESS 0
  106. #define LAST_ONE 0xffffffff
  107. //--------------------------------------------
  108. typedef struct _Options {
  109. unsigned long Mask;
  110. } Options;
  111. typedef struct _SymLookup {
  112. ULONG Value;
  113. PIMAGE_SYMBOL pSymbol;
  114. } SymLookup, *pSymLookup;
  115. typedef struct _FileList {
  116. struct _FileList *Next;
  117. //
  118. // Stuff right out of the image/object/library, and exists
  119. // only once per image/object/library.
  120. //
  121. UCHAR *Name;
  122. PVOID pSymbolTable;
  123. PVOID pStringTable;
  124. PVOID pPdata;
  125. ULONG NumSymbols;
  126. ULONG NumPdataEntries;
  127. //
  128. // Stuff that gets cycled through, on a section by section basis
  129. //
  130. PVOID pData;
  131. PVOID pRelocations;
  132. PVOID pLineNumbers;
  133. //
  134. // Messaged information
  135. //
  136. //
  137. // 0'th element is a sorted list of ALL symbols.
  138. // the n'th element is a sorted list of all symbols for that section.
  139. //
  140. pSymLookup pSectionSymbols[MAX_SECTIONS];
  141. ULONG SymbolCount[MAX_SECTIONS];
  142. } FileList, *pFileList;
  143. typedef unsigned long ADDR;
  144. typedef unsigned long *PADDR;
  145. typedef struct _PlatformGoop {
  146. ULONG OpcodeColumn[2];
  147. ULONG OperandColumn[2];
  148. ULONG CommentColumn[2];
  149. PUCHAR pCommentChars;
  150. PUCHAR pIncludeString;
  151. ULONG EmptyInstruction;
  152. } PlatformGoop, *pPlatformGoop;
  153. extern PlatformGoop PlatformAttr[MAX_PLATFORM];
  154. //
  155. // In dis32.c
  156. //
  157. extern VOID PrintHelp(VOID);
  158. extern INT _CRTAPI1 main(INT, PUCHAR *);
  159. extern INT ProcessCommandLine(INT, PUCHAR *);
  160. extern VOID Disassemble(VOID);
  161. extern VOID FreeFileList(VOID);
  162. extern INT SetOptions(INT, PUCHAR *);
  163. extern VOID GetFileList(INT, PUCHAR *);
  164. extern INT OpenDisFile(PUCHAR);
  165. extern VOID CloseDisFile(VOID);
  166. extern VOID Dump(pFileList, INT);
  167. extern VOID DumpLib(pFileList);
  168. extern INT ReadPdata(pFileList, INT);
  169. extern INT ReadSymbolTable(pFileList, INT);
  170. extern VOID GenerateDataSections(PUCHAR, ULONG, PIMAGE_SECTION_HEADER, ULONG,
  171. pFileList);
  172. extern VOID OutputCommonSymbols(pFileList);
  173. //
  174. // From common discom.c
  175. //
  176. extern PUCHAR BlankFill(PUCHAR, PUCHAR, ULONG);
  177. extern PUCHAR OutputHex(PUCHAR, ULONG, ULONG, BOOLEAN);
  178. extern PUCHAR OutputHexString (PUCHAR, PUCHAR, INT);
  179. extern PUCHAR OutputHexCode(PUCHAR, PUCHAR, INT);
  180. extern PUCHAR OutputHexValue(PUCHAR, PUCHAR, INT, INT);
  181. extern PUCHAR OutputEffectiveAddress(PUCHAR, ULONG);
  182. extern PUCHAR OutputString(PUCHAR, PUCHAR);
  183. extern PUCHAR OutputCountString(PUCHAR, PUCHAR, ULONG);
  184. extern PUCHAR OutputReg(PUCHAR, ULONG);
  185. extern PUCHAR OutputFReg(PUCHAR, ULONG);
  186. extern PUCHAR OutputSymbol(PUCHAR, PIMAGE_SYMBOL, ULONG);
  187. extern INT HexDigits(ULONG);
  188. extern PIMAGE_SYMBOL FindObjSymbolByRelocation(ULONG, PIMAGE_SECTION_HEADER);
  189. extern PIMAGE_SYMBOL FindObjSymbolByAddress(ULONG, ULONG);
  190. extern PIMAGE_SYMBOL FindExeSymbol(ULONG);
  191. extern PIMAGE_RELOCATION FindRelocation(ULONG, PIMAGE_SECTION_HEADER);
  192. extern PUCHAR GetSymbolString(PIMAGE_SYMBOL, PULONG);
  193. //
  194. // Misc external routines
  195. //
  196. extern VOID opTableInit(VOID);
  197. //
  198. // Platform routines
  199. //
  200. extern INT disasm_alpha (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
  201. PIMAGE_SECTION_HEADER, ULONG );
  202. extern INT disasm_mips (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
  203. PIMAGE_SECTION_HEADER, ULONG );
  204. extern INT disasm_intel (ULONG, ULONG, PUCHAR, PUCHAR, PUCHAR,
  205. PIMAGE_SECTION_HEADER, ULONG );
  206. //
  207. // data
  208. //
  209. extern pFileList FilesList;
  210. extern IMAGE_FILE_HEADER FileHeader;
  211. extern INT FileType;
  212. extern Options Option;
  213. extern PUCHAR Procedure;
  214. extern INT ArchitectureType;
  215. extern ULONG ImageBase;