原文发表于百度空间,2008-7-23
==========================================================================
学内核从基本数据结构开始吧,就像学C语言时从学习int,char开始一样.
只列出目前见到和用到的,其它后面再补充~ 常用数据结构:数字:
lkd> dt _ULARGE_INTEGERntdll!_ULARGE_INTEGER +0x000 LowPart : Uint4B +0x004 HighPart : Uint4B +0x000 u : __unnamed +0x000 QuadPart : Uint8Blkd> dt _LARGE_INTEGER
ntdll!_LARGE_INTEGER +0x000 LowPart : Uint4B +0x004 HighPart : Int4B +0x000 u : __unnamed +0x000 QuadPart : Int8B字符串:
lkd> dt _STRINGnt!_STRING +0x000 Length : Uint2B +0x002 MaximumLength : Uint2B +0x004 Buffer : Ptr32 Charlkd> dt _UNICODE_STRINGntdll!_UNICODE_STRING +0x000 Length : Uint2B +0x002 MaximumLength : Uint2B +0x004 Buffer : Ptr32 Uint2B单链表头(看来数据结构要学好啊)::
lkd> dt _SLIST_HEADERntdll!_SLIST_HEADER +0x000 Alignment : Uint8B +0x000 Next : _SINGLE_LIST_ENTRY +0x004 Depth : Uint2B +0x006 Sequence : Uint2B链表结点:
lkd> dt _KNODEntdll!_KNODE +0x000 ProcessorMask : Uint4B +0x004 Color : Uint4B +0x008 MmShiftedColor : Uint4B +0x00c FreeCount : [2] Uint4B +0x018 DeadStackList : _SLIST_HEADER //链表头 +0x020 PfnDereferenceSListHead : _SLIST_HEADER +0x028 PfnDeferredList : Ptr32 _SINGLE_LIST_ENTRY +0x02c Seed : UChar +0x02d Flags : _flags单链表的指针:
lkd> dt _SINGLE_LIST_ENTRYntdll!_SINGLE_LIST_ENTRY +0x000 Next : Ptr32 _SINGLE_LIST_ENTRY双向链表指针:
lkd> dt _LIST_ENTRYntdll!_LIST_ENTRY +0x000 Flink : Ptr32 _LIST_ENTRY +0x004 Blink : Ptr32 _LIST_ENTRY内核队列:
lkd> dt _KQUEUEntdll!_KQUEUE +0x000 Header : _DISPATCHER_HEADER +0x010 EntryListHead : _LIST_ENTRY +0x018 CurrentCount : Uint4B +0x01c MaximumCount : Uint4B +0x020 ThreadListHead : _LIST_ENTRY
一个很多地方用到的头部结构:
lkd> dt _DISPATCHER_HEADERntdll!_DISPATCHER_HEADER +0x000 Type : UChar +0x001 Absolute : UChar +0x002 Size : UChar +0x003 Inserted : UChar +0x004 SignalState : Int4B +0x008 WaitListHead : _LIST_ENTRY