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

上传人:b****3 文档编号:3806621 上传时间:2022-11-25 格式:DOCX 页数:20 大小:418.57KB
下载 相关 举报
windows程序员进阶系列《软件调试》之五windows操作系统概要.docx_第1页
第1页 / 共20页
windows程序员进阶系列《软件调试》之五windows操作系统概要.docx_第2页
第2页 / 共20页
windows程序员进阶系列《软件调试》之五windows操作系统概要.docx_第3页
第3页 / 共20页
windows程序员进阶系列《软件调试》之五windows操作系统概要.docx_第4页
第4页 / 共20页
windows程序员进阶系列《软件调试》之五windows操作系统概要.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

《windows程序员进阶系列《软件调试》之五windows操作系统概要.docx》由会员分享,可在线阅读,更多相关《windows程序员进阶系列《软件调试》之五windows操作系统概要.docx(20页珍藏版)》请在冰豆网上搜索。

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

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

windows程序员进阶系列:

《软件调试》之五windows操作系统概要

windows程序员进阶系列:

《软件调试》之五:

Windows操作系统概要

操作系统是计算机系统中的基本软件。

它负责管理系统中的软硬件资源。

通常都包括文件管理、内存管理、进程管理、打印管理、网络管理等基本功能。

除此之外,支持调试也是操作系统设计的一项根本任务。

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

一:

对应用程序的调试。

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

二:

对设备驱动程序的调试。

三:

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

本文我们会介绍Windows操作系统的架构及核心组件,加深大家对Windows系统的理解。

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

进程是资源分配和保护的基本单位。

每个进程都有自己的虚拟地址空间。

这保证了每个进程相互隔离互不干扰。

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

一:

一个全局唯一的进程ID。

二:

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

三:

一个或多个线程。

四:

一个位于内核空间中的名为_EPROCESS数据结构。

用以记录该进程的关键信息,包括进程创建时间、映像文件名称等。

五:

一个位于内核空间的句柄表。

用以记录和索引该进程所创建的或打开的内核对象。

句柄只是句柄表的索引,操作系统根据句柄表来得到指向内核对象的指针。

六:

一个用于描述内存页目录表起始位置的基地址。

简称页目录基地址。

当cpu切换任务时会将该地址加载到CR3寄存器中。

七:

一个位于用户空间中的环境块(ProcessEnvironmentblock)PEB。

八:

一个访问权限令牌。

用以表示该进程的用户、安全组以及优先级别。

为了更好的理解以上列出的每个项目。

我们可以结合Windbg使用dt命令来观察_EPROCESS的每个字段。

在windbg中可以输入命令:

dt_EPROCESS。

该命令会显示_EPROCESS结构的各个字段。

如果你通过其他方法,如!

process00可得到了某个进程的_ERPCESS结构的地址,你可以为上面的命令加上_EPROCESS结构地址。

如输入dt_EPROCESSEPROCESS结构地址。

该命令会在显示_EPROCESS结构的同时,显示该地址处各个字段的取值。

以下为_EPROCESS结构:

[cpp]viewplaincopyprint?

1.typedefstruct_EPROCESS{

2.KPROCESSPcb;

3.NTSTATUSExitStatus;

4.KEVENTLockEvent;

5.ULONGLockCount;

6.LARGE_INTEGERCreateTime;

7.LARGE_INTEGERExitTime;

8.PKTHREADLockOwner;

9.HANDLEUniqueProcessId;

10.LIST_ENTRYActiveProcessLinks;

11.SIZE_TQuotaPeakPoolUsage[2];

12.SIZE_TQuotaPoolUsage[2];

13.SIZE_TPagefileUsage;

14.SIZE_TCommitCharge;

15.SIZE_TPeakPagefileUsage;

16.SIZE_TPeakVirtualSize;

17.SIZE_TVirtualSize;

18.MMSUPPORTVm;

19.LIST_ENTRYSessionProcessLinks;

20.PVOIDDebugPort;

21.PVOIDExceptionPort;

22.PHANDLE_TABLEObjectTable;

23.PACCESS_TOKENToken;

24.

25.FAST_MUTEXWorkingSetLock;

26.PFN_NUMBERWorkingSetPage;

27.BOOLEANProcessOutswapEnabled;

28.BOOLEANProcessOutswapped;

29.UCHARAddressSpaceInitialized;

30.BOOLEANAddressSpaceDeleted;

31.FAST_MUTEXAddressCreationLock;

32.KSPIN_LOCKHyperSpaceLock;

33.struct_ETHREAD*ForkInProgress;

34.USHORTVmOperation;

35.UCHARForkWasSuccessful;

36.UCHARMmAgressiveWsTrimMask;

37.PKEVENTVmOperationEvent;

38.PVOIDPaeTop;

39.ULONGLastFaultCount;

40.ULONGModifiedPageCount;

41.PVOIDVadRoot;

42.PVOIDVadHint;

43.PVOIDCloneRoot;

44.PFN_NUMBERNumberOfPrivatePages;

45.PFN_NUMBERNumberOfLockedPages;

46.USHORTNextPageColor;

47.BOOLEANExitProcessCalled;

48.BOOLEANCreateProcessReported;

49.HANDLESectionHandle;

50.PPEBPeb;

51.PVOIDSectionBaseAddress;

52.PEPROCESS_QUOTA_BLOCKQuotaBlock;

53.NTSTATUSLastThreadExitStatus;

54.PPAGEFAULT_HISTORYWorkingSetWatch;

55.HANDLEWin32WindowStation;

56.HANDLEInheritedFromUniqueProcessId;

57.ACCESS_MASKGrantedAccess;

58.ULONGDefaultHardErrorProcessing;

59.PVOIDLdtInformation;

60.PVOIDVadFreeHint;

61.PVOIDVdmObjects;

62.PVOIDDeviceMap;

63.ULONGSessionId;

64.LIST_ENTRYPhysicalVadList;

65.union{

66.HARDWARE_PTEPageDirectoryPte;

67.ULONGLONGFiller;

68.};

69.ULONGPaePageDirectoryPage;

70.UCHARImageFileName[16];

71.ULONGVmTrimFaultValue;

72.BOOLEANSetTimerResolution;

73.UCHARPriorityClass;

74.union{

75.struct{

76.UCHARSubSystemMinorVersion;

77.UCHARSubSystemMajorVersion;

78.};

79.USHORTSubSystemVersion;

80.};

81.PVOIDWin32Process;

82.struct_EJOB*Job;

83.ULONGJobStatus;

84.LIST_ENTRYJobLinks;

85.PVOIDLockedPagesList;

86.PVOIDSecurityPort;

87.PWOW64_PROCESSWow64Process;

88.LARGE_INTEGERReadOperationCount;

89.LARGE_INTEGERWriteOperationCount;

90.LARGE_INTEGEROtherOperationCount;

91.LARGE_INTEGERReadTransferCount;

92.LARGE_INTEGERWriteTransferCount;

93.LARGE_INTEGEROtherTransferCount;

94.SIZE_TCommitChargeLimit;

95.SIZE_TCommitChargePeak;

96.LIST_ENTRYThreadListHead;

97.PRTL_BITMAPVadPhysicalPagesBitMap;

98.ULONG_PTRVadPhysicalPages;

99.KSPIN_LOCKAweLock;

100.}EPROCESS;

typedefstruct_EPROCESS{

KPROCESSPcb;

NTSTATUSExitStatus;

KEVENTLockEvent;

ULONGLockCount;

LARGE_INTEGERCreateTime;

LARGE_INTEGERExitTime;

PKTHREADLockOwner;

HANDLEUniqueProcessId;

LIST_ENTRYActiveProcessLinks;

SIZE_TQuotaPeakPoolUsage[2];

SIZE_TQuotaPoolUsage[2];

SIZE_TPagefileUsage;

SIZE_TCommitCharge;

SIZE_TPeakPagefileUsage;

SIZE_TPeakVirtualSize;

SIZE_TVirtualSize;

MMSUPPORTVm;

LIST_ENTRYSessionProcessLinks;

PVOIDDebugPort;

PVOIDExceptionPort;

PHANDLE_TABLEObjectTable;

PACCESS_TOKENToken;

FAST_MUTEXWorkingSetLock;

PFN_NUMBERWorkingSetPage;

BOOLEANProcessOutswapEnabled;

BOOLEANProcessOutswapped;

UCHARAddressSpaceInitialized;

BOOLEANAddressSpaceDeleted;

FAST_MUTEXAddressCreationLock;

KSPIN_LOCKHyperSpaceLock;

struct_ETHREAD*ForkInProgress;

USHORTVmOperation;

UCHARForkWasSuccessful;

UCHARMmAgressiveWsTrimMask;

PKEVENTVmOperationEvent;

PVOIDPaeTop;

ULONGLastFaultCount;

ULONGModifiedPageCount;

PVOIDVadRoot;

PVOIDVadHint;

PVOIDCloneRoot;

PFN_NUMBERNumberOfPrivatePages;

PFN_NUMBERNumberOfLockedPages;

USHORTNextPageColor;

BOOLEANExitProcessCalled;

BOOLEANCreateProcessReported;

HANDLESectionHandle;

PPEBPeb;

PVOIDSectionBaseAddress;

PEPROCESS_QUOTA_BLOCKQuotaBlock;

NTSTATUSLastThreadExitStatus;

PPAGEFAULT_HISTORYWorkingSetWatch;

HANDLEWin32WindowStation;

HANDLEInheritedFromUniqueProcessId;

ACCESS_MASKGrantedAccess;

ULONGDefaultHardErrorProcessing;

PVOIDLdtInformation;

PVOIDVadFreeHint;

PVOIDVdmObjects;

PVOIDDeviceMap;

ULONGSessionId;

LIST_ENTRYPhysicalVadList;

union{

HARDWARE_PTEPageDirectoryPte;

ULONGLONGFiller;

};

ULONGPaePageDirectoryPage;

UCHARImageFileName[16];

ULONGVmTrimFaultValue;

BOOLEANSetTimerResolution;

UCHARPriorityClass;

union{

struct{

UCHARSubSystemMinorVersion;

UCHARSubSystemMajorVersion;

};

USHORTSubSystemVersion;

};

PVOIDWin32Process;

struct_EJOB*Job;

ULONGJobStatus;

LIST_ENTRYJobLinks;

PVOIDLockedPagesList;

PVOIDSecurityPort;

PWOW64_PROCESSWow64Process;

LARGE_INTEGERReadOperationCount;

LARGE_INTEGERWriteOperationCount;

LARGE_INTEGEROtherOperationCount;

LARGE_INTEGERReadTransferCount;

LARGE_INTEGERWriteTransferCount;

LARGE_INTEGEROtherTransferCount;

SIZE_TCommitChargeLimit;

SIZE_TCommitChargePeak;

LIST_ENTRYThreadListHead;

PRTL_BITMAPVadPhysicalPagesBitMap;

ULONG_PTRVadPhysicalPages;

KSPIN_LOCKAweLock;

}EPROCESS;

从上面可以看到_EPROCESS结构几乎包括了进程的所有关键信息和重要资产。

如预调试密切相关的DebugPort和ExceptionPort字段。

我们将在后面逐步介绍其中的重要字段。

访问令牌

_EPROCESS的token字段记录着这个进程的TOCKEN结构的地址,进程的很多余安全有关的信息都保存在这个结构中。

本文不再介绍。

PEB

PEB是进程环境块的缩写。

它包含进程大多数的用户态信息。

但是它由内核创建之后,映射到用户空间中的。

同上面介绍的一样,同样可以使用dt_PEB来显示_PEB结构的各个字段。

也可以指定_PEB的地址,显示各个字段的取值。

除了使用此种方法外还可以使用扩展命令:

!

pebxxxx来观察进程环境块。

xxxx为PEB结构地址。

PEB结构如下:

[cpp]viewplaincopyprint?

