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 };.....}