44 #define LINES_IN_COMMAND_BUFFER (64) 165 DPRINT((0,
"AddToCommandLineHistory(%s)\n",
s));
173 DPRINT((0,
"AddToCommandLineHistory(): command line already exists\n"));
200 DPRINT((0,
"GetFromCommandLineHistory(): current = %u\n",ulCurrentCommandPos));
205 DPRINT((0,
"GetFromCommandLineHistory(%s)\n",pRet));
230 pProcessName = pCurrentProcess->ImageFileName;
234 " PROCESS(%.8X \"%s\") ",
235 (
ULONG)pCurrentProcess,pProcessName);
241 (
ULONG)pCurrentProcess);
262 DPRINT((0,
"ProcessBootParams()\n"));
269 DPRINT((0,
"ProcessBootParams(): boot params = %s\n",p1));
270 while(*p1 && *p1!=
';')
278 DPRINT((0,
"ProcessBootParams(): error in cmd buf\n"));
282 DPRINT((0,
"ProcessBootParams(): next cmd buf = %s\n",p1));
332 DPRINT((0,
"DebuggerShell(): DisplayRegs()\n"));
336 DPRINT((0,
"DebuggerShell(): DisplayMemory()\n"));
343 DPRINT((0,
"DebuggerShell(): Unassemble()\n"));
390 DPRINT((0,
"DebuggerShell(): normal key\n"));
433 DPRINT((0,
"DebuggerShell(): RETURN\n"));
444 movl %%esp,%%ebx\n\t \ 446 leal _aulNewStack,%%ebx\n\t \ 447 addl $0x1FFF0,%%ebx\n\t \ 448 movl %%ebx,%%esp\n\t \ 474 DPRINT((0,
"DebuggerShell(): BACKSPACE\n"));
490 DPRINT((0,
"DebuggerShell(): TAB\n"));
533 movl %%esp,%%ebx\n\t \ 535 leal _aulNewStack,%%ebx\n\t \ 536 addl $0x1FFF0,%%ebx\n\t \ 537 movl %%ebx,%%esp\n\t \ 566 DPRINT((0,
"DebuggerShell(): HOME\n"));
570 DPRINT((0,
"DebuggerShell(): data window home\n"));
581 DPRINT((0,
"DebuggerShell(): output window home\n"));
600 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
610 DPRINT((0,
"DebuggerShell(): END\n"));
614 DPRINT((0,
"DebuggerShell(): data window end\n"));
625 DPRINT((0,
"DebuggerShell(): output window end\n"));
638 DPRINT((0,
"DebuggerShell(): UP\n"));
642 DPRINT((0,
"DebuggerShell(): data window up\n"));
673 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
688 DPRINT((0,
"DebuggerShell(): command line up\n"));
716 DPRINT((0,
"DebuggerShell(): DOWN\n"));
720 DPRINT((0,
"DebuggerShell(): data window down\n"));
754 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
769 DPRINT((0,
"DebuggerShell(): command line down\n"));
794 DPRINT((0,
"DebuggerShell(): LEFT\n"));
798 DPRINT((0,
"DebuggerShell(): data window left\n"));
823 DPRINT((0,
"DebuggerShell(): data window right\n"));
845 DPRINT((0,
"DebuggerShell(): PAGEUP\n"));
888 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
901 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
917 DPRINT((0,
"DebuggerShell(): PAGEDOWN\n"));
958 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
971 (
LPSTR)pSrc+pSrc->ulOffsetToNext,
1020 DPRINT((0,
"reason: %u#################################################################\n", dwReasonForBreak));
1049 ULONG ulAddress,ulAddressCurrent;
1057 goto common_return_point;
1087 DPRINT((0,
"singlestep-----------------------------------------------------------------\n"));
1100 LPSTR pSrc,pFileName;
1102 DPRINT((0,
"RealIsr(): stepping through source!\n"));
1116 DPRINT((0,
"RealIsr(): stepping through line #%u in file = %s!\n",ulLineNumber,pFileName));
1125 DPRINT((0,
"singstep-----------------------------------------------------------------\n"));
1138 DPRINT((0,
"REASON_HARDWARE_BP\n"));
1142 movl %%dr6,%%eax\n\t \ 1144 xorl %%eax,%%eax\n\t \ 1145 movl %%eax,%%dr6\n\t \ 1152 DPRINT((0,
"REASON_HARDWARE_BP: %x\n",(ulReason&0xF)));
1164 else if(ulReason&0
x1)
1166 ULONG ulAddressCurrent;
1174 LPSTR pSrc,pFileName;
1176 DPRINT((0,
"RealIsr(): stepping through source! [2]\n"));
1191 DPRINT((0,
"RealIsr(): stepping through line #%u in file = %s! [2]\n",ulLineNumber,pFileName));
1200 DPRINT((0,
"rrr-----------------------------------------------------------------\n"));
1213 DPRINT((0,
"REASON_INT3\n"));
1221 DPRINT((0,
"INT3 @ %.8X\n",ulAddress));
1228 DPRINT((0,
"INT3 @ %.8X removed\n",ulAddress));
1234 DPRINT((0,
"permanent breakpoint\n"));
1236 ReinstallPermanentBp =
TRUE;
1242 DPRINT((0,
"callback at %x\n",
p->Callback));
1266 DPRINT((0,
"can't deinstall, somebody else's breakpoint\n"));
1329 DPRINT((0,
"REASON_PAGEFAULT\n"));
1348 DPRINT((0,
"REASON_GPFAULT\n"));
1363 DPRINT((0,
"REASON_CTRLF\n"));
1368 DPRINT((0,
"REASON_DOUBLE_FAULT\n"));
1375 DPRINT((0,
"REASON_INTERNAL_ERROR\n"));
1383 DPRINT((0,
"REASON_UNKNOWN\n"));
1393 DPRINT((0,
"RealIsr(): not stepping yet\n"));
1399 DPRINT((0,
"RealIsr(): saving registers\n"));
1405 movw %ax,_CurrentES\n\t \ 1406 //movw %fs,%ax\n\t \ 1407 //movw %ax,_CurrentFS\n\t \ 1409 movw %ax,_CurrentGS\n\t \ 1410 movl %dr0,%eax\n\t \ 1411 movl %eax,_CurrentDR0\n\t \ 1412 movl %dr1,%eax\n\t \ 1413 movl %eax,_CurrentDR1\n\t \ 1414 movl %dr2,%eax\n\t \ 1415 movl %eax,_CurrentDR2\n\t \ 1416 movl %dr3,%eax\n\t \ 1417 movl %eax,_CurrentDR3\n\t \ 1418 movl %dr6,%eax\n\t \ 1419 movl %eax,_CurrentDR6\n\t \ 1420 movl %dr7,%eax\n\t \ 1421 movl %eax,_CurrentDR7\n\t \ 1422 movl %cr0,%eax\n\t \ 1423 movl %eax,_CurrentCR0\n\t \ 1424 movl %cr2,%eax\n\t \ 1425 movl %eax,_CurrentCR2\n\t \ 1426 movl %cr3,%eax\n\t \ 1427 movl %eax,_CurrentCR3\n\t \ 1432 DPRINT((0,
"RealIsr(): adding colon to output()\n"));
1435 DPRINT((0,
"RealIsr(): calling DebuggerShell()\n"));
1442 DPRINT((0,
"need to reinstall INT3\n"));
1453 common_return_point:
1463 DPRINT((0,
"common return-----------------------------------------------------------------\n"));
1467 __asm__(
".global NewInt31Handler\n\t \ 1468 NewInt31Handler:\n\t \ 1478 mov 0x4(%esp),%eax\n\t \ 1479 movl %eax,_CurrentEAX\n\t \ 1480 movl %ebx,_CurrentEBX\n\t \ 1481 movl %ecx,_CurrentECX\n\t \ 1482 movl %edx,_CurrentEDX\n\t \ 1483 movl %esi,_CurrentESI\n\t \ 1484 movl %edi,_CurrentEDI\n\t \ 1485 movl %ebp,_CurrentEBP\n\t \ 1486 movl (%esp),%eax\n\t \ 1487 movw %ax,_CurrentDS\n\t \ 1489 // test for V86 mode\n\t \ 1490 testl $0x20000,5*4(%esp)\n\t \ 1496 // test if stack switched (ring3->ring0 transition)\n\t \ 1497 // stack is switched if orig. SS is not global kernel code segment\n\t \ 1498 movl 4*4(%esp),%eax\n\t \ 1500 je notswitched\n\t \ 1502 // switched stack\n\t \ 1503 movl 6*4(%esp),%eax\n\t \ 1504 mov %eax,_CurrentESP\n\t \ 1505 mov 7*4(%esp),%eax\n\t \ 1506 movzwl %ax,%eax\n\t \ 1507 mov %ax,_CurrentSS\n\t \ 1508 jmp afterswitch\n\t \ 1511 // didn't switch stack\n\t \ 1512 movl %esp,_CurrentESP\n\t \ 1513 addl $24,_CurrentESP\n\t \ 1515 movzwl %ax,%eax\n\t \ 1516 mov %ax,_CurrentSS\n\t \ 1520 mov 3*4(%esp),%eax\n\t \ 1521 mov %eax,_CurrentEIP\n\t \ 1523 mov 4*4(%esp),%eax\n\t \ 1524 movzwl %ax,%eax\n\t \ 1525 movw %ax,_CurrentCS\n\t \ 1527 movl 5*4(%esp),%eax\n\t \ 1528 andl $0xFFFFFEFF,%eax\n\t \ 1529 movl %eax,_CurrentEFL\n\t \ 1533 // get reason code\n\t \ 1534 mov 0x28(%esp),%ebx\n\t \ 1537 * Load the PCR selector.\n\t \ 1540 movl %fs, %eax\n\t \ 1541 movl %eax, _OLD_PCR\n\t \ 1542 movl _PCR_SEL, %eax\n\t \ 1543 movl %eax, %fs\n\t \ 1545 // setup a large work stack\n\t \ 1546 movl %esp,%eax\n\t \ 1547 movl %eax,_ulRealStackPtr\n\t \ 1554 movl _OLD_PCR, %eax\n\t \ 1555 movl %eax, %fs\n\t \ 1558 // restore all regs\n\t \ 1561 // do an EOI to IRQ controller (because we definitely pressed some key)\n\t \ 1562 // TODO: SMP APIC support\n\t \ 1563 movb $0x20,%al\n\t \ 1564 outb %al,$0x20\n\t \ 1569 // remove reason code\n\t \ 1572 // make EAX available\n\t \ 1575 // modify or restore EFLAGS\n\t \ 1577 mov _CurrentEFL,%eax\n\t \ 1578 mov %eax,3*4(%esp)\n\t \ 1580 movzwl _CurrentCS,%eax\n\t \ 1581 mov %eax,2*4(%esp)\n\t \ 1583 mov _CurrentEIP,%eax\n\t \ 1584 mov %eax,1*4(%esp)\n\t \ 1586 // restore EAX\n\t \ 1589 // do we need to call old INT1 handler\n\t \ 1591 cmp $0,_dwCallOldInt1Handler\n\t \ 1594 // call INT3 handler\n\t \ 1596 jmp *_OldInt1Handler\n\t \ 1599 // do we need to call old INT3 handler\n\t \ 1601 cmp $0,_dwCallOldInt3Handler\n\t \ 1604 // call INT3 handler\n\t \ 1606 jmp *_OldInt3Handler\n\t \ 1609 // do we need to call old pagefault handler\n\t \ 1611 cmp $0,_dwCallOldIntEHandler\n\t \ 1614 // call old pagefault handler\n\t \ 1616 pushl _error_code\n\t \ 1618 jmp *_OldIntEHandler\n\t \ 1621 // do we need to call old general protection fault handler\n\t \ 1623 cmp $0,_dwCallOldGPFaultHandler\n\t \ 1626 // call old pagefault handler\n\t \ 1628 pushl _error_code\n\t \ 1630 jmp *_OldGPFaultHandler\n\t \ 1643 NewGlobalInt31Handler:\n\t \ 1645 cmpb $0,_bEnterNow\n\t \ 1646 jne dotheenter\n\t \ 1648 // chain to old handler\n\t \ 1650 jmp *_OldGlobalInt31Handler\n\t \ 1654 jmp NewInt31Handler " 1659 ULONG LocalNewGlobalInt31Handler;
1666 __asm__(
"mov $NewGlobalInt31Handler,%0" 1667 :
"=r" (LocalNewGlobalInt31Handler)
volatile BOOLEAN bEnterNow
void AddToCommandLineHistory(LPSTR s)
void SetForegroundColor(ECOLORS c)
ULONG LinesInRingBuffer(void)
char * szFunctionKeys[10]
volatile ULONG OldInt31Handler
volatile BOOLEAN bInDebuggerShell
#define REASON_DOUBLE_FAULT
void UnassembleOnePageUp(ULONG page)
void UnassembleOneLineDown(void)
volatile UCHAR ucKeyPressedWhileIdle
volatile BOOLEAN bSkipMainLoop
#define SCANCODE_BACKSPACE
BOOLEAN PrintRingBufferHome(ULONG ulLines)
ULONG ulCommandCurrentPos
#define LINES_IN_COMMAND_BUFFER
ULONG GLOBAL_SCREEN_WIDTH
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
LPSTR FindCommand(LPSTR p)
int PICE_sprintf(char *buf, const char *fmt,...)
void RealIsr(ULONG dwReasonForBreak)
ULONG dwCallOldInt1Handler
USHORT PICE_strlen(const char *s)
ULONG SetGlobalInt(ULONG dwInt, ULONG NewIntHandler)
BOOLEAN PrintRingBufferOffset(ULONG ulLines, ULONG ulOffset)
__asm__(".global NewInt31Handler\n\t \
NewInt31Handler:\n\t \
cli\n\t \
cld\n\t \
\n\t \
pushl %eax\n\t \
pushl %ds\n\t \
\n\t \
movw %ss,%ax\n\t \
mov %ax,%ds\n\t \
\n\t \
mov 0x4(%esp),%eax\n\t \
movl %eax,_CurrentEAX\n\t \
movl %ebx,_CurrentEBX\n\t \
movl %ecx,_CurrentECX\n\t \
movl %edx,_CurrentEDX\n\t \
movl %esi,_CurrentESI\n\t \
movl %edi,_CurrentEDI\n\t \
movl %ebp,_CurrentEBP\n\t \
movl (%esp),%eax\n\t \
movw %ax,_CurrentDS\n\t \
\n\t \
// test for V86 mode\n\t \
testl $0x20000,5*4(%esp)\n\t \
jz notV86\n\t \
\n\t \
int $0x03\n\t \
\n\t \
notV86:\n\t \
// test if stack switched (ring3->ring0 transition)\n\t \
// stack is switched if orig. SS is not global kernel code segment\n\t \
movl 4*4(%esp),%eax\n\t \
cmpw $" STR(GLOBAL_CODE_SEGMENT) ",%ax\n\t \
je notswitched\n\t \
\n\t \
// switched stack\n\t \
movl 6*4(%esp),%eax\n\t \
mov %eax,_CurrentESP\n\t \
mov 7*4(%esp),%eax\n\t \
movzwl %ax,%eax\n\t \
mov %ax,_CurrentSS\n\t \
jmp afterswitch\n\t \
\n\t \
notswitched:\n\t \
// didn't switch stack\n\t \
movl %esp,_CurrentESP\n\t \
addl $24,_CurrentESP\n\t \
movw %ss,%ax\n\t \
movzwl %ax,%eax\n\t \
mov %ax,_CurrentSS\n\t \
\n\t \
afterswitch:\n\t \
// save EIP\n\t \
mov 3*4(%esp),%eax\n\t \
mov %eax,_CurrentEIP\n\t \
//save CS\n\t \
mov 4*4(%esp),%eax\n\t \
movzwl %ax,%eax\n\t \
movw %ax,_CurrentCS\n\t \
// save flags\n\t \
movl 5*4(%esp),%eax\n\t \
andl $0xFFFFFEFF,%eax\n\t \
movl %eax,_CurrentEFL\n\t \
\n\t \
pushal\n\t \
\n\t \
// get reason code\n\t \
mov 0x28(%esp),%ebx\n\t \
\n\t \
/*\n\t \
* Load the PCR selector.\n\t \
*/\n\t \
\n\t \
movl %fs, %eax\n\t \
movl %eax, _OLD_PCR\n\t \
movl _PCR_SEL, %eax\n\t \
movl %eax, %fs\n\t \
\n\t \
// setup a large work stack\n\t \
movl %esp,%eax\n\t \
movl %eax,_ulRealStackPtr\n\t \
\n\t \
pushl %ebx\n\t \
call _RealIsr\n\t \
addl $4,%esp\n\t \
\n\t \
pushl %eax\n\t \
movl _OLD_PCR, %eax\n\t \
movl %eax, %fs\n\t \
popl %eax\n\t \
\n\t \
// restore all regs\n\t \
popal\n\t \
\n\t \
// do an EOI to IRQ controller (because we definitely pressed some key)\n\t \
// TODO: SMP APIC support\n\t \
movb $0x20,%al\n\t \
outb %al,$0x20\n\t \
\n\t \
popl %ds\n\t \
popl %eax\n\t \
\n\t \
// remove reason code\n\t \
addl $4,%esp\n\t \
\n\t \
// make EAX available\n\t \
pushl %eax\n\t \
\n\t \
// modify or restore EFLAGS\n\t \
.byte 0x2e\n\t \
mov _CurrentEFL,%eax\n\t \
mov %eax,3*4(%esp)\n\t \
.byte 0x2e\n\t \
movzwl _CurrentCS,%eax\n\t \
mov %eax,2*4(%esp)\n\t \
.byte 0x2e\n\t \
mov _CurrentEIP,%eax\n\t \
mov %eax,1*4(%esp)\n\t \
\n\t \
// restore EAX\n\t \
popl %eax\n\t \
\n\t \
// do we need to call old INT1 handler\n\t \
.byte 0x2e\n\t \
cmp $0,_dwCallOldInt1Handler\n\t \
je do_iret2\n\t \
\n\t \
// call INT3 handler\n\t \
.byte 0x2e\n\t \
jmp *_OldInt1Handler\n\t \
\n\t \
do_iret2:\n\t \
// do we need to call old INT3 handler\n\t \
.byte 0x2e\n\t \
cmp $0,_dwCallOldInt3Handler\n\t \
je do_iret1\n\t \
\n\t \
// call INT3 handler\n\t \
.byte 0x2e\n\t \
jmp *_OldInt3Handler\n\t \
\n\t \
do_iret1:\n\t \
// do we need to call old pagefault handler\n\t \
.byte 0x2e\n\t \
cmp $0,_dwCallOldIntEHandler\n\t \
je do_iret3\n\t \
\n\t \
// call old pagefault handler\n\t \
.byte 0x2e\n\t \
pushl _error_code\n\t \
.byte 0x2e\n\t \
jmp *_OldIntEHandler\n\t \
\n\t \
do_iret3:\n\t \
// do we need to call old general protection fault handler\n\t \
.byte 0x2e\n\t \
cmp $0,_dwCallOldGPFaultHandler\n\t \
je do_iret\n\t \
\n\t \
// call old pagefault handler\n\t \
.byte 0x2e\n\t \
pushl _error_code\n\t \
.byte 0x2e\n\t \
jmp *_OldGPFaultHandler\n\t \
\n\t \
do_iret:\n\t \
//ei\n\t \
//int3\n\t \
iretl ")
void DisplaySourceFile(LPSTR pSrcLine, LPSTR pSrcEnd, ULONG ulLineNumber, ULONG ulLineNumberToInvert)
ULONG GetLinesInCommandHistory(void)
void Print(USHORT Window, LPSTR p)
char * PICE_strcpy(char *s1, char *s2)
void UnassembleOnePageDown(ULONG page)
#define REASON_INTERNAL_ERROR
char aszCommandLines[LINES_IN_COMMAND_BUFFER][sizeof(ucCommandBuffer)+2]
#define REASON_HARDWARE_BP
volatile BOOLEAN bSingleStep
void InstallGlobalKeyboardHook(void)
void outb_p(UCHAR data, PUCHAR port)
UCHAR AsciiFromScan(UCHAR s)
_Out_opt_ int _Out_opt_ int * cy
LONG ulCurrentlyDisplayedLineNumber
ULONG dwCallOldGPFaultHandler
void ProcessBootParams(void)
void DeInstallGlobalKeyboardHook(void)
ULONG dwCallOldInt3Handler
void ShowRunningMsg(void)
TCHAR szCurrentFile[MAX_PATH]
volatile BOOLEAN bControl
char * PICE_strcat(char *s1, char *s2)
PEPROCESS NTAPI IoGetCurrentProcess(VOID)
void RestoreGraphicsState(void)
ULONG aulNewStack[0x20000]
ULONG dwCallOldIntEHandler
void ReplaceRingBufferCurrent(LPSTR s)
BOOLEAN __inline bNoCtrlKeys(void)
void ShowStatusLine(void)
void TryToInstallVirtualSWBreakpoints(void)
ULONG GetLinearAddress(USHORT Segment, ULONG Offset)
void FlushKeyboardQueue(void)
void InstallPrintkHook(void)
void ShowStoppedMsg(void)
void PrintRingBuffer(ULONG ulLines)
#define REASON_SINGLESTEP
void SaveGraphicsState(void)
BOOLEAN ReInstallSWBreakpoint(ULONG ulAddress)
PSW_BP IsPermanentSWBreakpoint(ULONG ulAddress)
LPSTR FindSourceLineForAddress(ULONG addr, PULONG pulLineNumber, LPSTR *ppSrcStart, LPSTR *ppSrcEnd, LPSTR *ppFilename)
BOOLEAN bStepThroughSource
void PutChar(LPSTR p, ULONG x, ULONG y)
USHORT usCurrentPosInInputBuffer
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LPSTR GetFromCommandLineHistory(ULONG ulCurrentCommandPos)
ULONG g_ulLineNumberStart
volatile ULONG OldGlobalInt31Handler
BOOLEAN NeedToReInstallSWBreakpoints(ULONG ulAddress, BOOLEAN bUseAddress)
BOOLEAN DeInstallSWBreakpoint(ULONG ulAddress)
void CheckRingBuffer(void)
GLint GLint GLint GLint GLint GLint y
void SetBackgroundColor(ECOLORS c)
void UnassembleOneLineUp(void)
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
BOOLEAN IsSwBpAtAddressInstalled(ULONG ulAddress)
BOOLEAN ConvertTokenToSrcFile(LPSTR p, PULONG pValue)
BOOLEAN ScanExportsByAddress(LPSTR *pFind, ULONG ulValue)
UCHAR ucCommandBuffer[256]
ULONG bPreviousCommandWasGo
volatile BOOLEAN bNotifyToExit
void PrintLogo(BOOLEAN bShow)
ULONG ulLastLineDisplayedOffset
#define GLOBAL_CODE_SEGMENT
void PICE_memset(void *p, unsigned char c, int sz)
void PrintCursor(BOOLEAN bForce)
BOOLEAN IsAddressValid(ULONG address)
BOOLEAN(* DisplayMemory)(PARGS)
ULONG PICE_strcmpi(char *s1, char *s2)