?? parse.c
字號:
PICE_sprintf(tempCmd,"%-20s %s\n",CmdTable[i].Cmd,CmdTable[i].Help); Print(OUTPUT_WINDOW,tempCmd); if(WaitForKey()==FALSE)return TRUE; } } } LEAVE_FUNC(); return TRUE;}//*************************************************************************// ShowPageDirs()////*************************************************************************COMMAND_PROTOTYPE(ShowPageDirs) { ULONG i; PPAGEDIR pPageDir; pgd_t * pPGD; pmd_t * pPMD; pte_t * pPTE; struct mm_struct* mm; ENTER_FUNC(); // get current process pointer DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "current = %.8X\n",(ULONG)current); // don't touch if not valid process if(current) { if(current->mm) { pPageDir = (PPAGEDIR)pgd_offset(current->mm,0); mm = current->mm; DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "(1) pPageDir = %.8X\n",(ULONG)pPageDir); } else { mm = my_init_mm; pPageDir = (PPAGEDIR)my_init_mm->pgd; DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "(2) pPageDir = %.8X\n",(ULONG)pPageDir); } // no arguments supplied -> show all page directories if(!pArgs->Count) { SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutStatusText("Linear Physical Attributes"); ResetColor(); // there are 1024 page directories each mapping 1024*4k of address space for(i=0;i<1024;i++) { ULONG ulAddress = i<<22; // from the mm_struct get pointer to page directory for this address pPGD = pgd_offset(mm,ulAddress); if(pPGD) { // create a structurized pointer from PGD pPageDir = (PPAGEDIR)pPGD; PICE_sprintf(tempCmd,"%.8X-%.8X %.8X %s %s %s\n", ulAddress, ulAddress + 0x400000, (pPageDir->PTBase<<12), pPageDir->P?"P ":"NP", pPageDir->RW?"RW":"R ", pPageDir->US?"U":"S"); Print(OUTPUT_WINDOW,tempCmd); if(WaitForKey()==FALSE)break; } } } // one arg supplied -> show individual page else if(pArgs->Count == 1) { pPGD = pgd_offset(mm,pArgs->Value[0]); DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "VA = %.8X\n",pArgs->Value[0]); DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "pPGD = %.8X\n",(ULONG)pPGD); if(pPGD && pgd_val(*pPGD)&_PAGE_PRESENT) { // 4M page if(pgd_val(*pPGD)&_PAGE_4M) { PPAGEDIR pPage = (PPAGEDIR)pPGD; SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutStatusText("Linear Physical Attributes"); ResetColor(); PICE_sprintf(tempCmd,"%.8X %.8X %s %s %s (LARGE PAGE PTE @ %.8X)\n", pArgs->Value[0], (pPage->PTBase<<12)|(pArgs->Value[0]&0x7FFFFF), pPage->P?"P ":"NP", pPage->RW?"RW":"R ", pPage->US?"U":"S", (ULONG)pPGD); } else { pPMD = pmd_offset(pPGD,pArgs->Value[0]); DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "pPMD = %.8X\n",(ULONG)pPMD); pPTE = pte_offset(pPMD,pArgs->Value[0]); DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "pPTE = %.8X\n",(ULONG)pPTE); if(pPTE) { PPAGEDIR pPage = (PPAGEDIR)pPTE; DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "pte_val = %.8X\n",(ULONG)pte_val(*pPTE)); DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "pPage->PTBase = %.8X\n",(ULONG)pPage->PTBase); SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutStatusText("Linear Physical Attributes"); ResetColor(); PICE_sprintf(tempCmd,"%.8X %.8X %s %s %s (PTE @ %.8X)\n", pArgs->Value[0], (pPage->PTBase<<12)|(pArgs->Value[0]&(PAGE_SIZE-1)), (pPage->P==1)?"P ":"NP", pPage->RW?"RW":"R ", pPage->US?"U":"S", (ULONG)pPTE); } } Print(OUTPUT_WINDOW,tempCmd); } else { PICE_sprintf(tempCmd,"page at %.8X not present.\n",pArgs->Value[0]); Print(OUTPUT_WINDOW,tempCmd); } } } LEAVE_FUNC(); return TRUE; } //*************************************************************************// ShowProcesses()////*************************************************************************COMMAND_PROTOTYPE(ShowProcesses) { struct task_struct* p; ULONG i; ENTER_FUNC(); if(current) { DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "current = %p current->prev_task = %p current->next_task = %p\n", current, current->prev_task, current->next_task); SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutStatusText("NAME TASK PID"); ResetColor(); for(i=0,p = current; (p = p->next_task) != current;i++) { DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "p = %p\n",p); PICE_sprintf(tempCmd,"%-16.16s %-12x %x\n",(LPSTR)&(p->comm),(ULONG)p,p->pid); Print(OUTPUT_WINDOW,tempCmd); if(WaitForKey()==FALSE) break; } } LEAVE_FUNC(); return TRUE; } //*************************************************************************// DisplayMemoryDword()////*************************************************************************COMMAND_PROTOTYPE(DisplayMemoryDword){ ULONG i,j,k; static ULONG addr=0,addrorg; static USHORT segment; char temp[8]; LPSTR pSymbolName; ENTER_FUNC(); if(pArgs->Count==2) { segment=(USHORT)pArgs->Value[0]; if(!segment)segment = pFrame->ds; addr=pArgs->Value[1]; OldSelector = segment; OldOffset = addr; addrorg=addr; addr=GetLinearAddress(segment,addr); } else if(pArgs->Count==1) { segment=pFrame->ds; addr=pArgs->Value[0]; OldOffset = addr; addrorg=addr; addr=GetLinearAddress(segment,addr); } else if(pArgs->Count==0) { addr += sizeof(ULONG)*4*4; OldOffset = addr; }#ifdef ACTIVATE_SYMBOL_LOOKUP if(FindSymbolByAddress(&pSymbolName,addr)) { PICE_sprintf(tempCmd," %s ",pSymbolName); SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutChar(tempCmd,GLOBAL_SCREEN_WIDTH-1-PICE_strlen(tempCmd),wWindow[DATA_WINDOW].y-1); ResetColor(); }#endif // ACTIVATE_SYMBOL_LOOKUP DisableScroll(DATA_WINDOW); if(DisplayMemory != DisplayMemoryDword) { Clear(DATA_WINDOW); DisplayMemory = DisplayMemoryDword; } else Home(DATA_WINDOW); for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines { PICE_sprintf(tempCmd,"%.4X:%.8X: ",segment,addrorg+k*16); Print(1,tempCmd); for(i=0;i<4;i++) // 4 dwords { tempCmd[0]=0; Print(1," "); for(j=0;j<4;j++) // 1 dword = 4 bytes { if(IsAddressValid(addr+i*4+j+k*16)) { PICE_sprintf(temp,"%.2x",*(PUCHAR)(addr+i*4+j+k*16)); PICE_strrev(temp); PICE_strcat(tempCmd,temp); } else { PICE_strcat(tempCmd,"??"); } } PICE_strrev(tempCmd); Print(1,tempCmd); } Print(1," "); tempCmd[0]=0; for(j=0;j<16;j++) // 1 dword = 4 bytes { wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17; if(IsAddressValid(addr+j+k*16)) { PICE_sprintf(temp,"%c",PICE_isprint(*(PUCHAR)(addr+j+k*16))?(*(PUCHAR)(addr+j+k*16)):'.'); PICE_strcat(tempCmd,temp); } else { PICE_strcat(tempCmd,"?"); } } Print(1,tempCmd); Print(1,"\n"); } EnableScroll(DATA_WINDOW); addr+=16*4; LEAVE_FUNC(); return TRUE;}//*************************************************************************// DisplayMemoryByte()////*************************************************************************COMMAND_PROTOTYPE(DisplayMemoryByte){ ULONG j,k; static ULONG addr=0,addrorg; static USHORT segment; char temp[8]; LPSTR pSymbolName; ENTER_FUNC(); if(pArgs->Count==2) { segment=(USHORT)pArgs->Value[0]; if(!segment)segment = pFrame->ds; addr=pArgs->Value[1]; OldSelector = segment; OldOffset = addr; addrorg=addr; addr=GetLinearAddress(segment,addr); } else if(pArgs->Count==1) { segment=pFrame->ds; addr=pArgs->Value[0]; OldOffset = addr; addrorg=addr; addr=GetLinearAddress(segment,addr); } else if(pArgs->Count==0) { addr += sizeof(ULONG)*4*4; OldOffset = addr; } if(DisplayMemory != DisplayMemoryByte) { Clear(DATA_WINDOW); DisplayMemory = DisplayMemoryByte; } else Home(DATA_WINDOW);#ifdef ACTIVATE_SYMBOL_LOOKUP if(FindSymbolByAddress(&pSymbolName,addr)) { PICE_sprintf(tempCmd," %s ",pSymbolName); SetForegroundColor(COLOR_TEXT); SetBackgroundColor(COLOR_CAPTION); PutChar(tempCmd,GLOBAL_SCREEN_WIDTH-1-PICE_strlen(tempCmd),wWindow[DATA_WINDOW].y-1); ResetColor(); }#endif // ACTIVATE_SYMBOL_LOOKUP DisableScroll(DATA_WINDOW); for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines { PICE_sprintf(tempCmd,"%.4X:%.8X: ",segment,addrorg+k*16); Print(1,tempCmd); tempCmd[0]=0; Print(1," "); for(j=0;j<16;j++) // 1 dword = 4 bytes { if(IsAddressValid(addr+j+k*16)) { PICE_sprintf(temp,"%.2x ",*(PUCHAR)(addr+j+k*16)); PICE_strcat(tempCmd,temp); } else { PICE_strcat(tempCmd,"?? "); } } Print(1,tempCmd); Print(1," "); tempCmd[0]=0; for(j=0;j<16;j++) // 1 dword = 4 bytes { wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17; if(IsAddressValid(addr+j+k*16)) { PICE_sprintf(temp,"%c",PICE_isprint(*(PUCHAR)(addr+j+k*16))?(*(PUCHAR)(addr+j+k*16)):'.'); PICE_strcat(tempCmd,temp); } else { PICE_strcat(tempCmd,"?"); } } Print(1,tempCmd); Print(1,"\n"); } EnableScroll(DATA_WINDOW); addr+=16*4; LEAVE_FUNC(); return TRUE;}//*************************************************************************// DisplayPhysMemDword()////*************************************************************************COMMAND_PROTOTYPE(DisplayPhysMemDword){ ULONG i,j,k; static ULONG addr=0,addrorg; static USHORT segment; char temp[8]; ENTER_FUNC(); if(pArgs->Count==1) { segment=pFrame->ds; addr=pArgs->Value[0]; OldOffset = addr; addrorg=addr; addr=GetLinearAddress(segment,addr); } else if(pArgs->Count==0) { addr += sizeof(ULONG)*4*4; OldOffset = addr; } DisableScroll(DATA_WINDOW); if(DisplayMemory != DisplayPhysMemDword) { Clear(DATA_WINDOW); DisplayMemory = DisplayPhysMemDword; } else Home(DATA_WINDOW); for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines { PICE_sprintf(tempCmd,"PHYS:%.8X: ",addrorg+k*16); Print(1,tempCmd); for(i=0;i<4;i++) // 4 dwords { tempCmd[0]=0; PICE_sprintf(tempCmd," %.8X",ReadPhysMem(addr+i*4+k*16,sizeof(ULONG))); Print(1,tempCmd); } Print(1," "); tempCmd[0]=0; for(j=0;j<16;j++) // 1 dword = 4 bytes { UCHAR ucData; wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17; ucData = ReadPhysMem(addr+j+k*16,sizeof(UCHAR)); PICE_sprintf(temp,"%c",PICE_isprint(ucData)?ucData:'.'); PICE_strcat(tempCmd,temp); } Print(1,tempCmd); Print(1,"\n"); } EnableScroll(DATA_WINDOW); addr+=16*4; return TRUE;}//*************************************************************************// DisplaySourceFile()////*************************************************************************void DisplaySourceFile(LPSTR pSrcLine,LPSTR pSrcEnd,ULONG ulLineNumber,ULONG ulLineNumberToInvert){ ULONG i; LPSTR pTemp; ULONG j = ulLineNumber-1; DPRINT(PICE_DEBUG, DBT_PARSE, DBL_INFO, "DisplaySourceFile(%p, %u, %u)\n", pSrcLine, ulLineNumber, ulLineNumberToInvert); // go to line while(j--) { // goto end of current line while(*pSrcLine!=0x0a && *pSrcLine!=0x0d) pSrcLine++; // skip over the line end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -