Annotation of mstools/samples/deb/deb.rtf, revision 1.1.1.1

1.1       root        1: {\rtf1\ansi \deff0\deflang1033
                      2: 
                      3: 
                      4: {\fonttbl
                      5: \f0\froman Times New Roman;
                      6: \f1\fmodern Courier;
                      7: \f2\fswiss Arial;}
                      8: 
                      9: 
                     10: {\colortbl;
                     11: \red0\green0\blue0;
                     12: \red0\green0\blue255;
                     13: \red0\green255\blue255;
                     14: \red0\green255\blue0;
                     15: \red255\green0\blue255;
                     16: \red255\green0\blue0;
                     17: \red255\green255\blue0;
                     18: \red255\green255\blue255;
                     19: \red0\green0\blue127;
                     20: \red0\green127\blue127;
                     21: \red0\green127\blue0;
                     22: \red127\green0\blue127;
                     23: \red127\green0\blue0;
                     24: \red127\green127\blue0;
                     25: \red127\green127\blue127;
                     26: \red192\green192\blue192;}
                     27: 
                     28: 
                     29: {\stylesheet
                     30: \fs12 \snext0 Normal;
                     31: \s2\keepn \b\f2\fs28 \sbasedon0\snext2 Title;
                     32: \s3\li720 \sbasedon0\snext3 Body;
                     33: \s4\li270\sb60\tx1440\tx2340 \sbasedon0\snext4 List;
                     34: \s5\fs20 \sbasedon3\snext5 JumpBody;
                     35: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28 \sbasedon0\snext6 PopUpTitle;
                     36: \s7\li180\fs20 \sbasedon5\snext7 PopUpBody;
                     37: \s8\fi-1886\li2160\tx1440\tx2340 \sbasedon4\snext8 GlossaryEntry;
                     38: \s9\li360\keep \f1\fs8\lang1024 \snext0 FixedText;
                     39: \s10\f1\fs20\up6\lang1024 \snext0 ControlCodes;
                     40: \s242\tqc\tx4320\tqr\tx8640 \fs20\lang1024 \sbasedon0\snext242 footer;
                     41: \s244\fs16\up6\lang1024 \sbasedon0\snext0 footnote reference;
                     42: \s245\fs20\lang1024 \sbasedon0\snext245 footnote text;}
                     43: 
                     44: \s10\f1\fs20\up6\lang1024
                     45: #{\footnote {#} Contents}
                     46: ${\footnote {$} Debug Event Browser Contents}
                     47: K{\footnote {K} Contents}
                     48: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                     49: \{bmc deb.bmp\} Debug Event Browser Contents\par
                     50: \pard\plain
                     51: \s4\li270\sb60\tx1440\tx2340
                     52: {\b Overviews}\line
                     53: {\uldb General Overview}{\v GenOverview}\line
                     54: {\uldb Programming Overview}{\v ProgOverview}\line
                     55: {\b How to...}\line
                     56: {\uldb Using the Toolbar}{\v Toolbar}\line
                     57: {\b Commands}\line
                     58: {\uldb File Menu}{\v File}\line
                     59: {\uldb Edit Menu}{\v Edit}\line
                     60: {\uldb Options Menu}{\v Options}\line
                     61: {\uldb Help Menu}{\v Help}\line
                     62: {\uldb Keyboard}{\v Keyboard}\par
                     63: \pard\plain
                     64: \page
                     65: 
                     66: 
                     67: \s10\f1\fs20\up6\lang1024
                     68: #{\footnote {#} GenOverview}
                     69: ${\footnote {$} General Overview}
                     70: K{\footnote {K} Overview - General}
                     71: K{\footnote {K} Overviews}
                     72: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                     73: Debug Event Browser General Overview\par
                     74: \pard\plain
                     75: \s4\li270\sb60\tx1440\tx2340
                     76: {\b Debug Event Browser} ({\b DEB}) is a Win32 application demonstrating the Win32 debug API.
                     77:   This preliminary version of {\b DEB} only performs the most rudimentary debugging operations.
                     78:   {\b DEB} is not a debugger in the traditional sense but a browser which merely displays the debug events occurring in a debugee.
                     79:   The handling of debug events is restricted only to those actions which are necessary to display event information and continue the debugee.\par
                     80: {\b This Sample is brought to you by the Microsoft Win32 / Windows NT Support Team.  Developed by Paul Tissue.}\par
                     81: \pard\plain
                     82: \page
                     83: 
                     84: 
                     85: \s10\f1\fs20\up6\lang1024
                     86: #{\footnote {#} ProgOverview}
                     87: ${\footnote {$} Programming Overview}
                     88: K{\footnote {K} Programming}
                     89: K{\footnote {K} Overview - Programming}
                     90: K{\footnote {K} Overviews}
                     91: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                     92: Debug Event Browser Programming Overview\par
                     93: \pard\plain
                     94: \s4\li270\sb60\tx1440\tx2340
                     95: The {\b Debug Event Browser} ({\b DEB}) sample demonstrates the following Win32 debug API features:\par
                     96: \s4\li270\sb60\tx1440\tx2340
                     97: {\uldb Debug Event Handler}{\v Handler}\line
                     98: {\uldb Modifying a Thread's Context}{\v Context}\line
                     99: {\uldb Reading the Executable's Header}{\v Header}\par
                    100: \pard\plain
                    101: \page
                    102: 
                    103: 
                    104: \s10\f1\fs20\up6\lang1024
                    105: #{\footnote {#} Handler}
                    106: ${\footnote {$} Debug Event Handler}
                    107: K{\footnote {K} Debug Event Handler}
                    108: K{\footnote {K} Debug API}
                    109: K{\footnote {K} WaitForDebugEvent}
                    110: K{\footnote {K} ContinueDebugEvent}
                    111: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    112: Debug Event Handler\par
                    113: \pard\plain
                    114: \s4\li270\sb60\tx1440\tx2340
                    115: The debug event handler is responsible for the processing of the debug events.\par
                    116: \par
                    117: \pard\plain
                    118: \s9\li360\keep \f1\fs20\lang1024
                    119: // ************************************************************************\line
                    120: // FUNCTION : DebugEventThread( DWORD )\line
                    121: // PURPOSE  : Main debug event processing loop\line
                    122: // ************************************************************************\line
                    123: DWORD\line
                    124: DebugEventThread( DWORD UserDefinedValue )\line
                    125: \{\line
                    126:   DEBUG_EVENT  DebugEvent;\line
                    127: \line
                    128:   for(;;) \{\line
                    129:     if( !WaitForDebugEvent( &DebugEvent, (DWORD) -1 ) ) \line
                    130:       continue;\line
                    131: \line
                    132:     switch( DebugEvent.dwDebugEventCode ) \{\line
                    133: \line
                    134:       case EXCEPTION_DEBUG_EVENT:\line
                    135:         // ...\line
                    136: \line
                    137:         switch( DebugEvent.u.Exception.ExceptionRecord.ExceptionCode \line
                    138: \line
                    139:           case EXCEPTION_ACCESS_VIOLATION:\line
                    140:             // ...\line
                    141:             break;\line
                    142: \line
                    143:           case EXCEPTION_BREAKPOINT:\line
                    144:             // ...\line
                    145:             break;\line
                    146: \line
                    147:           //...\line
                    148: \line
                    149:           default:  // An unknown exception occurred\line
                    150:             // ...\line
                    151:             break;\line
                    152:         \}\line
                    153: \line
                    154:       case CREATE_THREAD_DEBUG_EVENT:\line
                    155:         // ...\line
                    156:         break;\line
                    157: \line
                    158:       case CREATE_PROCESS_DEBUG_EVENT:\line
                    159:         // ...\line
                    160:         break;\line
                    161: \line
                    162:       // ...\line
                    163: \line
                    164:       default:\line
                    165:         // ...\line
                    166:     \}\line
                    167: \line
                    168:     //-- default action - just continue\line
                    169:     ContinueDebugEvent( DebugEvent.dwProcessId, DebugEvent.dwThreadId,\line
                    170:       DBG_CONTINUE );\line
                    171:   \}\line
                    172: \line
                    173:   return( NULL );\line
                    174: \}\par
                    175: \pard\plain
                    176: \page
                    177: 
                    178: 
                    179: \s10\f1\fs20\up6\lang1024
                    180: #{\footnote {#} Header}
                    181: ${\footnote {$} Reading the Executable's Header}
                    182: K{\footnote {K} Executable Header}
                    183: K{\footnote {K} Image Header}
                    184: K{\footnote {K} Debug API}
                    185: K{\footnote {K} ReadProcessMemory}
                    186: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    187: Reading the Executable's Header\par
                    188: \pard\plain
                    189: \s4\li270\sb60\tx1440\tx2340
                    190: Reading the information stored in the executable's headers is important for obtaining such things as symbolic information and details about the object.\par
                    191: \par
                    192: \pard\plain
                    193: \s9\li360\keep \f1\fs20\lang1024
                    194: // ************************************************************************\line
                    195: // FUNCTION : GetModuleFileNameFromHeader( HANDLE, HANDLE, LPTSTR, DWORD )\line
                    196: // PURPOSE  : returns the DLL module name for a given file handle of a\line
                    197: //            the module.  Reads the module name from the EXE header.\line
                    198: // COMMENTS : returns only the module name and not the pathname\line
                    199: // ************************************************************************\line
                    200: DWORD APIENTRY\line
                    201: GetModuleFileNameFromHeader( HANDLE hProcess, HANDLE hFile, LPTSTR lpszPath, \line
                    202:   DWORD bPath )\line
                    203: \{\line
                    204:   #define IMAGE_DOS_SIGNATURE     0x5A4D      // MZ\line
                    205:   #define IMAGE_OS2_SIGNATURE     0x454E      // NE\line
                    206:   #define IMAGE_NT_SIGNATURE      0x00004550  // PE00\line
                    207: \line
                    208:   #define IMAGE_SECOND_HEADER_OFFSET     (15 * sizeof(ULONG)) \line
                    209:   #define IMAGE_BASE_OFFSET              (13 * sizeof(DWORD)) \line
                    210:   #define IMAGE_EXPORT_TABLE_RVA_OFFSET  (30 * sizeof(DWORD)) \line
                    211:   #define IMAGE_NAME_RVA_OFFSET           (3 * sizeof(DWORD)) \line
                    212: \line
                    213:   WORD   DosSignature;\line
                    214:   DWORD  NtSignature;\line
                    215:   DWORD  NumberOfBytesRead;\line
                    216: \line
                    217:   DWORD  PeHeader, ImageBase, ExportTableRVA, NameRVA;\line
                    218: \line
                    219:   //-- Extract the filename from the EXE header\line
                    220:   ReadFile( hFile, &DosSignature, sizeof(DosSignature), &NumberOfBytesRead,\line
                    221:     (LPOVERLAPPED) NULL);\line
                    222: \line
                    223:   if( DosSignature == IMAGE_DOS_SIGNATURE ) \{\line
                    224: \line
                    225:     SetFilePointer( hFile, IMAGE_SECOND_HEADER_OFFSET, (LPLONG) NULL,\line
                    226:       FILE_BEGIN );\line
                    227:     ReadFile( hFile, &PeHeader, sizeof(PeHeader),\line
                    228:       &NumberOfBytesRead, (LPOVERLAPPED) NULL );\line
                    229: \line
                    230:     SetFilePointer( hFile, PeHeader, (LPLONG) NULL,\line
                    231:       FILE_BEGIN );\line
                    232:     ReadFile( hFile, &NtSignature, sizeof(NtSignature),\line
                    233:       &NumberOfBytesRead, (LPOVERLAPPED) NULL);\line
                    234: \line
                    235:     if( NtSignature == IMAGE_NT_SIGNATURE ) \{\line
                    236: \line
                    237:       SetFilePointer( hFile, PeHeader+IMAGE_BASE_OFFSET,\line
                    238:          (LPLONG) NULL, FILE_BEGIN );\line
                    239:       ReadFile( hFile, &ImageBase, sizeof(ImageBase),\line
                    240:         &NumberOfBytesRead, (LPOVERLAPPED) NULL);\line
                    241: \line
                    242:       SetFilePointer( hFile, PeHeader + IMAGE_EXPORT_TABLE_RVA_OFFSET,\line
                    243:          (LPLONG) NULL, FILE_BEGIN );\line
                    244:       ReadFile( hFile, &ExportTableRVA, sizeof(ExportTableRVA),\line
                    245:         &NumberOfBytesRead, (LPOVERLAPPED) NULL);\line
                    246: \line
                    247:       //-- now read from the virtual address space in the process\line
                    248:       ReadProcessMemory( hProcess,\line
                    249:         (LPVOID) (ImageBase + ExportTableRVA + IMAGE_NAME_RVA_OFFSET),\line
                    250:         &NameRVA, sizeof(NameRVA), &NumberOfBytesRead );\line
                    251: \line
                    252:       ReadProcessMemory( hProcess,\line
                    253:          (LPVOID) (ImageBase+NameRVA),\line
                    254:          lpszPath, cbPath, &NumberOfBytesRead );\line
                    255: \line
                    256:       return( NumberOfBytesRead );\line
                    257:     \}\line
                    258:   \}\line
                    259:   return( 0 );\line
                    260: \}\par
                    261: \pard\plain
                    262: \page
                    263: 
                    264: 
                    265: \s10\f1\fs20\up6\lang1024
                    266: #{\footnote {#} Context}
                    267: ${\footnote {$} Modifying a Thread's Context}
                    268: K{\footnote {K} Thread Context}
                    269: K{\footnote {K} Context}
                    270: K{\footnote {K} Debug API}
                    271: K{\footnote {K} GetThreadContext}
                    272: K{\footnote {K} SetThreadContext}
                    273: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    274: Modifying a Thread's Context\par
                    275: \pard\plain
                    276: \s4\li270\sb60\tx1440\tx2340
                    277: The ability to query and modify a thread's context is one of the more powerful features of the Win32 debug API set.\par
                    278: \par
                    279: \pard\plain
                    280: \s9\li360\keep \f1\fs20\lang1024
                    281: // ************************************************************************\line
                    282: // FUNCTION : SkipThreadBreakPoint( DWORD );\line
                    283: // PURPOSE  : Skip over the break point instruction belonging to dwThreadId\line
                    284: // COMMENTS : Only the MIPS R4000 needs this\line
                    285: // ************************************************************************\line
                    286: BOOL\line
                    287: SkipBreakPoint( DWORD dwThreadId )\line
                    288: \{\line
                    289:   CONTEXT  Context;\line
                    290: \line
                    291:   // insert code here to get hThread given dwThreadId\line
                    292: \line
                    293:   Context.ContextFlags = CONTEXT_CONTROL;\line
                    294:   if( !GetThreadContext( hThread, &Context ) )\line
                    295:     return( FALSE );\line
                    296: \line
                    297:   Context.Fir += 4L;  // Fir is the PC (program counter)\line
                    298:                       //   BREAK (breakpoint instruction) occupies 4 bytes\line
                    299: \line
                    300:   SetThreadContext( (ThreadNode->NodeData).hThread, &Context );\line
                    301: \line
                    302:   return( TRUE );\line
                    303: \}\par
                    304: \pard\plain
                    305: \page
                    306: 
                    307: 
                    308: \s10\f1\fs20\up6\lang1024
                    309: #{\footnote {#} File}
                    310: ${\footnote {$} File Menu}
                    311: K{\footnote {K} File Menu}
                    312: K{\footnote {K} Menu Commands}
                    313: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    314: The File Menu\par
                    315: \pard\plain
                    316: \s4\li270\sb60\tx1440\tx2340
                    317: Allows the user to select the debugee for this application.\line\line
                    318: {\b Open}\line
                    319: Displays a dialog box that will allow you to open and run an executable file using a common dialog box.  This executable file will become the debugee.\line\line
                    320: {\b Attach}\line
                    321: Displays a dialog box that will allow you to select a currently running process to attach to.  This process will become the debugee.\line\line
                    322: {\b Exit}\line
                    323: Exits the {\b Debug Event Browser} application.\par
                    324: \pard\plain
                    325: \page
                    326: 
                    327: 
                    328: \s10\f1\fs20\up6\lang1024
                    329: #{\footnote {#} Edit}
                    330: ${\footnote {$} Edit Menu}
                    331: K{\footnote {K} Edit Menu}
                    332: K{\footnote {K} Menu Commands}
                    333: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    334: The Edit Menu\par
                    335: \pard\plain
                    336: \s4\li270\sb60\tx1440\tx2340
                    337: Allows the user to copy text to the clipboard.\line\line
                    338: {\b Cut}\line
                    339: Copies the text in the Debug Event window and then delete it from the window.\line\line
                    340: {\b Copy}\line
                    341: Copies the text in the Debug Event window.\line\line
                    342: {\b Delete}\line
                    343: Deletes the text in the Debug Event window.\par
                    344: \pard\plain
                    345: \page
                    346: 
                    347: 
                    348: \s10\f1\fs20\up6\lang1024
                    349: #{\footnote {#} Options}
                    350: ${\footnote {$} Options Menu}
                    351: K{\footnote {K} Options Menu}
                    352: K{\footnote {K} Menu Commands}
                    353: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    354: The Options Menu\par
                    355: \pard\plain
                    356: \s4\li270\sb60\tx1440\tx2340
                    357: Allows the user to set various options and preferences for this application.\line\line
                    358: {\b Fonts}\line
                    359: Displays a dialog box that will allow you to set the font for the Debug Event window.\line\line
                    360: {\b Background Color}\line
                    361: Displays a dialog box that will allow you to set the background color for the Debug Event window.\line\line
                    362: {\b Preferences}\line
                    363: Displays a dialog box that will allow you to set the options and preferences for this application.\line\line
                    364: {\b Toolbar}\line
                    365: Displays a Tool Bar when checked.\line\line
                    366: {\b Use Saved Directory}\line
                    367: This menu option will set the default directory to the one that was previously saved.  This only occurs when checked.\line\line
                    368: {\b Save Settings On Exit}\line
                    369: This menu option will save all the current session settings.\par
                    370: \pard\plain
                    371: \page
                    372: 
                    373: 
                    374: \s10\f1\fs20\up6\lang1024
                    375: #{\footnote {#} Help}
                    376: ${\footnote {$} Help Menu}
                    377: K{\footnote {K} Help Menu}
                    378: K{\footnote {K} Menu Commands}
                    379: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    380: The Help Menu\par
                    381: \pard\plain
                    382: \s4\li270\sb60\tx1440\tx2340
                    383: Displays various types of information regarding to the {\b Debug Event Browser} application.\line\line
                    384: {\b Contents}\line
                    385: Displays the contents of the Online Help.\line\line
                    386: {\b Search for Help on...}\line
                    387: Displays a list of keywords to search for Online Help topics.\line\line
                    388: {\b How to use Help}\line
                    389: Displays the instructions for using the Online Help facilities.\line\line
                    390: {\b About {\b DEB}...}\line
                    391: Displays information about the {\b Debug Event Browser}.\par
                    392: \pard\plain
                    393: \page
                    394: 
                    395: 
                    396: \s10\f1\fs20\up6\lang1024
                    397: #{\footnote {#} Keyboard}
                    398: ${\footnote {$} Keyboard Commands}
                    399: K{\footnote {K} Keyboard Commands}
                    400: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    401: Keyboard Commands\par
                    402: \pard\plain
                    403: \s4\li270\sb60\tx1440\tx2340
                    404: The keyboard commands allows quick and convenient access to several {\b Debug Event Browser} options simply with the pressing of one key.\line\line
                    405: {\b Ctrl+X}\line
                    406: Copies the text in the Debug Event window and then delete it from the window.\line\line
                    407: {\b Ctrl+C}\line
                    408: Copies the text in the Debug Event window.\line\line
                    409: {\b Del}\line
                    410: Deletes the text in the Debug Event window.\par
                    411: \pard\plain
                    412: \page
                    413: 
                    414: 
                    415: \s10\f1\fs20\up6\lang1024
                    416: #{\footnote {#} Toolbar}
                    417: ${\footnote {$} Toolbar}
                    418: K{\footnote {K} Toolbar}
                    419: \s6\brdrb\brdrs\brdrw30\brsp20\brdrcf2 \b\f2\fs28
                    420: Toolbar\par
                    421: \pard\plain
                    422: \s4\li270\sb60\tx1440\tx2340
                    423: The Toolbar allows quick and convenient access to several {\b Debug Event Browser} options simply with the click of the mouse.\par\par
                    424: \pard\plain
                    425: \qc \{bmc toolbar.bmp\}\par
                    426: \pard\plain
                    427: \page
                    428: 
                    429: 
                    430: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.