ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄ¿ÚÄ¿ ÚÄ¿ ÚÄ¿ÚÄÄÄÄÄ¿ÚÄ¿ ÚÄ¿ÚÄÄÄÄÄ¿ÚÄÄÄÄÄ¿ ³ ÚÄÄ¿À¿³ ÚÄÄÄÙ ³ ÚÄÄÄÄÙ³ ³ ³ ³ ³ ³³ ÚÄÄÄÙ³ ³ÚÙÚÙ³ ÚÄÄÄÙ³ ÚÄÄ¿À¿ ³ ³ ³ ³³ ÀÄÄ¿ ÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³³ ³ ³ ÀÙÚÙ ³ ÀÄÄ¿ ³ ÀÄÄÙ ³ ³ ³ ³ ³³ ³ ³ ³ ÚÄ¿³ ³ ³ ³ ³ ³³ ³ ³ ÚÄÅÄ¿³ ³ ³ ÚÄ¿ ÚÙ ³ ÀÄÄÙ ³³ ÀÄÄÄ¿ ³ ÀÄÄÙ ³³ ÀÄÄÄÄ¿À¿ÀÄÄÙ ³³ ÀÄÄÄ¿³ ³ ³ ³³ ÀÄÄÄ¿³ ³ À¿À¿ ÀÄÄÄÄÄÄÙÀÄÄÄÄÄÙ ÀÄÄÄÄÄÄÙÀÄÄÄÄÄÄÙ ÀÄÄÄÄÄÙÀÄÄÄÄÄÙÀÄÙ ÀÄÙÀÄÄÄÄÄÙÀÄÙ ÀÄÙ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÚÄ¿ ÚÄ¿ÚÄ¿  ÂÚÄÄ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ³ ³ ³ ³ÀÄ¿ÄÀ¿³ÀÄ¿³ ÀÄÙÄÀÄÙÀÄÙ ÀÁÄÄÙÀÄ ÄÄÄÄÄÄÄÄÄÄ*ÄÄÄÄÄÄÄÄÄÄ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 1 ÄÄ INTRODUCTION ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DeGlucker (DG) is the universal debugger, designed for debugging original (and someone else's too :) programs. Despite the fact that there's a lot of other debuggers, DG has the following advantages: þ Works in Protected Mode, victim runs in V86 þ Comfortable fullscreen interface a la Turbo Debugger þ Small size... þ ...Huge amount of features þ Free source code None grants these all together :) ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 2 ÄÄ INSTALLATION AND EXECUTION ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DeGlucker is always ready to serve, everything you need is: - to have 386+ CPU and VGA card. - don't have any EMS-manager or multitasking OS installed - to unpack this package in any directory you like - to run DG.EXE, with the following options if necessary... ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 3 ÄÄ USAGE OPTIONS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DG should be executed like this (the content of the square brackets is not obligatory): DG [keys] [progname.ext [progparams]] ÚÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Where: à keys - options setting up DG, which should begin with '/' or '-', ³ ³ possible keys are: ³ ÃÄ k - to use hard unlock keyboard control. Used when victim program uses ³ ³ keyboard ports to lock it. Unfortunately keyboard echo turns ³ ³ off if this option is specified, so you have to press F7 ³ ³ constantly:) ³ ÃÄ e - to give control to V86 int 6 handler, instead of PM. Used when ³ ³ victim intentionally uses invalid opcode, e.g. for the ³ ³ antidebugging means. ³ ÃÄ r - to remove resident DG. ³ ÀÄ ? - to show help. ³ à progname.ext - victim program name (extension required!) ³ If it's not specified, DG installs resident. À progparams - victim's command-line. Attention! /k and/or /e options should certainly precede the victim's name, otherwise they would be treated as its command-line. Press [Pause] to activate resident DeGlucker. Otherwise, when victim's name was specified, it activates by itself. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 4 ÄÄ NEW FEATURES ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DG has a lot of new features comparing to the last CrazyMax's release. þ native assembler with masm/ideal syntax and pentium opcodes þ Useful FPU window þ DRXs sharing þ DRx and CRx window þ Virtual PIC þ Up to 6 bookmarks for the code/data windows þ Built-in clocks!!! (For true night-time hackers ;))) þ Status bar. (Your memory is supposed for better needs %) ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 5 ÄÄ DEBUGGER MAIN SCREEN ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ DeGlucker's main screen look depends on its state: Ú[1]ÄÄÄÄÄÄÂ[2]ÄÄÂ[3]¿ Ú[1]ÄÄÄÄÄÄÂ[2]ÄÄÂ[3]¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ Ã[5]Â[4]ÄÄ´ ³ Ã[8]ÄÄÁÄÄÄ´ ³ ³ ³ ³ or ³ ³ ³ ³ ³ Ã[6]ÄÄ´ ³ Ã[0]ÄÄÂ[9]´ Ã[7]ÄÄÄÄÄÄÁÄÄÄ´ ³ Ã[7]ÄÄÄÄÄÄÁÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÁÄÙ a) with stack info b) with FPU info Where: [1] - CPU window with disassembled code [2] - Registers window with CPU registers [3] - Flags windows with CPU flags [4] - Watches window [5] - Stack window [6] - Locals window or DR/CR window [7] - Dump window,which is able to be maximized [8] - STs FPU registers and tags window [9] - CR-SR FPU flags window [0] - Pointers of FPU window To change active window press [Tab] (clockwise), [Shift+Tab] ( anticlockwise) or [Ctrl+n], where [n] is the number of desired window. Status bar consists of the following: Û _  pic: 08/70  bpint: 21/4B00 bpio: 00  123456789  DeGlucker 0.05 Û ÃÄÄÄÙ ÚÄÄÄÄÄÁÄÄÄÙ ÚÄÄÄÄÄÁÄÄÄÄÄÙ ÚÄÄÁÙ ÀÄÄÄÄÄÄÂÙ ÀÄÄÄÄ´ ³ À PIC base ³ ³ ÀÄ active ÄÄÄÄÄÄÄÄ¿³ À Command-line À bpint numb/fn À number of ÄÄÄ¿ breaks/bookmarksÙ³ port breaks ÄÙ Version or clockÄÙ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 6 ÄÄ WINDOWS AND KEYS DEFINITION ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ þ Common keys are: ³ ÃÄÄÄÄÄÄÄÄÄÄ [F1] - Active window's keys help. Press twice for global keys. ÃÄÄÄÄÄÄÄ [Alt+X] - Exit à [Ctrl+Alt+Del] - The same as [Alt+X] ³ à Windows control: ³ ÃÄÄÄÄÄÄÄ [Esc] - Show user screen ³ ÃÄÄÄÄ [Alt+F5] - The same as [Esc] ³ ÃÄÄÄÄÄ [Alt+T] - Toggle clock ³ ÃÄÄÄÄÄ [Alt+F] - Toggle FPU windows ³ ÃÄÄÄÄÄ [Alt+D] - Toggle DR/CR or Locals window ³ ÃÄÄÄÄ [Ctrl+R] - Toggle registers mode (16/32) ³ ÀÄÄÄ [Ctrl+F4] - Calculator ³ à Victim program control: ³ ÃÄÄÄÄÄÄÄÄ [F6] - Skip opcode ³ ÃÄÄÄÄÄÄÄÄ [F7] - Trace ³ ÃÄÄÄÄÄÄÄÄ [F8] - Step over ³ ÃÄÄÄ [Ctrl+F2] - Reload victim ³ ÃÄÄÄÄÄ [Alt+n] - Go to breakpoint (1<=n<=4) or bookmark (5<=n<=0) ³ ÃÄÄÄÄÄ [Alt+0] - Go to the previous bookmark ³ à [Ctrl+Alt+n] - Place bookmark (5<=n<=9) ³ ÃÄÄÄÄ [Ctrl+V] - Show V86 vectors table ³ À [Ctrl+Alt+C] - Clear user screen and set text mode ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ þ CPU window þ [Ctrl+1] ³ In the CPU window you can observe victim's code. If the current opcode ³ uses memory data, the data is displayed in the top of the window. In case ³ of a breakpoint address of opcode is red, conditional breakpoint is pink. ³ When break occurs, breakpoint number is highlighted with red color. ³ If the current opcode is conditional jump, when condition is true the ³ further coming arrow shows the direction of the jump. In case of jmp/ ³ call/int opcode the follow mode is activated, you are able to follow ³ the destination of jmp/call/int. ³ DeGlucker has built-in assembler, called automatically after typing ³ anything in CPU window. Assembler accepts both MASM/Ideal syntax. You ³ can assemble a few opcodes at once separating them with ';'. Still ³ if a mistake was found partial assembling would not take place. ³ Assembler allows 'db/dw/dd' string constants, but opcodes like ³ add al,'a'-'A' are prohibited. All numbers are hex, the ending 'h' is ³ not required! ³ ³ The examples of assembler opcodes and expressions: ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³icebp ³cs:pushf ³db 66;cli;sti;hlt ³ ³ ³jmp 100 ³mov ax,1234 ³call dword ptr [bx] ³ ³ ³movzx eax,byte cs:[bx] ³movsx esi,[word gs:si] ³mov ebx,[1+edi*4+eax] ³ ³ ³ffree st(5) ³fld [qword es:1234] ³add al,'0' ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ þ CPU window keys ³ à Victim program control: ³ ÃÄÄÄÄÄÄÄÄ [F2] - Toggle hardware code breakpoint ³ ÃÄÄÄÄ [Alt+F2] - Set conditional hardware code breakpoint ³ ÃÄÄ [Shift+F2] - Show the condition of breakpoint ³ ÃÄÄÄÄÄÄÄÄ [F4] - Go here ³ ÃÄÄÄÄÄ [Alt+J] - Replace conditional jump with unconditional ³ ÃÄÄÄÄÄ [Alt+K] - NOP opcode ³ ÃÄÄÄÄÄ [Alt+I] - Place int break ³ ÃÄÄÄÄÄ [Alt+P] - Place port break ³ ÃÄÄÄÄÄ [Alt+G] - Call interrupt ³ ÀÄÄÄÄ [Ctrl+N] - Set new cs:ip with the cursor address à Navigation: ³ ÃÄÄÄÄ [Ctrl+G] - Go to the specific address ³ ÃÄÄÄÄ [Ctrl+I] - Go to the interrupt handler ³ ÃÄÄÄÄ [Ctrl+O] - Go to cs:ip ³ ÃÄÄÄÄ [Ctrl+B] - Go to the stack top address ³ ÃÄÄÄÄ [Ctrl+F] - Follow int/call/jump ³ ÃÄÄÄÄÄ [Enter] - The same as [Ctrl+F] ³ ÃÄÄÄÄ [Ctrl+P] - Undo follow (up to 5 times) ³ ÃÄ [BackSpace] - The same as [Ctrl+P] ³ ÃÄÄÄÄ [Ctrl+S] - Search string/number from the cursor position ³ À [Ctrl+Enter] - Continue search ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ þ Registers window þ [Ctrl+2] ³ You can see the content of CPU registers, 16bit or 32bit modes are ³ allowed. If you wish to change the value select the register and enter the ³ new one. Registers which values have changed after opcode executing are ³ highlighted. ³ þ Registers window keys ³ ÃÄÄÄÄÄÄ [Ctrl+I] - Increase register value ÃÄÄÄÄÄÄ [Ctrl+D] - Decrease register value ÃÄÄÄÄÄÄ [Ctrl+Z] - Zero register ÀÄÄÄÄÄÄ [Ctrl+P] - Restore register previous value þ Flags window þ [Ctrl+3] ³ Shows the current state of CPU flags. Additional Trace flag is displayed ³ in the top right corner. ³ þ Flags window keys ³ ÃÄÄÄÄÄÄ [Enter], ÃÄÄÄÄÄÄ [Space], ÃÄÄÄÄÄÄ [Insert] - Invert flag state ÀÄÄÄÄÄÄ [Ctrl+T] - Invert trace flag state þ Watches window þ [Ctrl+4] ³ Watches window is designed for the operative data watching up to 4 ³ pointers simultaneously. The left side contains pointers' values ³ and the right one the data itself. ³ You can specify any expression as a pointer, e.g.: ³ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ 0:21*4 ³ cs:100 ³ ds:dx ³ ds+bp:ax*2+bx ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ , but no longer than 19 chars at once. ³ Registers' values in expressions are updated. If expression doesn't ³ specify any segment register (e.g. bx+cx), ds segment is assumed ³ (i.e. ds:bx+cx). ³ þ Watches window keys ³ ÀÄÄÄÄÄÄ [Ctrl+T] - Toggle Hex-dump þ Stack window þ [Ctrl+5] ³ It contains victim program stack. ³ Stack data editing is possible. ³ þ Stack window keys ³ ÃÄÄÄÄÄÄ [Ctrl+G] - Go to the specific address ÃÄÄÄÄÄÄ [Ctrl+O] - Go to ss:sp ÃÄÄÄÄÄÄ [Ctrl+N] - Set new ss:sp with the cursor address ÃÄÄÄÄÄÄ [Ctrl+P] - Push word ÀÄÄÄÄÄÄ [Ctrl+E] - pop word (i.e. add sp,2) þ Locals window þ [Ctrl+6] ³ Locals window shows special victim program's stack part (created by ³ enter or mov bp,sp). As a rule this part contains procedure's arguments ³ and local variables. ³ Locals data editing is possible.. ³ þ Locals window keys ³ ÃÄÄÄÄÄÄ [Ctrl+G] - Go to the specific address ÀÄÄÄÄÄÄ [Ctrl+O] - Go to ss:bp þ DR/CR window þ [Ctrl+6], [Alt+D] ³ DR/CR window contains virtual DRx and CRx values. DeGlucker is able ³ to share DRx with victim program. ³ In the middle horizontal part of window dr7 content is placed in more ³ helpful double char form, which describes dr0-dr3 usage (from the left ³ to the right). The first char shows breakpoint type, the second one ³ describes its type. ³ ³ Breakpoint type: Breakpoint size: ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ x - on eXecution ³ m - on memory Modify ³ ³ b - Byte ³ w - Word ³ ³ ³ i - on port IO ³ a - on memory Access ³ ³ u - Unknown ³ d - Dword ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ This window overlaps Locals window, you can toggle between them by ³ pressing [Alt+D] ³ þ DR/CR window keys ³ à In h/w breakpoints status field: ³ à [X],[I],[M],[A] - Set breakpoint state ³ à [B],[W],[U],[D] - Set breakpoint size ³ À [L],[G] - Toggle breakpoint activity ³ à In DR0-DR3 fields: ³ À [Ctrl] + aforesaid keys - The same for the selected DRx ÀÄÄÄÄÄÄ [Ctrl+F] - Follow DRx address in CPU/Dump window þ Dump window þ [Ctrl+7] ³ It shows and allows to edit memory data. ³ The value of Data Breakpoint byte is highlighted. When break occurs, ³ breakpoint number in the status bar is highlighted with green color. ³ The Dump window header can show additional info about marked block. ³ þ Dump window keys ³ à Common: ³ ÃÄÄÄÄÄÄÄÄ [F5] - Maximize/Minimize Dump window ³ ÃÄÄÄÄÄÄÄÄ [F2] - Toggle hardware data breakpoint ³ ÃÄÄÄÄ [Alt+F2] - Set conditional hardware data breakpoint ³ ÃÄÄ [Shift+F2] - Show the condition of breakpoint ³ ÃÄÄÄÄÄ [Alt+S] - Save dump to file ³ ÀÄÄÄÄÄ [Alt+L] - Load dump from file à Navigation: ³ ÃÄÄÄÄ [Ctrl+G] - Go to the specific address ³ ÃÄÄÄÄ [Ctrl+I] - Go to the interrupt ³ ÃÄÄÄÄ [Ctrl+W] - Toggle segment/raw dump mode ³ ÃÄ [Ctrl+Left] - Shift dump a byte left ³ à [Ctrl+Right] - Shift dump a byte right ³ ÃÄÄÄÄÄÄ [Home] - Go to the first byte in the Dump window ³ ÃÄÄÄÄÄ [Enter] - Toggle Hex/Text fields ³ ÃÄÄÄÄÄÄÄ [Ins] - Toggle block info ³ à [Ctrl+Home], ³ ÃÄÄ [Ctrl+End] - Mark block begin/end ³ à [Shift+Home], ³ ÃÄ [Shift+End] - Go to the begin/end of block ³ ÃÄÄÄÄ [Ctrl+S] - Search string/number from the cursor position ³ À [Ctrl+Enter] - Continue search ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ The following 3 windows are available only if you have FPU! ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ þ STs window þ [Ctrl+8] ³ This window contains FPU registers data, their tags, and the current ³ FPU stack top. ³ st() registers are settled from up to down, their tags are placed ³ from the left to the right. ³ Tags contents are displayed as: ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ E - Empty ³ V - Valid ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ Z - Zero ³ U - Unsupported ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ It's allowed to change any register's value, but you should admit, that ³ it's prohibited to change tag's value arbitrarily, their contents depend ³ on the corresponding st register's value. Anyway you can always [Empty] ³ it. Values for st registers can be represented in standard or exponential ³ form. NANs (Not a number) are allowed. ³ No operations or registers as value are allowed. ³ ³ Examples of input: ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ 123 ³ 3.1415 ³ -1234e10 ³ 111e-2 ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´ ³ ³ +inf (set positive infinity) ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ -nan (set negative not a number) ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ þ STs window keys ³ à Common: ³ ÃÄÄÄÄÄÄ [Home] - Go to st(0) ³ ÃÄÄÄÄÄÄÄ [End] - Go to st(7) ³ ÃÄÄÄÄ [Ctrl+H] - toggle hex form of st() ³ ÀÄÄÄÄÄ [Alt+N] - FPU Nuke :) (FINIT) à In st() fields: ³ ÃÄÄÄÄ [Ctrl+E] - empty tag ³ ÀÄÄÄÄ [Ctrl+Z] - zero tag à In tags fields: ³ ÃÄÄÄÄ [Ctrl+E] - empty tag ³ ÃÄÄÄÄ [Ctrl+Z] - zero tag ³ ÃÄÄÄÄ [Enter], ³ ÃÄÄÄÄ [Space], ³ ÃÄÄÄÄÄÄÄ [Ins] - Increase (if possible) ³ ÀÄÄÄÄÄÄÄ [Del] - Decrease (if possible) à In stack top field: ³ ÃÄÄÄÄÄÄÄ [Ins] - Increase value ³ ÀÄÄÄÄÄÄÄ [Del] - Decrease value ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ þ CR-SR window þ [Ctrl+9] ³ CR-SR window shows the contents FPU control and status registers. ³ c0-c3 flags of sr are joined in cc field. ³ þ CR-SR window keys: ³ ÃÄÄÄÄÄÄÄ [Left], ÃÄÄÄÄÄÄÄ [Right] - Move between cr and sr columns ÃÄÄÄÄÄÄÄÄ [Home] - Go to the top register ÃÄÄÄÄÄÄÄÄÄ [End] - Go to the bottom register ÃÄÄÄÄÄÄ [Enter], ÃÄÄÄÄÄÄ [Space], ÀÄÄÄÄÄÄÄÄÄ [Ins] - Increase/change flag value þ Pointers window þ [Ctrl+0] ³ This window shows the contents of FPU pointers registers. ³ Unrestricted editing is allowed. ³ þ Pointers window keys: ³ ÀÄÄÄÄÄÄ [Ctrl+F] - Follow pointer in CPU/Dump windows. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 7 ÄÄ ADDITIONAL FEATURES ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  1  Calculator [Ctrl+F4] in any window ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Built-in calculator allows simple arithmetic calculations up to 32 bit. Default numbers are in hex form. Decimal number should be followed by a dot. Quoted (') strings are allowed, the last 4 chars will be used in calculations ('12345' == 32333435h). You can as well specify any CPU register, they will be substituted by their current values. The name of CPU flags register is fl. The expression calculates from the left to the right without operations priority, e.g. 2+3*4 gives the same result as (2+3)*4. Use parenteses to change the order of expression calculation, nesting level is unlimited. If an error has taken the place, no additional calculating proceeds, the current result returns, e.g. 5+6+suxx+7 will be equal to 5+6 = 11. Besides 4 arithmetical operations, calculator allows: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ & - logical "and" ³ | - logical "or" ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ^ - logical "xor" ³ % - division remainder ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  2  Inputs ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ All inputs, which require numerical input (except st()), are processed by calculator, so everything mentioned about calculator applies them. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  3  Conditional breakpoints [Alt+F2] in CPU/Dump windows ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ This kind of breakpoints requires a condition. Breakpoint occurs only when condition is true. Condition format is x cond y , where x & y - any expression (processed by calculator), and cond is one of the following: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ = , == - equal ³ > - more ³ >= - more or equal ³ ³ != , <> , >< - not equal ³ < - less ³ <= - less or equal ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Except these conditions, data breakpoints have another one - activate after write or activate after access. Note that, that data breakpoint occurs _after_ data's accessed and cs:ip points to the next command, after those which caused access. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  4  Breakpoint at interrupt [Alt+I] in CPU window ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You can set breakpoint at interrupt (the only one). This kind of break requires interrupt number, and ax value, which would cause a break. If ax (ah, al) doesn't matter, enter FFFF (FF), e.g. break at file read will be (ah=3Fh, int 21h): ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Interrupt : 21 ³ Function : 3FFF (ah==3F, al == anything) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ You can find the current bpint state (int/fn) in status bar. To deactivate breakpoint, input Interrupt more than FE . Int 0FFh breakpoint isn't allowed. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  5  In/out breakpoint [Alt+P] CPU window ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You can set unlimited ports i/o breakpoints. To trap/untrap the desired port, you should enter its number. To unset all ports i/o breaks specify zero as a port number. Status bar indicates the current number of ports i/o breakpoints. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  6  V86 interrupts table [Ctrl+V] in CPU window ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ It shows current V86 interrupts states. Interrupts handlers changed (comparing to those ones when DG was started) by victim program are highlighted with yellow. Use arrows to set the required interrupt, press [Enter] to follow its handler. [Esc] and [Ctrl+V] close this window. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  7  Blocks [Ctrl+Home/End] in Dump window ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ You can mark a block in the Dump window for the fast loading and saving. So if you leave 'Seg:Off of dump' field empty during dump load/save procedure, the corresponding block parameters will be used as dump offset and size. The beginning and end of a block are marked with blue arrows. ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ  8  Virtual PIC ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DeGlucker emulates PIC, allowing victim to reprogram interrupts bases. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 8 ÄÄ COPYRIGHT & CREDITS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This version of DeGlucker was created by Vladimir Gneushev aka VAG & Oleg Prokhorov aka OlegPro (c) VAGSoft Lab. Russia, Moscow, 1999-2000. I would like to thank the following outstanding people:  ALI & MASTER - for the initial creation of this debugger  CrazyMaX - for the giving it the second life and free sources  David Lindauer - for the useful sources.  iNTEL corporation - for their huge .pdf documentation ;) And especially all the alpha/beta testers:  Sergei Lebedev (2:5020/1572.160) - for the sources and long chats 8-)  Mike Zhuravlev (2:5020/1683) and  Vladimir Zaitsev (2:5020/935.16) - for pieces of advice  Mike Ivanov (2:5025/73.16) - for bugs searching & correspondence ;)  Vladimir Gorbunov (darkgrey@mail.ru) - for the bug-reports and useful programs  And all the rest, whom I forgot (but didn't wish :) to mention ... The following tools were used in DeGlucker's creation:  DOS Navigator 1.51 (c) RIT Research Labs  Turbo Assembler 4.1 and Make 4.0 (c)Borland (Inprise) Int.  ALINK 1.6 (c) 1998-9 Anthony A.J. Williams ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿  KeyRus 7.3 (c) ³Dmitry Gurtjak³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ If you found DeGlucker's bug or would like to help in its further development e@mail to VAGSoft@mail.ru, FIDONET 2:5020/1105.20 or /1238.10 The latest version of DeGlucker available at http://vagsoft.da.ru ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ Ó 9 ÄÄ HISTORY REVISION ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ [...] Coming soon... (see read_it.!!!) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· Ô[dox revision 1.4e-V at 8-may-2000]ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍEOF!¼