windows程序员进阶系列:《软件调试》之五windows操作系统概要

          

          windows程序员进阶系列:《软件调试》之Windows操作系统概要

 

 

     操作系统是计算机系统中的基本软件。它负责管理系统中的软硬件资源。通常都包括文件管理、内存管理、进程管理、打印管理、 络管理等基本功能。除此之外,支持调试也是操作系统设计的一项根本任务。

 

     从被调试对象的角度来看,可以把操作系统的调试支持分为以下三个方面:

 

     一:对应用程序的调试。即如何简单高效的调试运行在系统中的应用程序。

     二:对设备驱动程序的调试。

     三:对操作系统自身调试的支持。

 

 

 

     Windows是个典型的多任务操作系统,它允许有多个进程在系统中同时运行。

     进程是资源分配和保护的基本单位。每个进程都有自己的虚拟地址空间。这保证了每个进程相互隔离互不干扰。

 

 

     除了地址空间之外每个进程还包括:

       

     一:一个全局唯一的进程ID 

     二一个可执行映像(可执行文件)。

     三:一个或多个线程。

 

     四:一个位于内核空间中的名为_EPROCESS数据结构。用以记录该进程的关键信息,包括进程创建时间、映像文件名称等。

 

     五:一个位于内核空间的句柄表。用以记录和索引该进程所创建的或打开的内核对象。句柄只是句柄表的索引,操作系统根据句柄表来得到指向内核对象的指针。

 

   六:一个用于描述内存页目录表起始位置的基地址。简称页目录基地址。当cpu切换任务时会将该地址加载到CR3寄存器中。

 

   七:一个位于用户空间中的环境块(Process Environment block)PEB

 

   八:一个访问权限令牌。用以表示该进程的用户 、安全组以及优先级别。

 

 

为了更好的理解以上列出的每个项目。我们可以结合Windbg使用dt命令来观察_EPROCESS的每个字段。

 

windbg中可以输入命令:dt _EPROCESS。该命令会显示_EPROCESS结构的各个字段。如果你通过其他方法,如!process 0 0 可得到了某个进程的_ERPCESS结构的地址,你可以为上面的命令加上_EPROCESS结构地址。如输入dt _EPROCESS  EPROCESS结构地址。该命令会在显示_EPROCESS结构的同时,显示该地址处各个字段的取值。

 

 

以下为_EPROCESS结构:

 


  1. typedef struct _EPROCESS {
  2. KPROCESS Pcb;
  3. NTSTATUS ExitStatus;
  4. KEVENT LockEvent;
  5. ULONG LockCount;
  6. LARGE_INTEGER CreateTime;
  7. LARGE_INTEGER ExitTime;
  8. PKTHREAD LockOwner;
  9. HANDLE UniqueProcessId;
  10. LIST_ENTRY ActiveProcessLinks;
  11. SIZE_T QuotaPeakPoolUsage[2];
  12. SIZE_T QuotaPoolUsage[2];
  13. SIZE_T PagefileUsage;
  14. SIZE_T CommitCharge;
  15. SIZE_T PeakPagefileUsage;
  16. SIZE_T PeakVirtualSize;
  17. SIZE_T VirtualSize;
  18. MMSUPPORT Vm;
  19. LIST_ENTRY SessionProcessLinks;
  20. PVOID DebugPort;
  21. PVOID ExceptionPort;
  22. PHANDLE_TABLE ObjectTable;
  23. PACCESS_TOKEN Token;
  24. FAST_MUTEX WorkingSetLock;
  25. PFN_NUMBER WorkingSetPage;
  26. BOOLEAN ProcessOutswapEnabled;
  27. BOOLEAN ProcessOutswapped;
  28. UCHAR AddressSpaceInitialized;
  29. BOOLEAN AddressSpaceDeleted;
  30. FAST_MUTEX AddressCreationLock;
  31. KSPIN_LOCK HyperSpaceLock;
  32. struct _ETHREAD *ForkInProgress;
  33. USHORT VmOperation;
  34. UCHAR ForkWasSuccessful;
  35. UCHAR MmAgressiveWsTrimMask;
  36. PKEVENT VmOperationEvent;
  37. PVOID PaeTop;
  38. ULONG LastFaultCount;
  39. ULONG ModifiedPageCount;
  40. PVOID VadRoot;
  41. PVOID VadHint;
  42. PVOID CloneRoot;
  43. PFN_NUMBER NumberOfPrivatePages;
  44. PFN_NUMBER NumberOfLockedPages;
  45. USHORT NextPageColor;
  46. BOOLEAN ExitProcessCalled;
  47. BOOLEAN CreateProcessReported;
  48. HANDLE SectionHandle;
  49. PPEB Peb;
  50. PVOID SectionBaseAddress;
  51. PEPROCESS_QUOTA_BLOCK QuotaBlock;
  52. NTSTATUS LastThreadExitStatus;
  53. PPAGEFAULT_HISTORY WorkingSetWatch;
  54. HANDLE Win32WindowStation;
  55. HANDLE InheritedFromUniqueProcessId;
  56. ACCESS_MASK GrantedAccess;
  57. ULONG DefaultHardErrorProcessing;
  58. PVOID LdtInformation;
  59. PVOID VadFreeHint;
  60. PVOID VdmObjects;
  61. PVOID DeviceMap;
  62. ULONG SessionId;
  63. LIST_ENTRY PhysicalVadList;
  64. union {
  65. HARDWARE_PTE PageDirectoryPte;
  66. ULONGLONG Filler;
  67. };
  68. ULONG PaePageDirectoryPage;
  69. UCHAR ImageFileName[ 16 ];
  70. ULONG VmTrimFaultValue;
  71. BOOLEAN SetTimerResolution;
  72. UCHAR PriorityClass;
  73. union {
  74. struct {
  75. UCHAR SubSystemMinorVersion;
  76. UCHAR SubSystemMajorVersion;
  77. };
  78. USHORT SubSystemVersion;
  79. };
  80. PVOID Win32Process;
  81. struct _EJOB *Job;
  82. ULONG JobStatus;
  83. LIST_ENTRY JobLinks;
  84. PVOID LockedPagesList;
  85. PVOID SecurityPort ;
  86. PWOW64_PROCESS Wow64Process;
  87. LARGE_INTEGER ReadOperationCount;
  88. LARGE_INTEGER WriteOperationCount;
  89. LARGE_INTEGER OtherOperationCount;
  90. LARGE_INTEGER ReadTransferCount;
  91. LARGE_INTEGER WriteTransferCount;
  92. LARGE_INTEGER

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2013年2月11日
下一篇 2013年2月11日

相关推荐