1.typedefstruct_PEB{//Size:

0x1D8

2./*000*/UCHARInheritedAddressSpace;

3./*001*/UCHARReadImageFileExecOptions;

4./*002*/UCHARBeingDebugged;

5./*003*/UCHARSpareBool;//Allocationsize

6./*004*/HANDLEMutant;

7./*008*/HINSTANCEImageBaseAddress;//Instance

8./*00C*/VOID*DllList;

9./*010*/PPROCESS_PARAMETERS*ProcessParameters;

10./*014*/ULONGSubSystemData;

11./*018*/HANDLEDefaultHeap;

12./*01C*/KSPIN_LOCKFastPebLock;

13./*020*/ULONGFastPebLockRoutine;

14./*024*/ULONGFastPebUnlockRoutine;

15./*028*/ULONGEnvironmentUpdateCount;

16./*02C*/ULONGKernelCallbackTable;

17./*030*/LARGE_INTEGERSystemReserved;

18./*038*/ULONGFreeList;

19./*03C*/ULONGTlsExpansionCounter;

20./*040*/ULONGTlsBitmap;

21./*044*/LARGE_INTEGERTlsBitmapBits;

22./*04C*/ULONGReadOnlySharedMemoryBase;

23./*050*/ULONGReadOnlySharedMemoryHeap;

24./*054*/ULONGReadOnlyStaticServerData;

25./*058*/ULONGAnsiCodePageData;

26./*05C*/ULONGOemCodePageData;

27./*060*/ULONGUnicodeCaseTableData;

28./*064*/ULONGNumberOfProcessors;

29./*068*/LARGE_INTEGERNtGlobalFlag;//Addressofalocalcopy

30./*070*/LARGE_INTEGERCriticalSectionTimeout;

31./*078*/ULONGHeapSegmentReserve;

32./*07C*/ULONGHeapSegmentCommit;

33./*080*/ULONGHeapDeCommitTotalFreeThreshold;

34./*084*/ULONGHeapDeCommitFreeBlockThreshold;

35./*088*/ULONGNumberOfHeaps;

36./*08C*/ULONGMaximumNumberOfHeaps;

37./*090*/ULONGProcessHeaps;

38./*094*/ULONGGdiSharedHandleTable;

39./*098*/ULONGProcessStarterHelper;

40./*09C*/ULONGGdiDCAttributeList;

41./*0A0*/KSPIN_LOCKLoaderLock;

42./*0A4*/ULONGOSMajorVersion;

43./*0A8*/ULONGOSMinorVersion;

44./*0AC*/USHORTOSBuildNumber;

45./*0AE*/USHORTOSCSDVersion;

46./*0B0*/ULONGOSPlatformId;

47./*0B4*/ULONGImageSubsystem;

48./*0B8*/ULONGImageSubsystemMajorVersion;

49./*0BC*/ULONGImageSubsystemMinorVersion;

50./*0C0*/ULONGImageProcessAffinityMask;

51./*0C4*/ULONGGdiHandleBuffer[0x22];

52./*14C*/ULONGPostProcessInitRoutine;

53./*150*/ULONGTlsExpansionBitmap;

54./*154*/UCHARTlsExpansionBitmapBits[0x80];

55./*1D4*/ULONGSessionId;

56.}PEB,*PPEB;

typedefstruct_PEB{//Size:

0x1D8

/*000*/UCHARInheritedAddressSpace;

/*001*/UCHARReadImageFileExecOptions;

/*002*/UCHARBeingDebugged;

/*003*/UCHARSpareBool;//Allocationsize

/*004*/HANDLEMutant;

/*008*/HINSTANCEImageBaseAddress;//Instance

/*00C*/VOID*DllList;

/*010*/PPROCESS_PARAMETERS*ProcessParameters;

/*014*/ULONGSubSystemData;

/*018*/HANDLEDefaultHeap;

/*01C*/KSPIN_LOCKFastPebLock;

/*020*/ULONGFastPebLockRoutine;

/*024*/ULONGFastPebUnlockRoutine;

/*028*/ULONGEnvironmentUpdateCount;

/*02C*/ULONGKernelCallbackTable;

/*030*/LARGE_INTEGERSystemReserved;

/*038*/ULONGFreeList;

/*03C*/ULONGTlsExpansionCounter;

/*040*/ULONGTlsBitmap;

/*044*/LARGE_INTEGER

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1