?? utils.h
字號:
/****************************************************************************** * * Copyright (c) 2003 Gerhard W. Gruber * * PROJECT: pICE * $Source: /cvsroot/pice/pice/module/utils.h,v $ * $Revision: 1.5 $ * $Date: 2004/02/17 23:07:37 $ * $Author: lightweave $ * $Name: $ * * $Log: utils.h,v $ * Revision 1.5 2004/02/17 23:07:37 lightweave * * Improved the DEBUG facillity and replaced the configuration handler with a * new code which now can read MS Windows INI style files. See CHANGES.txt for * more details. * Also added a macro which prevents compiling for kernels before 2.4.19. * * Revision 1.4 2003/06/18 22:00:22 lightweave * DEBUG and DEBUG_SERIAL added * *****************************************************************************//*++Copyright (c) 1998-2001 Klaus P. GerlicherModule Name: utils.hAbstract: HEADER for utils.cEnvironment: LINUX 2.2.X Kernel mode onlyAuthor: Klaus P. Gerlicher Gerhard W. GruberCopyright notice: This file may be distributed under the terms of the GNU Public License.--*/#ifndef _UTILS_H#define _UTILS_H#include "entry.h"#include "common.h"#define __STR(x) #x#define STR(x) __STR(x)#define SHOW_FIELD_BYTE(ptr,field,wait)\{\ if(wait && WaitForKey()==FALSE)\ return TRUE;\ PICE_sprintf(tempCmd, #field" = %.2x\n",ptr-> field);\ Print(OUTPUT_WINDOW,tempCmd);\}#define SHOW_FIELD_WORD(ptr,field,wait)\{\ if(wait && WaitForKey()==FALSE)\ return TRUE;\ PICE_sprintf(tempCmd, #field" = %.4x\n",ptr->field);\ Print(OUTPUT_WINDOW,tempCmd);\}#define SHOW_FIELD_DWORD(ptr,field,wait)\{\ if(wait && WaitForKey()==FALSE)\ return TRUE;\ sprintf(tempCmd, #field" = %.8x\n",ptr-> field);\ Print(OUTPUT_WINDOW,tempCmd);\}#define SHOW_FIELD_SEG_OFS(ptr,field1,field2,wait)\{\ if(wait && WaitForKey()==FALSE)\ return TRUE;\ PICE_sprintf(tempCmd, #field1 ":" #field2" = %.4x:%.8x\n",ptr-> field1,ptr-> field2);\ Print(OUTPUT_WINDOW,tempCmd);\}typedef struct _PCI_NUMBER{ union { struct { ULONG res2 : 2; ULONG reg : 6; // 64 regs per function ULONG func : 3; // 8 functions per device ULONG dev : 5; // 32 device per bus ULONG bus : 8; // 256 buses ULONG res1 : 7; ULONG ce : 1; // 1 to enable }bits; ULONG AsUlong; }u;}PCI_NUMBER;typedef struct _PCI_COMMON_CONFIG { USHORT VendorID; // (ro) USHORT DeviceID; // (ro) USHORT Command; // Device control USHORT Status; UCHAR RevisionID; // (ro) UCHAR ProgIf; // (ro) UCHAR SubClass; // (ro) UCHAR BaseClass; // (ro) UCHAR CacheLineSize; // (ro+) UCHAR LatencyTimer; // (ro+) UCHAR HeaderType; // (ro) UCHAR BIST; // Built in self test ULONG BaseAddresses[6]; ULONG CIS; USHORT SubVendorID; USHORT SubSystemID; ULONG ROMBaseAddress; UCHAR CapabilitiesPtr; UCHAR Reserved1[3]; ULONG Reserved2; UCHAR InterruptLine; // UCHAR InterruptPin; // (ro) UCHAR MinimumGrant; // (ro) UCHAR MaximumLatency; // (ro)}PCI_COMMON_CONFIG;typedef struct{ ULONG P :1; ULONG RW :1; ULONG US :1; ULONG PWT :1; ULONG PCD :1; ULONG A :1; ULONG dummy :1; ULONG PS :1; ULONG G :1; ULONG Avail :3; ULONG PTBase :20;}PAGEDIR,*PPAGEDIR;extern struct mm_struct* my_init_mm;typedef struct { ULONG Limit_15_0 :16; ULONG Base_15_0 :16; ULONG Base_23_16 :8; ULONG SegType :4; ULONG DescType :1; ULONG Dpl :2; ULONG Present :1; ULONG Limit_19_16 :4; ULONG Avl :1; ULONG Reserved :1; ULONG DefOp :1; ULONG Gran :1; ULONG Base_31_24 :8;} GDT,*PGDT;typedef struct { ULONG Offset_15_0 :16; ULONG Selector :16; ULONG Reserved :8; ULONG DescType :5; ULONG Dpl :2; ULONG Present :1; ULONG Offset_31_16 :16;} IDT,*PIDT;typedef struct{ USHORT Cpl :2; // current privilege level USHORT Ti :1; // table index (GDT=0 LDT=1) USHORT Val :13; // index into table} DESCRIPTOR,*PDESCRIPTOR;#define CF_FLAG (1<<0) // CARRY flag#define PF_FLAG (1<<2) // PARITY flag#define TF_FLAG (1<<8) // TRACE flag#define IF_FLAG (1<<9( // INTERRUPT DISABLE flag#define RF_FLAG (1<<16) // RESUME flag#define VM_FLAG (1<<17) // V86 MODE flagextern struct module *pmodule_list;void PICE_memset(void* p, unsigned char c, int sz);void PICE_memcpy(void* t, void* s,int sz);char *PICE_strrev(char *);//ULONG PICE_strcmp(char* s1, char* s2);ULONG PICE_strcmpi(char* s1, char* s2);ULONG PICE_strncmpi(char* s1, char* s2,ULONG len);USHORT PICE_strlen(char* s);char* PICE_strcat(char* s1, char* s2);BOOLEAN PICE_isprint(char c);char* PICE_strcpy(char* s1, char* s2);char* PICE_strncpy(char* s1, char* s2, int len);char* PICE_strchr(char* s, char c);char PICE_toupper(char c);char *PICE_number(char *str, long num, int base, int size, int precision, int type);int PICE_sprintf(char * buf, const char *fmt, ...);int PICE_sdprintf(const char *fmt, ...);int PICE_vsprintf(char *buf, const char *fmt, va_list args);ULONG PICE_vdprintf(const char *fmt, va_list args);#ifndef malloc#define malloc PICE_HeapAlloc#endif#ifndef realloc#define realloc PICE_HeapReAlloc#endif#ifndef free#define free PICE_HeapFree#endif#ifndef memset#define memset PICE_memset#endif#ifndef memcpy#define memcpy PICE_memcpy#endif#ifndef strrev#define strrev PICE_strrev#endif//#ifndef strcmp//#define strcmp PICE_strcmp//#endif#ifndef strcmpi#define strcmpi PICE_strcmpi#endif#ifndef stricmp#define stricmp PICE_strcmpi#endif#ifndef strncmpi#define strncmpi PICE_strncmpi#endif#ifndef strlen#define strlen PICE_strlen#endif#ifndef strcat#define strcat PICE_strcat#endif#ifndef isprint#define isprint PICE_isprint#endif#ifndef strcpy#define strcpy PICE_strcpy#endif#ifndef strncpy#define strncpy PICE_strncpy#endif#ifndef strchr#define strchr PICE_strchr#endif#ifndef sprintf#define sprintf PICE_sprintf#endif#ifndef toupper#define toupper PICE_toupper#endifBOOLEAN ReadHex(LPSTR p, PULONG pValue);BOOLEAN IsAddressValid(ULONG Addr); BOOLEAN IsAddressWriteable(ULONG Addr);BOOLEAN SetAddressWriteable(ULONG address,BOOLEAN bSet);BOOLEAN IsRangeValid(ULONG addr,ULONG Length); ULONG GetPhysicalAddress(ULONG address);void IntelStackWalk(ULONG pc,ULONG ebp,ULONG esp);struct module* IsModuleLoaded(LPSTR p);ULONG ReadPhysMem(ULONG Address,ULONG ulSize);void WritePhysMem(ULONG Address,ULONG Datum,ULONG ulSize);BOOLEAN IsRetAtEIP(EXCEPTION_FRAME *pFrame);BOOLEAN IsCallInstrAtEIP(EXCEPTION_FRAME *pFrame);BOOLEAN IsPopfdInstrAtEIP(EXCEPTION_FRAME *pFrame);ULONG GetLinearAddress(USHORT Segment,ULONG Offset); #define OUTPUT_BUFFER_FULL 0x01 #define INPUT_BUFFER_FULL 0x02 #define MOUSE_OUTPUT_BUFFER_FULL 0x20 void ShowStoppedMsg(void);void ShowRunningMsg(void);void SetHardwareBreakPoints(void); void SetHardwareBreakPoint(ULONG ulAddress,ULONG ulReg);// this should be in disasm.h but someone misused the header filesBOOLEAN Disasm(PULONG pOffset, PUCHAR pchDst);//////////////////////////////////////////////////////////////////#define OVR_CS .byte 0x2e #define OVR_FS .byte 0x64 void DisplayRegs(EXCEPTION_FRAME *pFrame);void SaveOldRegs(EXCEPTION_FRAME *pFrame);BOOLEAN CheckLoadAbort(void);UCHAR KeyboardGetKeyPolled(void);void KeyboardFlushKeyboardQueue(void);#if LINUX_VERSION_CODE >= 0x020400#define _PAGE_4M _PAGE_PSE#endifUCHAR AsciiFromScan(UCHAR s);UCHAR AsciiToScan(UCHAR s);void outportb(USHORT port,UCHAR data);UCHAR inportb(USHORT port);extern unsigned long sys_call_table[];struct mm_struct *GetInitMm(void);void EnablePassThrough(void);PIDT GetIDTPtr(void);ULONG GetIDTLimit(void);PGDT GetGDTPtr(void);void FlushCacheAndTLB(void);void GetMemoryStatus(PULONG pulFreeMem,PULONG pulAllocMem);ULONG GetEAX(EXCEPTION_FRAME* pFrame);ULONG GetEBX(EXCEPTION_FRAME* pFrame);ULONG GetECX(EXCEPTION_FRAME* pFrame);ULONG GetEDX(EXCEPTION_FRAME* pFrame);ULONG GetESI(EXCEPTION_FRAME* pFrame);ULONG GetEDI(EXCEPTION_FRAME* pFrame);ULONG GetEBP(EXCEPTION_FRAME* pFrame);ULONG GetESP(EXCEPTION_FRAME* pFrame);ULONG GetEIP(EXCEPTION_FRAME* pFrame);ULONG GetEFLAGS(EXCEPTION_FRAME* pFrame);ULONG GetCS(EXCEPTION_FRAME* pFrame);ULONG GetDS(EXCEPTION_FRAME* pFrame);ULONG GetES(EXCEPTION_FRAME* pFrame);ULONG GetFS(EXCEPTION_FRAME* pFrame);ULONG GetGS(EXCEPTION_FRAME* pFrame);ULONG GetSS(EXCEPTION_FRAME* pFrame);// pseudoULONG GetTRUE(EXCEPTION_FRAME* pFrame);ULONG GetFALSE(EXCEPTION_FRAME* pFrame);ULONG GetPROCESS(EXCEPTION_FRAME* pFrame);void SetEAX(EXCEPTION_FRAME* pFrame,ULONG value);void SetEBX(EXCEPTION_FRAME* pFrame,ULONG value);void SetECX(EXCEPTION_FRAME* pFrame,ULONG value);void SetEDX(EXCEPTION_FRAME* pFrame,ULONG value);void SetESI(EXCEPTION_FRAME* pFrame,ULONG value);void SetEDI(EXCEPTION_FRAME* pFrame,ULONG value);void SetEBP(EXCEPTION_FRAME* pFrame,ULONG value);void SetESP(EXCEPTION_FRAME* pFrame,ULONG value);void SetEIP(EXCEPTION_FRAME* pFrame,ULONG value);void SetEFLAGS(EXCEPTION_FRAME* pFrame, ULONG value);void SetCS(EXCEPTION_FRAME* pFrame,ULONG value);void SetDS(EXCEPTION_FRAME* pFrame,ULONG value);void SetES(EXCEPTION_FRAME* pFrame,ULONG value);void SetFS(EXCEPTION_FRAME* pFrame,ULONG value);void SetGS(EXCEPTION_FRAME* pFrame,ULONG value);void SetSS(EXCEPTION_FRAME* pFrame,ULONG value);// keyboard controller defines#define I8042_PHYSICAL_BASE 0x60#define I8042_DATA_REGISTER_OFFSET 0#define I8042_COMMAND_REGISTER_OFFSET 4#define I8042_STATUS_REGISTER_OFFSET 4#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -