Hex Artifact Content
Not logged in

Artifact 8a71f59402b61712fa10c9387c5e0377d12a5024:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a  **************..
0040: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0050: 31 30 0d 0a 0d 0a 42 65 6e 6a 61 6d 69 6e 20 54  10....Benjamin T
0060: 68 61 75 74 2e 20 41 6c 6c 20 72 69 67 68 74 73  haut. All rights
0070: 20 72 65 73 65 72 76 65 64 2e 0d 0a 0d 0a 52 65   reserved.....Re
0080: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 61 6e 64  distribution and
0090: 20 75 73 65 20 69 6e 20 73 6f 75 72 63 65 20 61   use in source a
00a0: 6e 64 20 62 69 6e 61 72 79 20 66 6f 72 6d 73 2c  nd binary forms,
00b0: 20 77 69 74 68 20 6f 72 20 77 69 74 68 6f 75 74   with or without
00c0: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 61   modification, a
00d0: 72 65 20 70 65 72 6d 69 74 74 65 64 0d 0a 70 72  re permitted..pr
00e0: 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65 20  ovided that the 
00f0: 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74  following condit
0100: 69 6f 6e 73 20 61 72 65 20 6d 65 74 3a 0d 0a 0d  ions are met:...
0110: 0a 20 20 31 2e 20 52 65 64 69 73 74 72 69 62 75  .  1. Redistribu
0120: 74 69 6f 6e 73 20 6f 66 20 73 6f 75 72 63 65 20  tions of source 
0130: 63 6f 64 65 20 6d 75 73 74 20 72 65 74 61 69 6e  code must retain
0140: 20 74 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72   the above copyr
0150: 69 67 68 74 20 6e 6f 74 69 63 65 2c 20 74 68 69  ight notice, thi
0160: 73 20 6c 69 73 74 20 6f 66 20 63 6f 6e 64 69 74  s list of condit
0170: 69 6f 6e 73 0d 0a 20 20 20 20 20 61 6e 64 20 74  ions..     and t
0180: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 73  he following dis
0190: 63 6c 61 69 6d 65 72 2e 0d 0a 0d 0a 20 20 32 2e  claimer.....  2.
01a0: 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 73   Redistributions
01b0: 20 69 6e 20 62 69 6e 61 72 79 20 66 6f 72 6d 20   in binary form 
01c0: 6d 75 73 74 20 72 65 70 72 6f 64 75 63 65 20 74  must reproduce t
01d0: 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67  he above copyrig
01e0: 68 74 20 6e 6f 74 69 63 65 2c 20 74 68 69 73 20  ht notice, this 
01f0: 6c 69 73 74 20 6f 66 20 63 6f 6e 64 69 74 69 6f  list of conditio
0200: 6e 73 0d 0a 20 20 20 20 20 61 6e 64 20 74 68 65  ns..     and the
0210: 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 73 63 6c   following discl
0220: 61 69 6d 65 72 20 69 6e 20 74 68 65 20 64 6f 63  aimer in the doc
0230: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 2f 6f  umentation and/o
0240: 72 20 6f 74 68 65 72 20 6d 61 74 65 72 69 61 6c  r other material
0250: 73 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20  s provided with 
0260: 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
0270: 2e 0d 0a 0d 0a 54 48 49 53 20 53 4f 46 54 57 41  .....THIS SOFTWA
0280: 52 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 42  RE IS PROVIDED B
0290: 59 20 42 45 4e 4a 41 4d 49 4e 20 54 48 41 55 54  Y BENJAMIN THAUT
02a0: 20 22 41 53 20 49 53 22 20 41 4e 44 20 41 4e 59   "AS IS" AND ANY
02b0: 20 45 58 50 52 45 53 53 20 4f 52 20 49 4d 50 4c   EXPRESS OR IMPL
02c0: 49 45 44 20 57 41 52 52 41 4e 54 49 45 53 2c 20  IED WARRANTIES, 
02d0: 49 4e 43 4c 55 44 49 4e 47 2c 0d 0a 42 55 54 20  INCLUDING,..BUT 
02e0: 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 4f 2c 20  NOT LIMITED TO, 
02f0: 54 48 45 20 49 4d 50 4c 49 45 44 20 57 41 52 52  THE IMPLIED WARR
0300: 41 4e 54 49 45 53 20 4f 46 20 4d 45 52 43 48 41  ANTIES OF MERCHA
0310: 4e 54 41 42 49 4c 49 54 59 20 41 4e 44 20 46 49  NTABILITY AND FI
0320: 54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54  TNESS FOR A PART
0330: 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 20 41  ICULAR PURPOSE A
0340: 52 45 20 44 49 53 43 4c 41 49 4d 45 44 2e 0d 0a  RE DISCLAIMED...
0350: 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c  IN NO EVENT SHAL
0360: 4c 20 54 48 45 20 52 45 47 45 4e 54 53 20 4f 52  L THE REGENTS OR
0370: 20 43 4f 4e 54 52 49 42 55 54 4f 52 53 20 42 45   CONTRIBUTORS BE
0380: 20 4c 49 41 42 4c 45 20 46 4f 52 20 41 4e 59 20   LIABLE FOR ANY 
0390: 44 49 52 45 43 54 2c 20 49 4e 44 49 52 45 43 54  DIRECT, INDIRECT
03a0: 2c 20 49 4e 43 49 44 45 4e 54 41 4c 2c 20 53 50  , INCIDENTAL, SP
03b0: 45 43 49 41 4c 2c 20 45 58 45 4d 50 4c 41 52 59  ECIAL, EXEMPLARY
03c0: 2c 0d 0a 4f 52 20 43 4f 4e 53 45 51 55 45 4e 54  ,..OR CONSEQUENT
03d0: 49 41 4c 20 44 41 4d 41 47 45 53 20 28 49 4e 43  IAL DAMAGES (INC
03e0: 4c 55 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20  LUDING, BUT NOT 
03f0: 4c 49 4d 49 54 45 44 20 54 4f 2c 20 50 52 4f 43  LIMITED TO, PROC
0400: 55 52 45 4d 45 4e 54 20 4f 46 20 53 55 42 53 54  UREMENT OF SUBST
0410: 49 54 55 54 45 20 47 4f 4f 44 53 20 4f 52 20 53  ITUTE GOODS OR S
0420: 45 52 56 49 43 45 53 3b 20 4c 4f 53 53 20 4f 46  ERVICES; LOSS OF
0430: 20 55 53 45 2c 0d 0a 44 41 54 41 2c 20 4f 52 20   USE,..DATA, OR 
0440: 50 52 4f 46 49 54 53 3b 20 4f 52 20 42 55 53 49  PROFITS; OR BUSI
0450: 4e 45 53 53 20 49 4e 54 45 52 52 55 50 54 49 4f  NESS INTERRUPTIO
0460: 4e 29 20 48 4f 57 45 56 45 52 20 43 41 55 53 45  N) HOWEVER CAUSE
0470: 44 20 41 4e 44 20 4f 4e 20 41 4e 59 20 54 48 45  D AND ON ANY THE
0480: 4f 52 59 20 4f 46 20 4c 49 41 42 49 4c 49 54 59  ORY OF LIABILITY
0490: 2c 20 57 48 45 54 48 45 52 20 49 4e 20 43 4f 4e  , WHETHER IN CON
04a0: 54 52 41 43 54 2c 0d 0a 53 54 52 49 43 54 20 4c  TRACT,..STRICT L
04b0: 49 41 42 49 4c 49 54 59 2c 20 4f 52 20 54 4f 52  IABILITY, OR TOR
04c0: 54 20 28 49 4e 43 4c 55 44 49 4e 47 20 4e 45 47  T (INCLUDING NEG
04d0: 4c 49 47 45 4e 43 45 20 4f 52 20 4f 54 48 45 52  LIGENCE OR OTHER
04e0: 57 49 53 45 29 20 41 52 49 53 49 4e 47 20 49 4e  WISE) ARISING IN
04f0: 20 41 4e 59 20 57 41 59 20 4f 55 54 20 4f 46 20   ANY WAY OUT OF 
0500: 54 48 45 20 55 53 45 20 4f 46 20 54 48 49 53 20  THE USE OF THIS 
0510: 53 4f 46 54 57 41 52 45 2c 0d 0a 45 56 45 4e 20  SOFTWARE,..EVEN 
0520: 49 46 20 41 44 56 49 53 45 44 20 4f 46 20 54 48  IF ADVISED OF TH
0530: 45 20 50 4f 53 53 49 42 49 4c 49 54 59 20 4f 46  E POSSIBILITY OF
0540: 20 53 55 43 48 20 44 41 4d 41 47 45 2e 0d 0a 0d   SUCH DAMAGE....
0550: 0a 77 65 62 3a 20 68 74 74 70 3a 2f 2f 33 64 2e  .web: http://3d.
0560: 62 65 6e 6a 61 6d 69 6e 2d 74 68 61 75 74 2e 64  benjamin-thaut.d
0570: 65 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
0580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0590: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
05a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
05b0: 2f 0d 0a 6d 6f 64 75 6c 65 20 64 62 67 68 65 6c  /..module dbghel
05c0: 70 3b 0d 0a 0d 0a 76 65 72 73 69 6f 6e 20 28 57  p;....version (W
05d0: 69 6e 64 6f 77 73 29 7b 0d 0a 0d 0a 69 6d 70 6f  indows){....impo
05e0: 72 74 20 73 74 64 2e 63 2e 77 69 6e 64 6f 77 73  rt std.c.windows
05f0: 2e 77 69 6e 64 6f 77 73 3b 0d 0a 69 6d 70 6f 72  .windows;..impor
0600: 74 20 63 6f 72 65 2e 72 75 6e 74 69 6d 65 3b 0d  t core.runtime;.
0610: 0a 09 0d 0a 63 6c 61 73 73 20 44 62 67 68 65 6c  ....class Dbghel
0620: 70 20 7b 0d 0a 70 75 62 6c 69 63 3a 0d 0a 09 74  p {..public:...t
0630: 79 70 65 64 65 66 20 63 68 61 72 20 54 43 48 41  ypedef char TCHA
0640: 52 3b 0d 0a 09 74 79 70 65 64 65 66 20 75 6c 6f  R;...typedef ulo
0650: 6e 67 20 44 57 4f 52 44 36 34 3b 0d 0a 09 74 79  ng DWORD64;...ty
0660: 70 65 64 65 66 20 63 68 61 72 2a 20 43 54 53 54  pedef char* CTST
0670: 52 3b 0d 0a 09 74 79 70 65 64 65 66 20 63 68 61  R;...typedef cha
0680: 72 2a 20 50 54 53 54 52 3b 0d 0a 09 74 79 70 65  r* PTSTR;...type
0690: 64 65 66 20 63 6f 6e 73 74 28 63 68 61 72 29 2a  def const(char)*
06a0: 20 50 43 53 54 52 3b 0d 0a 09 0d 0a 09 65 6e 75   PCSTR;......enu
06b0: 6d 20 41 44 44 52 45 53 53 5f 4d 4f 44 45 20 3a  m ADDRESS_MODE :
06c0: 20 44 57 4f 52 44 20 7b 0d 0a 09 09 41 64 64 72   DWORD {....Addr
06d0: 4d 6f 64 65 31 36 31 36 20 3d 20 30 2c 0d 0a 09  Mode1616 = 0,...
06e0: 09 41 64 64 72 4d 6f 64 65 31 36 33 32 20 3d 20  .AddrMode1632 = 
06f0: 31 2c 0d 0a 09 09 41 64 64 72 4d 6f 64 65 52 65  1,....AddrModeRe
0700: 61 6c 20 3d 20 32 2c 0d 0a 09 09 41 64 64 72 4d  al = 2,....AddrM
0710: 6f 64 65 46 6c 61 74 20 3d 20 33 0d 0a 09 7d 3b  odeFlat = 3...};
0720: 0d 0a 09 0d 0a 09 65 6e 75 6d 20 3a 20 44 57 4f  ......enum : DWO
0730: 52 44 20 7b 0d 0a 09 09 53 59 4d 4f 50 54 5f 46  RD {....SYMOPT_F
0740: 41 49 4c 5f 43 52 49 54 49 43 41 4c 5f 45 52 52  AIL_CRITICAL_ERR
0750: 4f 52 53 20 3d 20 30 78 30 30 30 30 30 32 30 30  ORS = 0x00000200
0760: 2c 0d 0a 09 09 53 59 4d 4f 50 54 5f 4c 4f 41 44  ,....SYMOPT_LOAD
0770: 5f 4c 49 4e 45 53 20 3d 20 30 78 30 30 30 30 30  _LINES = 0x00000
0780: 30 31 30 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 73 74  010...};......st
0790: 72 75 63 74 20 47 55 49 44 20 7b 0d 0a 09 09 75  ruct GUID {....u
07a0: 69 6e 74 20 44 61 74 61 31 3b 0d 0a 09 09 75 73  int Data1;....us
07b0: 68 6f 72 74 20 44 61 74 61 32 3b 0d 0a 09 09 75  hort Data2;....u
07c0: 73 68 6f 72 74 20 44 61 74 61 33 3b 0d 0a 09 09  short Data3;....
07d0: 75 62 79 74 65 5b 38 5d 20 44 61 74 61 34 3b 0d  ubyte[8] Data4;.
07e0: 0a 09 7d 3b 0d 0a 09 0d 0a 09 73 74 72 75 63 74  ..};......struct
07f0: 20 41 44 44 52 45 53 53 36 34 20 7b 0d 0a 09 09   ADDRESS64 {....
0800: 44 57 4f 52 44 36 34 20 4f 66 66 73 65 74 3b 0d  DWORD64 Offset;.
0810: 0a 09 09 57 4f 52 44 20 53 65 67 6d 65 6e 74 3b  ...WORD Segment;
0820: 0d 0a 09 09 41 44 44 52 45 53 53 5f 4d 4f 44 45  ....ADDRESS_MODE
0830: 20 4d 6f 64 65 3b 0d 0a 09 7d 3b 0d 0a 09 0d 0a   Mode;...};.....
0840: 09 73 74 72 75 63 74 20 4b 44 48 45 4c 50 36 34  .struct KDHELP64
0850: 20 7b 0d 0a 09 09 44 57 4f 52 44 36 34 20 54 68   {....DWORD64 Th
0860: 72 65 61 64 3b 0d 0a 09 09 44 57 4f 52 44 20 54  read;....DWORD T
0870: 68 43 61 6c 6c 62 61 63 6b 53 74 61 63 6b 3b 0d  hCallbackStack;.
0880: 0a 09 09 44 57 4f 52 44 20 54 68 43 61 6c 6c 62  ...DWORD ThCallb
0890: 61 63 6b 42 53 74 6f 72 65 3b 0d 0a 09 09 44 57  ackBStore;....DW
08a0: 4f 52 44 20 4e 65 78 74 43 61 6c 6c 62 61 63 6b  ORD NextCallback
08b0: 3b 0d 0a 09 09 44 57 4f 52 44 20 46 72 61 6d 65  ;....DWORD Frame
08c0: 50 6f 69 6e 74 65 72 3b 0d 0a 09 09 44 57 4f 52  Pointer;....DWOR
08d0: 44 36 34 20 4b 69 43 61 6c 6c 55 73 65 72 4d 6f  D64 KiCallUserMo
08e0: 64 65 3b 0d 0a 09 09 44 57 4f 52 44 36 34 20 4b  de;....DWORD64 K
08f0: 65 55 73 65 72 43 61 6c 6c 62 61 63 6b 44 69 73  eUserCallbackDis
0900: 70 61 74 63 68 65 72 3b 0d 0a 09 09 44 57 4f 52  patcher;....DWOR
0910: 44 36 34 20 53 79 73 74 65 6d 52 61 6e 67 65 53  D64 SystemRangeS
0920: 74 61 72 74 3b 0d 0a 09 09 44 57 4f 52 44 36 34  tart;....DWORD64
0930: 20 4b 69 55 73 65 72 45 78 63 65 70 74 69 6f 6e   KiUserException
0940: 44 69 73 70 61 74 63 68 65 72 3b 0d 0a 09 09 44  Dispatcher;....D
0950: 57 4f 52 44 36 34 5b 37 5d 20 52 65 73 65 72 76  WORD64[7] Reserv
0960: 65 64 3b 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 73 74  ed;...};......st
0970: 72 75 63 74 20 53 54 41 43 4b 46 52 41 4d 45 36  ruct STACKFRAME6
0980: 34 20 7b 0d 0a 09 09 41 44 44 52 45 53 53 36 34  4 {....ADDRESS64
0990: 20 41 64 64 72 50 43 3b 0d 0a 09 09 41 44 44 52   AddrPC;....ADDR
09a0: 45 53 53 36 34 20 41 64 64 72 52 65 74 75 72 6e  ESS64 AddrReturn
09b0: 3b 0d 0a 09 09 41 44 44 52 45 53 53 36 34 20 41  ;....ADDRESS64 A
09c0: 64 64 72 46 72 61 6d 65 3b 0d 0a 09 09 41 44 44  ddrFrame;....ADD
09d0: 52 45 53 53 36 34 20 41 64 64 72 53 74 61 63 6b  RESS64 AddrStack
09e0: 3b 0d 0a 09 09 41 44 44 52 45 53 53 36 34 20 41  ;....ADDRESS64 A
09f0: 64 64 72 42 53 74 6f 72 65 3b 0d 0a 09 09 50 56  ddrBStore;....PV
0a00: 4f 49 44 20 46 75 6e 63 54 61 62 6c 65 45 6e 74  OID FuncTableEnt
0a10: 72 79 3b 0d 0a 09 09 44 57 4f 52 44 36 34 5b 34  ry;....DWORD64[4
0a20: 5d 20 50 61 72 61 6d 73 3b 0d 0a 09 09 42 4f 4f  ] Params;....BOO
0a30: 4c 20 46 61 72 3b 0d 0a 09 09 42 4f 4f 4c 20 56  L Far;....BOOL V
0a40: 69 72 74 75 61 6c 3b 0d 0a 09 09 44 57 4f 52 44  irtual;....DWORD
0a50: 36 34 5b 33 5d 20 52 65 73 65 72 76 65 64 3b 0d  64[3] Reserved;.
0a60: 0a 09 09 4b 44 48 45 4c 50 36 34 20 4b 64 48 65  ...KDHELP64 KdHe
0a70: 6c 70 3b 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 65 6e  lp;...};......en
0a80: 75 6d 20 3a 20 44 57 4f 52 44 20 7b 0d 0a 09 09  um : DWORD {....
0a90: 49 4d 41 47 45 5f 46 49 4c 45 5f 4d 41 43 48 49  IMAGE_FILE_MACHI
0aa0: 4e 45 5f 49 33 38 36 20 3d 20 30 78 30 31 34 63  NE_I386 = 0x014c
0ab0: 2c 0d 0a 09 09 49 4d 47 41 45 5f 46 49 4c 45 5f  ,....IMGAE_FILE_
0ac0: 4d 41 43 48 49 4e 45 5f 49 41 36 34 20 3d 20 30  MACHINE_IA64 = 0
0ad0: 78 30 32 30 30 2c 0d 0a 09 09 49 4d 41 47 45 5f  x0200,....IMAGE_
0ae0: 46 49 4c 45 5f 4d 41 43 48 49 4e 45 5f 41 4d 44  FILE_MACHINE_AMD
0af0: 36 34 20 3d 20 30 78 38 36 36 34 0d 0a 09 7d 3b  64 = 0x8664...};
0b00: 0d 0a 09 0d 0a 09 73 74 72 75 63 74 20 49 4d 41  ......struct IMA
0b10: 47 45 48 4c 50 5f 4c 49 4e 45 36 34 20 7b 0d 0a  GEHLP_LINE64 {..
0b20: 09 09 44 57 4f 52 44 20 53 69 7a 65 4f 66 53 74  ..DWORD SizeOfSt
0b30: 72 75 63 74 3b 0d 0a 09 09 50 56 4f 49 44 20 4b  ruct;....PVOID K
0b40: 65 79 3b 0d 0a 09 09 44 57 4f 52 44 20 4c 69 6e  ey;....DWORD Lin
0b50: 65 4e 75 6d 62 65 72 3b 0d 0a 09 09 50 54 53 54  eNumber;....PTST
0b60: 52 20 46 69 6c 65 4e 61 6d 65 3b 0d 0a 09 09 44  R FileName;....D
0b70: 57 4f 52 44 36 34 20 41 64 64 72 65 73 73 3b 0d  WORD64 Address;.
0b80: 0a 09 7d 3b 0d 0a 09 0d 0a 09 65 6e 75 6d 20 53  ..};......enum S
0b90: 59 4d 5f 54 59 50 45 20 3a 20 69 6e 74 20 7b 0d  YM_TYPE : int {.
0ba0: 0a 09 20 20 20 20 53 79 6d 4e 6f 6e 65 20 3d 20  ..    SymNone = 
0bb0: 30 2c 0d 0a 09 20 20 20 20 53 79 6d 43 6f 66 66  0,...    SymCoff
0bc0: 2c 0d 0a 09 20 20 20 20 53 79 6d 43 76 2c 0d 0a  ,...    SymCv,..
0bd0: 09 20 20 20 20 53 79 6d 50 64 62 2c 0d 0a 09 20  .    SymPdb,... 
0be0: 20 20 20 53 79 6d 45 78 70 6f 72 74 2c 0d 0a 09     SymExport,...
0bf0: 20 20 20 20 53 79 6d 44 65 66 65 72 72 65 64 2c      SymDeferred,
0c00: 0d 0a 09 20 20 20 20 53 79 6d 53 79 6d 2c 0d 0a  ...    SymSym,..
0c10: 09 20 20 20 20 53 79 6d 44 69 61 2c 0d 0a 09 20  .    SymDia,... 
0c20: 20 20 20 53 79 6d 56 69 72 74 75 61 6c 2c 0d 0a     SymVirtual,..
0c30: 09 20 20 20 20 4e 75 6d 53 79 6d 54 79 70 65 73  .    NumSymTypes
0c40: 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 73 74 72 75 63  ...};......struc
0c50: 74 20 49 4d 41 47 45 48 4c 50 5f 4d 4f 44 55 4c  t IMAGEHLP_MODUL
0c60: 45 36 34 20 7b 0d 0a 09 09 44 57 4f 52 44 20 53  E64 {....DWORD S
0c70: 69 7a 65 4f 66 53 74 72 75 63 74 3b 0d 0a 09 09  izeOfStruct;....
0c80: 44 57 4f 52 44 36 34 20 42 61 73 65 4f 66 49 6d  DWORD64 BaseOfIm
0c90: 61 67 65 3b 0d 0a 09 09 44 57 4f 52 44 20 49 6d  age;....DWORD Im
0ca0: 61 67 65 53 69 7a 65 3b 0d 0a 09 09 44 57 4f 52  ageSize;....DWOR
0cb0: 44 20 54 69 6d 65 44 61 74 65 53 74 61 6d 70 3b  D TimeDateStamp;
0cc0: 0d 0a 09 09 44 57 4f 52 44 20 43 68 65 63 6b 53  ....DWORD CheckS
0cd0: 75 6d 3b 0d 0a 09 09 44 57 4f 52 44 20 4e 75 6d  um;....DWORD Num
0ce0: 53 79 6d 73 3b 0d 0a 09 09 53 59 4d 5f 54 59 50  Syms;....SYM_TYP
0cf0: 45 20 53 79 6d 54 79 70 65 3b 0d 0a 09 09 54 43  E SymType;....TC
0d00: 48 41 52 5b 33 32 5d 20 4d 6f 64 75 6c 65 4e 61  HAR[32] ModuleNa
0d10: 6d 65 3b 0d 0a 09 09 54 43 48 41 52 5b 32 35 36  me;....TCHAR[256
0d20: 5d 20 49 6d 61 67 65 4e 61 6d 65 3b 0d 0a 09 09  ] ImageName;....
0d30: 54 43 48 41 52 5b 32 35 36 5d 20 4c 6f 61 64 65  TCHAR[256] Loade
0d40: 64 49 6d 61 67 65 4e 61 6d 65 3b 0d 0a 09 09 54  dImageName;....T
0d50: 43 48 41 52 5b 32 35 36 5d 20 4c 6f 61 64 65 64  CHAR[256] Loaded
0d60: 50 64 62 4e 61 6d 65 3b 0d 0a 09 09 44 57 4f 52  PdbName;....DWOR
0d70: 44 20 43 56 53 69 67 3b 0d 0a 09 09 54 43 48 41  D CVSig;....TCHA
0d80: 52 5b 4d 41 58 5f 50 41 54 48 2a 33 5d 20 43 56  R[MAX_PATH*3] CV
0d90: 44 61 74 61 3b 0d 0a 09 09 44 57 4f 52 44 20 50  Data;....DWORD P
0da0: 64 62 53 69 67 3b 0d 0a 09 09 47 55 49 44 20 50  dbSig;....GUID P
0db0: 64 62 53 69 67 37 30 3b 0d 0a 09 09 44 57 4f 52  dbSig70;....DWOR
0dc0: 44 20 50 64 62 41 67 65 3b 0d 0a 09 09 42 4f 4f  D PdbAge;....BOO
0dd0: 4c 20 50 64 62 55 6e 6d 61 74 63 68 65 64 3b 0d  L PdbUnmatched;.
0de0: 0a 09 09 42 4f 4f 4c 20 44 62 67 55 6e 6d 61 63  ...BOOL DbgUnmac
0df0: 68 74 65 64 3b 0d 0a 09 09 42 4f 4f 4c 20 4c 69  hted;....BOOL Li
0e00: 6e 65 4e 75 6d 62 65 72 73 3b 0d 0a 09 09 42 4f  neNumbers;....BO
0e10: 4f 4c 20 47 6c 6f 62 61 6c 53 79 6d 62 6f 6c 73  OL GlobalSymbols
0e20: 3b 0d 0a 09 09 42 4f 4f 4c 20 54 79 70 65 49 6e  ;....BOOL TypeIn
0e30: 66 6f 3b 0d 0a 09 09 42 4f 4f 4c 20 53 6f 75 72  fo;....BOOL Sour
0e40: 63 65 49 6e 64 65 78 65 64 3b 0d 0a 09 09 42 4f  ceIndexed;....BO
0e50: 4f 4c 20 50 75 62 6c 69 63 73 3b 0d 0a 09 7d 3b  OL Publics;...};
0e60: 0d 0a 09 0d 0a 09 73 74 72 75 63 74 20 49 4d 41  ......struct IMA
0e70: 47 45 48 4c 50 5f 53 59 4d 42 4f 4c 36 34 20 7b  GEHLP_SYMBOL64 {
0e80: 0d 0a 09 09 44 57 4f 52 44 20 53 69 7a 65 4f 66  ....DWORD SizeOf
0e90: 53 74 72 75 63 74 3b 0d 0a 09 09 44 57 4f 52 44  Struct;....DWORD
0ea0: 36 34 20 41 64 64 72 65 73 73 3b 0d 0a 09 09 44  64 Address;....D
0eb0: 57 4f 52 44 20 53 69 7a 65 3b 0d 0a 09 09 44 57  WORD Size;....DW
0ec0: 4f 52 44 20 46 6c 61 67 73 3b 0d 0a 09 09 44 57  ORD Flags;....DW
0ed0: 4f 52 44 20 4d 61 78 4e 61 6d 65 4c 65 6e 67 74  ORD MaxNameLengt
0ee0: 68 3b 0d 0a 09 09 54 43 48 41 52 5b 31 5d 20 4e  h;....TCHAR[1] N
0ef0: 61 6d 65 3b 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 65  ame;...};......e
0f00: 78 74 65 72 6e 28 53 79 73 74 65 6d 29 7b 0d 0a  xtern(System){..
0f10: 09 09 74 79 70 65 64 65 66 20 42 4f 4f 4c 20 66  ..typedef BOOL f
0f20: 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c 45 20 68  unction(HANDLE h
0f30: 50 72 6f 63 65 73 73 2c 20 44 57 4f 52 44 36 34  Process, DWORD64
0f40: 20 6c 70 42 61 73 65 41 64 64 72 65 73 73 2c 20   lpBaseAddress, 
0f50: 50 56 4f 49 44 20 6c 70 42 75 66 66 65 72 2c 20  PVOID lpBuffer, 
0f60: 44 57 4f 52 44 20 6e 53 69 7a 65 2c 20 4c 50 44  DWORD nSize, LPD
0f70: 57 4f 52 44 20 6c 70 4e 75 6d 62 65 72 4f 66 42  WORD lpNumberOfB
0f80: 79 74 65 73 52 65 61 64 29 20 52 65 61 64 50 72  ytesRead) ReadPr
0f90: 6f 63 65 73 73 4d 65 6d 6f 72 79 50 72 6f 63 36  ocessMemoryProc6
0fa0: 34 3b 0d 0a 09 09 74 79 70 65 64 65 66 20 50 56  4;....typedef PV
0fb0: 4f 49 44 20 66 75 6e 63 74 69 6f 6e 28 48 41 4e  OID function(HAN
0fc0: 44 4c 45 20 68 50 72 6f 63 65 73 73 2c 20 44 57  DLE hProcess, DW
0fd0: 4f 52 44 36 34 20 41 64 64 72 42 61 73 65 29 20  ORD64 AddrBase) 
0fe0: 46 75 6e 63 74 69 6f 6e 54 61 62 6c 65 41 63 63  FunctionTableAcc
0ff0: 65 73 73 50 72 6f 63 36 34 3b 0d 0a 09 09 74 79  essProc64;....ty
1000: 70 65 64 65 66 20 44 57 4f 52 44 36 34 20 66 75  pedef DWORD64 fu
1010: 6e 63 74 69 6f 6e 28 48 41 4e 44 4c 45 20 68 50  nction(HANDLE hP
1020: 72 6f 63 65 73 73 2c 20 44 57 4f 52 44 36 34 20  rocess, DWORD64 
1030: 41 64 64 72 65 73 73 29 20 47 65 74 4d 6f 64 75  Address) GetModu
1040: 6c 65 42 61 73 65 50 72 6f 63 36 34 3b 0d 0a 09  leBaseProc64;...
1050: 09 74 79 70 65 64 65 66 20 44 57 4f 52 44 36 34  .typedef DWORD64
1060: 20 66 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c 45   function(HANDLE
1070: 20 68 50 72 6f 63 65 73 73 2c 20 48 41 4e 44 4c   hProcess, HANDL
1080: 45 20 68 54 68 72 65 61 64 2c 20 41 44 44 52 45  E hThread, ADDRE
1090: 53 53 36 34 20 2a 6c 70 61 64 64 72 29 20 54 72  SS64 *lpaddr) Tr
10a0: 61 6e 73 6c 61 74 65 41 64 64 72 65 73 73 50 72  anslateAddressPr
10b0: 6f 63 36 34 3b 0d 0a 09 09 0d 0a 09 09 74 79 70  oc64;........typ
10c0: 65 64 65 66 20 42 4f 4f 4c 20 66 75 6e 63 74 69  edef BOOL functi
10d0: 6f 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63 65  on(HANDLE hProce
10e0: 73 73 2c 20 50 43 53 54 52 20 55 73 65 72 53 65  ss, PCSTR UserSe
10f0: 61 72 63 68 50 61 74 68 2c 20 62 6f 6f 6c 20 66  archPath, bool f
1100: 49 6e 76 61 64 65 50 72 6f 63 65 73 73 29 20 53  InvadeProcess) S
1110: 79 6d 49 6e 69 74 69 61 6c 69 7a 65 46 75 6e 63  ymInitializeFunc
1120: 3b 0d 0a 09 09 74 79 70 65 64 65 66 20 42 4f 4f  ;....typedef BOO
1130: 4c 20 66 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c  L function(HANDL
1140: 45 20 68 50 72 6f 63 65 73 73 29 20 53 79 6d 43  E hProcess) SymC
1150: 6c 65 61 6e 75 70 46 75 6e 63 3b 0d 0a 09 09 74  leanupFunc;....t
1160: 79 70 65 64 65 66 20 44 57 4f 52 44 20 66 75 6e  ypedef DWORD fun
1170: 63 74 69 6f 6e 28 44 57 4f 52 44 20 53 79 6d 4f  ction(DWORD SymO
1180: 70 74 69 6f 6e 73 29 20 53 79 6d 53 65 74 4f 70  ptions) SymSetOp
1190: 74 69 6f 6e 73 46 75 6e 63 3b 0d 0a 09 09 74 79  tionsFunc;....ty
11a0: 70 65 64 65 66 20 44 57 4f 52 44 20 66 75 6e 63  pedef DWORD func
11b0: 74 69 6f 6e 28 29 20 53 79 6d 47 65 74 4f 70 74  tion() SymGetOpt
11c0: 69 6f 6e 73 46 75 6e 63 3b 0d 0a 09 09 74 79 70  ionsFunc;....typ
11d0: 65 64 65 66 20 50 56 4f 49 44 20 66 75 6e 63 74  edef PVOID funct
11e0: 69 6f 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63  ion(HANDLE hProc
11f0: 65 73 73 2c 20 44 57 4f 52 44 36 34 20 41 64 64  ess, DWORD64 Add
1200: 72 42 61 73 65 29 20 53 79 6d 46 75 6e 63 74 69  rBase) SymFuncti
1210: 6f 6e 54 61 62 6c 65 41 63 63 65 73 73 36 34 46  onTableAccess64F
1220: 75 6e 63 3b 0d 0a 09 09 74 79 70 65 64 65 66 20  unc;....typedef 
1230: 42 4f 4f 4c 20 66 75 6e 63 74 69 6f 6e 28 44 57  BOOL function(DW
1240: 4f 52 44 20 4d 61 63 68 69 6e 65 54 79 70 65 2c  ORD MachineType,
1250: 20 48 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73   HANDLE hProcess
1260: 2c 20 48 41 4e 44 4c 45 20 68 54 68 72 65 61 64  , HANDLE hThread
1270: 2c 20 53 54 41 43 4b 46 52 41 4d 45 36 34 20 2a  , STACKFRAME64 *
1280: 53 74 61 63 6b 46 72 61 6d 65 2c 20 50 56 4f 49  StackFrame, PVOI
1290: 44 20 43 6f 6e 74 65 78 74 52 65 63 6f 72 64 2c  D ContextRecord,
12a0: 20 0d 0a 09 09 20 20 20 20 20 20 20 20 20 20 20   ....           
12b0: 20 20 20 20 20 20 20 20 20 20 20 52 65 61 64 50             ReadP
12c0: 72 6f 63 65 73 73 4d 65 6d 6f 72 79 50 72 6f 63  rocessMemoryProc
12d0: 36 34 20 52 65 61 64 4d 65 6d 6f 72 79 52 6f 75  64 ReadMemoryRou
12e0: 74 69 6e 65 2c 20 46 75 6e 63 74 69 6f 6e 54 61  tine, FunctionTa
12f0: 62 6c 65 41 63 63 65 73 73 50 72 6f 63 36 34 20  bleAccessProc64 
1300: 46 75 6e 63 74 6f 69 6e 54 61 62 6c 65 41 63 63  FunctoinTableAcc
1310: 65 73 73 2c 0d 0a 09 09 20 20 20 20 20 20 20 20  ess,....        
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
1330: 74 4d 6f 64 75 6c 65 42 61 73 65 50 72 6f 63 36  tModuleBaseProc6
1340: 34 20 47 65 74 4d 6f 64 75 6c 65 42 61 73 65 52  4 GetModuleBaseR
1350: 6f 75 74 69 6e 65 2c 20 54 72 61 6e 73 6c 61 74  outine, Translat
1360: 65 41 64 64 72 65 73 73 50 72 6f 63 36 34 20 54  eAddressProc64 T
1370: 72 61 6e 73 6c 61 74 65 41 64 64 72 65 73 73 29  ranslateAddress)
1380: 20 53 74 61 63 6b 57 61 6c 6b 36 34 46 75 6e 63   StackWalk64Func
1390: 3b 0d 0a 09 09 74 79 70 65 64 65 66 20 42 4f 4f  ;....typedef BOO
13a0: 4c 20 66 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c  L function(HANDL
13b0: 45 20 68 50 72 6f 63 65 73 73 2c 20 44 57 4f 52  E hProcess, DWOR
13c0: 44 36 34 20 64 77 41 64 64 72 2c 20 50 44 57 4f  D64 dwAddr, PDWO
13d0: 52 44 20 70 64 77 44 69 73 70 6c 61 63 65 6d 65  RD pdwDisplaceme
13e0: 6e 74 2c 20 49 4d 41 47 45 48 4c 50 5f 4c 49 4e  nt, IMAGEHLP_LIN
13f0: 45 36 34 20 2a 6c 69 6e 65 29 20 53 79 6d 47 65  E64 *line) SymGe
1400: 74 4c 69 6e 65 46 72 6f 6d 41 64 64 72 36 34 46  tLineFromAddr64F
1410: 75 6e 63 3b 0d 0a 09 09 74 79 70 65 64 65 66 20  unc;....typedef 
1420: 44 57 4f 52 44 36 34 20 66 75 6e 63 74 69 6f 6e  DWORD64 function
1430: 28 48 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73  (HANDLE hProcess
1440: 2c 20 44 57 4f 52 44 36 34 20 64 77 41 64 64 72  , DWORD64 dwAddr
1450: 29 20 53 79 6d 47 65 74 4d 6f 64 75 6c 65 42 61  ) SymGetModuleBa
1460: 73 65 36 34 46 75 6e 63 3b 0d 0a 09 09 74 79 70  se64Func;....typ
1470: 65 64 65 66 20 42 4f 4f 4c 20 66 75 6e 63 74 69  edef BOOL functi
1480: 6f 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63 65  on(HANDLE hProce
1490: 73 73 2c 20 44 57 4f 52 44 36 34 20 64 77 41 64  ss, DWORD64 dwAd
14a0: 64 72 2c 20 49 4d 41 47 45 48 4c 50 5f 4d 4f 44  dr, IMAGEHLP_MOD
14b0: 55 4c 45 36 34 20 2a 4d 6f 64 75 6c 65 49 6e 66  ULE64 *ModuleInf
14c0: 6f 29 20 53 79 6d 47 65 74 4d 6f 64 75 6c 65 49  o) SymGetModuleI
14d0: 6e 66 6f 36 34 46 75 6e 63 3b 0d 0a 09 09 74 79  nfo64Func;....ty
14e0: 70 65 64 65 66 20 42 4f 4f 4c 20 66 75 6e 63 74  pedef BOOL funct
14f0: 69 6f 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63  ion(HANDLE hProc
1500: 65 73 73 2c 20 44 57 4f 52 44 36 34 20 41 64 64  ess, DWORD64 Add
1510: 72 65 73 73 2c 20 44 57 4f 52 44 36 34 20 2a 44  ress, DWORD64 *D
1520: 69 73 70 6c 61 63 65 6d 65 6e 74 2c 20 49 4d 41  isplacement, IMA
1530: 47 45 48 4c 50 5f 53 59 4d 42 4f 4c 36 34 20 2a  GEHLP_SYMBOL64 *
1540: 53 79 6d 62 6f 6c 29 20 53 79 6d 47 65 74 53 79  Symbol) SymGetSy
1550: 6d 46 72 6f 6d 41 64 64 72 36 34 46 75 6e 63 3b  mFromAddr64Func;
1560: 0d 0a 09 09 74 79 70 65 64 65 66 20 44 57 4f 52  ....typedef DWOR
1570: 44 20 66 75 6e 63 74 69 6f 6e 28 43 54 53 54 52  D function(CTSTR
1580: 20 2a 44 65 63 6f 72 61 74 65 64 4e 61 6d 65 2c   *DecoratedName,
1590: 20 50 54 53 54 52 20 55 6e 44 65 63 6f 72 61 74   PTSTR UnDecorat
15a0: 65 64 4e 61 6d 65 2c 20 44 57 4f 52 44 20 55 6e  edName, DWORD Un
15b0: 64 65 63 6f 72 61 74 65 64 4c 65 6e 67 74 68 2c  decoratedLength,
15c0: 20 44 57 4f 52 44 20 46 6c 61 67 73 29 20 55 6e   DWORD Flags) Un
15d0: 44 65 63 6f 72 61 74 65 53 79 6d 62 6f 6c 4e 61  DecorateSymbolNa
15e0: 6d 65 46 75 6e 63 3b 0d 0a 09 09 74 79 70 65 64  meFunc;....typed
15f0: 65 66 20 44 57 4f 52 44 36 34 20 66 75 6e 63 74  ef DWORD64 funct
1600: 69 6f 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63  ion(HANDLE hProc
1610: 65 73 73 2c 20 48 41 4e 44 4c 45 20 68 46 69 6c  ess, HANDLE hFil
1620: 65 2c 20 50 43 53 54 52 20 49 6d 61 67 65 4e 61  e, PCSTR ImageNa
1630: 6d 65 2c 20 50 43 53 54 52 20 4d 6f 64 75 6c 65  me, PCSTR Module
1640: 4e 61 6d 65 2c 20 44 57 4f 52 44 36 34 20 42 61  Name, DWORD64 Ba
1650: 73 65 4f 66 44 6c 6c 2c 20 44 57 4f 52 44 20 53  seOfDll, DWORD S
1660: 69 7a 65 4f 66 44 6c 6c 29 20 53 79 6d 4c 6f 61  izeOfDll) SymLoa
1670: 64 4d 6f 64 75 6c 65 36 34 46 75 6e 63 3b 0d 0a  dModule64Func;..
1680: 09 09 74 79 70 65 64 65 66 20 42 4f 4f 4c 20 66  ..typedef BOOL f
1690: 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c 45 20 48  unction(HANDLE H
16a0: 50 72 6f 63 65 73 73 2c 20 50 54 53 54 52 20 53  Process, PTSTR S
16b0: 65 61 72 63 68 50 61 74 68 2c 20 44 57 4f 52 44  earchPath, DWORD
16c0: 20 53 65 61 72 63 68 50 61 74 68 4c 65 6e 67 74   SearchPathLengt
16d0: 68 29 20 53 79 6d 47 65 74 53 65 61 72 63 68 50  h) SymGetSearchP
16e0: 61 74 68 46 75 6e 63 3b 0d 0a 09 09 74 79 70 65  athFunc;....type
16f0: 64 65 66 20 42 4f 4f 4c 20 66 75 6e 63 74 69 6f  def BOOL functio
1700: 6e 28 48 41 4e 44 4c 45 20 68 50 72 6f 63 65 73  n(HANDLE hProces
1710: 73 2c 20 44 57 4f 52 44 36 34 20 41 64 64 72 65  s, DWORD64 Addre
1720: 73 73 29 20 53 79 6d 55 6e 6c 6f 61 64 4d 6f 64  ss) SymUnloadMod
1730: 75 6c 65 36 34 46 75 6e 63 3b 0d 0a 09 7d 0d 0a  ule64Func;...}..
1740: 09 0d 0a 09 70 72 69 76 61 74 65 20 73 74 61 74  ....private stat
1750: 69 63 20 62 6f 6f 6c 20 69 73 49 6e 69 74 20 3d  ic bool isInit =
1760: 20 66 61 6c 73 65 3b 0d 0a 09 70 72 69 76 61 74   false;...privat
1770: 65 20 73 74 61 74 69 63 20 48 41 4e 44 4c 45 20  e static HANDLE 
1780: 64 62 67 68 65 6c 70 5f 6c 69 62 20 3d 20 63 61  dbghelp_lib = ca
1790: 73 74 28 48 41 4e 44 4c 45 29 6e 75 6c 6c 3b 0d  st(HANDLE)null;.
17a0: 0a 09 73 74 61 74 69 63 20 53 79 6d 49 6e 69 74  ..static SymInit
17b0: 69 61 6c 69 7a 65 46 75 6e 63 20 53 79 6d 49 6e  ializeFunc SymIn
17c0: 69 74 69 61 6c 69 7a 65 3b 0d 0a 09 73 74 61 74  itialize;...stat
17d0: 69 63 20 53 79 6d 43 6c 65 61 6e 75 70 46 75 6e  ic SymCleanupFun
17e0: 63 20 53 79 6d 43 6c 65 61 6e 75 70 3b 0d 0a 09  c SymCleanup;...
17f0: 73 74 61 74 69 63 20 53 74 61 63 6b 57 61 6c 6b  static StackWalk
1800: 36 34 46 75 6e 63 20 53 74 61 63 6b 57 61 6c 6b  64Func StackWalk
1810: 36 34 3b 0d 0a 09 73 74 61 74 69 63 20 53 79 6d  64;...static Sym
1820: 47 65 74 4f 70 74 69 6f 6e 73 46 75 6e 63 20 53  GetOptionsFunc S
1830: 79 6d 47 65 74 4f 70 74 69 6f 6e 73 3b 0d 0a 09  ymGetOptions;...
1840: 73 74 61 74 69 63 20 53 79 6d 53 65 74 4f 70 74  static SymSetOpt
1850: 69 6f 6e 73 46 75 6e 63 20 53 79 6d 53 65 74 4f  ionsFunc SymSetO
1860: 70 74 69 6f 6e 73 3b 0d 0a 09 73 74 61 74 69 63  ptions;...static
1870: 20 53 79 6d 46 75 6e 63 74 69 6f 6e 54 61 62 6c   SymFunctionTabl
1880: 65 41 63 63 65 73 73 36 34 46 75 6e 63 20 53 79  eAccess64Func Sy
1890: 6d 46 75 6e 63 74 69 6f 6e 54 61 62 6c 65 41 63  mFunctionTableAc
18a0: 63 65 73 73 36 34 3b 0d 0a 09 73 74 61 74 69 63  cess64;...static
18b0: 20 53 79 6d 47 65 74 4c 69 6e 65 46 72 6f 6d 41   SymGetLineFromA
18c0: 64 64 72 36 34 46 75 6e 63 20 53 79 6d 47 65 74  ddr64Func SymGet
18d0: 4c 69 6e 65 46 72 6f 6d 41 64 64 72 36 34 3b 0d  LineFromAddr64;.
18e0: 0a 09 73 74 61 74 69 63 20 53 79 6d 47 65 74 4d  ..static SymGetM
18f0: 6f 64 75 6c 65 42 61 73 65 36 34 46 75 6e 63 20  oduleBase64Func 
1900: 53 79 6d 47 65 74 4d 6f 64 75 6c 65 42 61 73 65  SymGetModuleBase
1910: 36 34 3b 0d 0a 09 73 74 61 74 69 63 20 53 79 6d  64;...static Sym
1920: 47 65 74 4d 6f 64 75 6c 65 49 6e 66 6f 36 34 46  GetModuleInfo64F
1930: 75 6e 63 20 53 79 6d 47 65 74 4d 6f 64 75 6c 65  unc SymGetModule
1940: 49 6e 66 6f 36 34 3b 0d 0a 09 73 74 61 74 69 63  Info64;...static
1950: 20 53 79 6d 47 65 74 53 79 6d 46 72 6f 6d 41 64   SymGetSymFromAd
1960: 64 72 36 34 46 75 6e 63 20 53 79 6d 47 65 74 53  dr64Func SymGetS
1970: 79 6d 46 72 6f 6d 41 64 64 72 36 34 3b 0d 0a 09  ymFromAddr64;...
1980: 73 74 61 74 69 63 20 55 6e 44 65 63 6f 72 61 74  static UnDecorat
1990: 65 53 79 6d 62 6f 6c 4e 61 6d 65 46 75 6e 63 20  eSymbolNameFunc 
19a0: 55 6e 44 65 63 6f 72 61 74 65 53 79 6d 62 6f 6c  UnDecorateSymbol
19b0: 4e 61 6d 65 3b 0d 0a 09 73 74 61 74 69 63 20 53  Name;...static S
19c0: 79 6d 4c 6f 61 64 4d 6f 64 75 6c 65 36 34 46 75  ymLoadModule64Fu
19d0: 6e 63 20 53 79 6d 4c 6f 61 64 4d 6f 64 75 6c 65  nc SymLoadModule
19e0: 36 34 3b 0d 0a 09 73 74 61 74 69 63 20 53 79 6d  64;...static Sym
19f0: 47 65 74 53 65 61 72 63 68 50 61 74 68 46 75 6e  GetSearchPathFun
1a00: 63 20 53 79 6d 47 65 74 53 65 61 72 63 68 50 61  c SymGetSearchPa
1a10: 74 68 3b 0d 0a 09 73 74 61 74 69 63 20 53 79 6d  th;...static Sym
1a20: 55 6e 6c 6f 61 64 4d 6f 64 75 6c 65 36 34 46 75  UnloadModule64Fu
1a30: 6e 63 20 53 79 6d 55 6e 6c 6f 61 64 4d 6f 64 75  nc SymUnloadModu
1a40: 6c 65 36 34 3b 0d 0a 09 0d 0a 09 73 74 61 74 69  le64;......stati
1a50: 63 20 62 6f 6f 6c 20 49 6e 69 74 28 29 7b 0d 0a  c bool Init(){..
1a60: 09 09 69 66 28 69 73 49 6e 69 74 29 0d 0a 09 09  ..if(isInit)....
1a70: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09  .return true;...
1a80: 09 0d 0a 09 09 64 62 67 68 65 6c 70 5f 6c 69 62  .....dbghelp_lib
1a90: 20 3d 20 63 61 73 74 28 48 41 4e 44 4c 45 29 52   = cast(HANDLE)R
1aa0: 75 6e 74 69 6d 65 2e 6c 6f 61 64 4c 69 62 72 61  untime.loadLibra
1ab0: 72 79 28 22 64 62 67 68 65 6c 70 2e 64 6c 6c 22  ry("dbghelp.dll"
1ac0: 29 3b 0d 0a 09 09 69 66 28 64 62 67 68 65 6c 70  );....if(dbghelp
1ad0: 5f 6c 69 62 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 09  _lib == null)...
1ae0: 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ..return false;.
1af0: 0a 09 09 0d 0a 09 09 53 79 6d 49 6e 69 74 69 61  .......SymInitia
1b00: 6c 69 7a 65 20 3d 20 63 61 73 74 28 53 79 6d 49  lize = cast(SymI
1b10: 6e 69 74 69 61 6c 69 7a 65 46 75 6e 63 29 20 47  nitializeFunc) G
1b20: 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 64 62  etProcAddress(db
1b30: 67 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 49 6e  ghelp_lib,"SymIn
1b40: 69 74 69 61 6c 69 7a 65 22 29 3b 0d 0a 09 09 53  itialize");....S
1b50: 79 6d 43 6c 65 61 6e 75 70 20 3d 20 63 61 73 74  ymCleanup = cast
1b60: 28 53 79 6d 43 6c 65 61 6e 75 70 46 75 6e 63 29  (SymCleanupFunc)
1b70: 20 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28   GetProcAddress(
1b80: 64 62 67 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d  dbghelp_lib,"Sym
1b90: 43 6c 65 61 6e 75 70 22 29 3b 0d 0a 09 09 53 74  Cleanup");....St
1ba0: 61 63 6b 57 61 6c 6b 36 34 20 3d 20 63 61 73 74  ackWalk64 = cast
1bb0: 28 53 74 61 63 6b 57 61 6c 6b 36 34 46 75 6e 63  (StackWalk64Func
1bc0: 29 20 47 65 74 50 72 6f 63 41 64 64 72 65 73 73  ) GetProcAddress
1bd0: 28 64 62 67 68 65 6c 70 5f 6c 69 62 2c 22 53 74  (dbghelp_lib,"St
1be0: 61 63 6b 57 61 6c 6b 36 34 22 29 3b 0d 0a 09 09  ackWalk64");....
1bf0: 53 79 6d 47 65 74 4f 70 74 69 6f 6e 73 20 3d 20  SymGetOptions = 
1c00: 63 61 73 74 28 53 79 6d 47 65 74 4f 70 74 69 6f  cast(SymGetOptio
1c10: 6e 73 46 75 6e 63 29 20 47 65 74 50 72 6f 63 41  nsFunc) GetProcA
1c20: 64 64 72 65 73 73 28 64 62 67 68 65 6c 70 5f 6c  ddress(dbghelp_l
1c30: 69 62 2c 22 53 79 6d 47 65 74 4f 70 74 69 6f 6e  ib,"SymGetOption
1c40: 73 22 29 3b 0d 0a 09 09 53 79 6d 53 65 74 4f 70  s");....SymSetOp
1c50: 74 69 6f 6e 73 20 3d 20 63 61 73 74 28 53 79 6d  tions = cast(Sym
1c60: 53 65 74 4f 70 74 69 6f 6e 73 46 75 6e 63 29 20  SetOptionsFunc) 
1c70: 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 64  GetProcAddress(d
1c80: 62 67 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 53  bghelp_lib,"SymS
1c90: 65 74 4f 70 74 69 6f 6e 73 22 29 3b 0d 0a 09 09  etOptions");....
1ca0: 53 79 6d 46 75 6e 63 74 69 6f 6e 54 61 62 6c 65  SymFunctionTable
1cb0: 41 63 63 65 73 73 36 34 20 3d 20 63 61 73 74 28  Access64 = cast(
1cc0: 53 79 6d 46 75 6e 63 74 69 6f 6e 54 61 62 6c 65  SymFunctionTable
1cd0: 41 63 63 65 73 73 36 34 46 75 6e 63 29 20 47 65  Access64Func) Ge
1ce0: 74 50 72 6f 63 41 64 64 72 65 73 73 28 64 62 67  tProcAddress(dbg
1cf0: 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 46 75 6e  help_lib,"SymFun
1d00: 63 74 69 6f 6e 54 61 62 6c 65 41 63 63 65 73 73  ctionTableAccess
1d10: 36 34 22 29 3b 0d 0a 09 09 53 79 6d 47 65 74 4c  64");....SymGetL
1d20: 69 6e 65 46 72 6f 6d 41 64 64 72 36 34 20 3d 20  ineFromAddr64 = 
1d30: 63 61 73 74 28 53 79 6d 47 65 74 4c 69 6e 65 46  cast(SymGetLineF
1d40: 72 6f 6d 41 64 64 72 36 34 46 75 6e 63 29 20 47  romAddr64Func) G
1d50: 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 64 62  etProcAddress(db
1d60: 67 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 47 65  ghelp_lib,"SymGe
1d70: 74 4c 69 6e 65 46 72 6f 6d 41 64 64 72 36 34 22  tLineFromAddr64"
1d80: 29 3b 0d 0a 09 09 53 79 6d 47 65 74 4d 6f 64 75  );....SymGetModu
1d90: 6c 65 42 61 73 65 36 34 20 3d 20 63 61 73 74 28  leBase64 = cast(
1da0: 53 79 6d 47 65 74 4d 6f 64 75 6c 65 42 61 73 65  SymGetModuleBase
1db0: 36 34 46 75 6e 63 29 20 47 65 74 50 72 6f 63 41  64Func) GetProcA
1dc0: 64 64 72 65 73 73 28 64 62 67 68 65 6c 70 5f 6c  ddress(dbghelp_l
1dd0: 69 62 2c 22 53 79 6d 47 65 74 4d 6f 64 75 6c 65  ib,"SymGetModule
1de0: 42 61 73 65 36 34 22 29 3b 0d 0a 09 09 53 79 6d  Base64");....Sym
1df0: 47 65 74 4d 6f 64 75 6c 65 49 6e 66 6f 36 34 20  GetModuleInfo64 
1e00: 3d 20 63 61 73 74 28 53 79 6d 47 65 74 4d 6f 64  = cast(SymGetMod
1e10: 75 6c 65 49 6e 66 6f 36 34 46 75 6e 63 29 20 47  uleInfo64Func) G
1e20: 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 64 62  etProcAddress(db
1e30: 67 68 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 47 65  ghelp_lib,"SymGe
1e40: 74 4d 6f 64 75 6c 65 49 6e 66 6f 36 34 22 29 3b  tModuleInfo64");
1e50: 0d 0a 09 09 53 79 6d 47 65 74 53 79 6d 46 72 6f  ....SymGetSymFro
1e60: 6d 41 64 64 72 36 34 20 3d 20 63 61 73 74 28 53  mAddr64 = cast(S
1e70: 79 6d 47 65 74 53 79 6d 46 72 6f 6d 41 64 64 72  ymGetSymFromAddr
1e80: 36 34 46 75 6e 63 29 20 47 65 74 50 72 6f 63 41  64Func) GetProcA
1e90: 64 64 72 65 73 73 28 64 62 67 68 65 6c 70 5f 6c  ddress(dbghelp_l
1ea0: 69 62 2c 22 53 79 6d 47 65 74 53 79 6d 46 72 6f  ib,"SymGetSymFro
1eb0: 6d 41 64 64 72 36 34 22 29 3b 0d 0a 09 09 53 79  mAddr64");....Sy
1ec0: 6d 4c 6f 61 64 4d 6f 64 75 6c 65 36 34 20 3d 20  mLoadModule64 = 
1ed0: 63 61 73 74 28 53 79 6d 4c 6f 61 64 4d 6f 64 75  cast(SymLoadModu
1ee0: 6c 65 36 34 46 75 6e 63 29 20 47 65 74 50 72 6f  le64Func) GetPro
1ef0: 63 41 64 64 72 65 73 73 28 64 62 67 68 65 6c 70  cAddress(dbghelp
1f00: 5f 6c 69 62 2c 22 53 79 6d 4c 6f 61 64 4d 6f 64  _lib,"SymLoadMod
1f10: 75 6c 65 36 34 22 29 3b 0d 0a 09 09 53 79 6d 47  ule64");....SymG
1f20: 65 74 53 65 61 72 63 68 50 61 74 68 20 3d 20 63  etSearchPath = c
1f30: 61 73 74 28 53 79 6d 47 65 74 53 65 61 72 63 68  ast(SymGetSearch
1f40: 50 61 74 68 46 75 6e 63 29 20 47 65 74 50 72 6f  PathFunc) GetPro
1f50: 63 41 64 64 72 65 73 73 28 64 62 67 68 65 6c 70  cAddress(dbghelp
1f60: 5f 6c 69 62 2c 22 53 79 6d 47 65 74 53 65 61 72  _lib,"SymGetSear
1f70: 63 68 50 61 74 68 22 29 3b 0d 0a 09 09 53 79 6d  chPath");....Sym
1f80: 55 6e 6c 6f 61 64 4d 6f 64 75 6c 65 36 34 20 3d  UnloadModule64 =
1f90: 20 63 61 73 74 28 53 79 6d 55 6e 6c 6f 61 64 4d   cast(SymUnloadM
1fa0: 6f 64 75 6c 65 36 34 46 75 6e 63 29 20 47 65 74  odule64Func) Get
1fb0: 50 72 6f 63 41 64 64 72 65 73 73 28 64 62 67 68  ProcAddress(dbgh
1fc0: 65 6c 70 5f 6c 69 62 2c 22 53 79 6d 55 6e 6c 6f  elp_lib,"SymUnlo
1fd0: 61 64 4d 6f 64 75 6c 65 36 34 22 29 3b 0d 0a 09  adModule64");...
1fe0: 09 0d 0a 09 09 69 66 28 21 53 79 6d 49 6e 69 74  .....if(!SymInit
1ff0: 69 61 6c 69 7a 65 20 7c 7c 20 21 53 79 6d 43 6c  ialize || !SymCl
2000: 65 61 6e 75 70 20 7c 7c 20 21 53 74 61 63 6b 57  eanup || !StackW
2010: 61 6c 6b 36 34 20 7c 7c 20 21 53 79 6d 47 65 74  alk64 || !SymGet
2020: 4f 70 74 69 6f 6e 73 20 7c 7c 20 21 53 79 6d 53  Options || !SymS
2030: 65 74 4f 70 74 69 6f 6e 73 20 7c 7c 20 21 53 79  etOptions || !Sy
2040: 6d 46 75 6e 63 74 69 6f 6e 54 61 62 6c 65 41 63  mFunctionTableAc
2050: 63 65 73 73 36 34 0d 0a 09 09 20 20 20 7c 7c 20  cess64....   || 
2060: 21 53 79 6d 47 65 74 4c 69 6e 65 46 72 6f 6d 41  !SymGetLineFromA
2070: 64 64 72 36 34 20 7c 7c 20 21 53 79 6d 47 65 74  ddr64 || !SymGet
2080: 4d 6f 64 75 6c 65 42 61 73 65 36 34 20 7c 7c 20  ModuleBase64 || 
2090: 21 53 79 6d 47 65 74 4d 6f 64 75 6c 65 49 6e 66  !SymGetModuleInf
20a0: 6f 36 34 20 7c 7c 20 21 53 79 6d 47 65 74 53 79  o64 || !SymGetSy
20b0: 6d 46 72 6f 6d 41 64 64 72 36 34 0d 0a 09 09 20  mFromAddr64.... 
20c0: 20 20 7c 7c 20 21 53 79 6d 4c 6f 61 64 4d 6f 64    || !SymLoadMod
20d0: 75 6c 65 36 34 20 7c 7c 20 21 53 79 6d 47 65 74  ule64 || !SymGet
20e0: 53 65 61 72 63 68 50 61 74 68 20 7c 7c 20 21 53  SearchPath || !S
20f0: 79 6d 55 6e 6c 6f 61 64 4d 6f 64 75 6c 65 36 34  ymUnloadModule64
2100: 29 7b 0d 0a 09 09 09 72 65 74 75 72 6e 20 66 61  ){.....return fa
2110: 6c 73 65 3b 0d 0a 09 09 7d 0d 0a 09 09 0d 0a 09  lse;....}.......
2120: 09 69 73 49 6e 69 74 20 3d 20 74 72 75 65 3b 0d  .isInit = true;.
2130: 0a 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  ...return true;.
2140: 0a 09 0d 0a 09 7d 0d 0a 09 0d 0a 09 76 6f 69 64  .....}......void
2150: 20 44 65 49 6e 69 74 28 29 7b 0d 0a 09 09 69 66   DeInit(){....if
2160: 28 69 73 49 6e 69 74 29 7b 0d 0a 09 09 09 52 75  (isInit){.....Ru
2170: 6e 74 69 6d 65 2e 75 6e 6c 6f 61 64 4c 69 62 72  ntime.unloadLibr
2180: 61 72 79 28 64 62 67 68 65 6c 70 5f 6c 69 62 29  ary(dbghelp_lib)
2190: 3b 0d 0a 09 09 09 69 73 49 6e 69 74 20 3d 20 66  ;.....isInit = f
21a0: 61 6c 73 65 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  alse;....}...}..
21b0: 7d 3b 0d 0a 09 0d 0a 7d                          };.....}