找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4388|回复: 3

PEB TIB TEB结构展示

[复制链接]
发表于 2015-5-2 12:50:48 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
丛看雪看到这3个结构体的,fs:[0]的地址位置就是TEB  ,TIB是TEB的第一个成员,TEB的0x30处指向PEB。
这里有个问题没想明白,如何从PEB枚举所有TEB呢?
代码如下:
  1. #define EXCEPTION_MAXIMUM_PARAMETERS 15 // maximum number of exception parameters
  2. typedef unsigned int DWORD;
  3. typedef unsigned long ULONG;
  4. typedef short SHORT;
  5. typedef unsigned short WORD;
  6. typedef unsigned short USHORT;
  7. typedef void* PVOID;
  8. typedef PVOID* PPVOID;
  9. typedef unsigned char UCHAR;
  10. typedef unsigned char BYTE;
  11. typedef long LONG;
  12. typedef unsigned short WCHAR;
  13. typedef char CHAR;
  14. typedef __int64 LONGLONG;
  15. typedef unsigned __int64 ULONGLONG;
  16. typedef WCHAR *PWCHAR, *LPWCH, *PWCH;
  17. typedef CHAR *PCHAR, *LPCH, *PCH;

  18. typedef unsigned short UINT16;
  19. typedef unsigned int UINT32;
  20. typedef unsigned __int64 UINT64;
  21. typedef short INT16;
  22. typedef int INT32;
  23. typedef __int64 INT64;

  24. #if !defined(_W64)
  25. #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
  26. #define _W64 __w64
  27. #else
  28. #define _W64
  29. #endif
  30. #endif

  31. #if ( 501 < __midl )

  32. typedef[public] __int3264 INT_PTR, *PINT_PTR;
  33. typedef[public] unsigned __int3264 UINT_PTR, *PUINT_PTR;

  34. typedef[public] __int3264 LONG_PTR, *PLONG_PTR;
  35. typedef[public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;

  36. #else  // midl64
  37. // old midl and C++ compiler

  38. #if defined(_WIN64)
  39. typedef __int64 INT_PTR, *PINT_PTR;
  40. typedef unsigned __int64 UINT_PTR, *PUINT_PTR;

  41. typedef __int64 LONG_PTR, *PLONG_PTR;
  42. typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;

  43. #define __int3264   __int64

  44. #else
  45. typedef _W64 int INT_PTR, *PINT_PTR;
  46. typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

  47. typedef _W64 long LONG_PTR, *PLONG_PTR;
  48. typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;

  49. #define __int3264   __int32

  50. #endif
  51. #endif // midl64

  52. #ifdef STRICT
  53. typedef void *HANDLE;
  54. #if 0 && (_MSC_VER > 1000)
  55. #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
  56. #else
  57. #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
  58. #endif
  59. #else
  60. typedef PVOID HANDLE;
  61. #define DECLARE_HANDLE(name) typedef HANDLE name
  62. #endif
  63. typedef HANDLE *PHANDLE;

  64. #if defined(MIDL_PASS)
  65. typedef struct _LARGE_INTEGER
  66. {
  67. #else // MIDL_PASS
  68. typedef union _LARGE_INTEGER
  69. {
  70.         struct
  71.         {
  72.                 DWORD LowPart;
  73.                 LONG HighPart;
  74.         } DUMMYSTRUCTNAME;
  75.         struct
  76.         {
  77.                 DWORD LowPart;
  78.                 LONG HighPart;
  79.         } u;
  80. #endif //MIDL_PASS
  81.         LONGLONG QuadPart;
  82. } LARGE_INTEGER;

  83. #if defined(MIDL_PASS)
  84. typedef struct _ULARGE_INTEGER
  85. {
  86. #else // MIDL_PASS
  87. typedef union _ULARGE_INTEGER
  88. {
  89.         struct
  90.         {
  91.                 DWORD LowPart;
  92.                 DWORD HighPart;
  93.         } DUMMYSTRUCTNAME;
  94.         struct
  95.         {
  96.                 DWORD LowPart;
  97.                 DWORD HighPart;
  98.         } u;
  99. #endif //MIDL_PASS
  100.         ULONGLONG QuadPart;
  101. } ULARGE_INTEGER;

  102. #ifndef GUID_DEFINED
  103. #define GUID_DEFINED
  104. #if defined(__midl)
  105. typedef struct
  106. {
  107.         unsigned long  Data1;
  108.         unsigned short Data2;
  109.         unsigned short Data3;
  110.         byte           Data4[8];
  111. } GUID;
  112. #else
  113. typedef struct _GUID
  114. {
  115.         unsigned long  Data1;
  116.         unsigned short Data2;
  117.         unsigned short Data3;
  118.         unsigned char  Data4[8];
  119. } GUID;
  120. #endif
  121. #endif

  122. typedef enum _EXCEPTION_DISPOSITION
  123. {
  124.         ExceptionContinueExecution,
  125.         ExceptionContinueSearch,
  126.         ExceptionNestedException,
  127.         ExceptionCollidedUnwind
  128. } EXCEPTION_DISPOSITION, *PEXCEPTION_DISPOSITION;

  129. typedef struct _EXCEPTION_RECORD
  130. {
  131.         DWORD ExceptionCode;
  132.         DWORD ExceptionFlags;
  133.         struct _EXCEPTION_RECORD *ExceptionRecord;
  134.         PVOID ExceptionAddress;
  135.         DWORD NumberParameters;
  136.         ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
  137. } EXCEPTION_RECORD, *PEXCEPTION_RECORD;

  138. typedef EXCEPTION_DISPOSITION __stdcall EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD *ExceptionRecord,
  139.         PVOID EstablisherFrame, struct _CONTEXT *ContextRecord, PVOID DispatcherContext);

  140. typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;

  141. typedef struct _EXCEPTION_REGISTRATION_RECORD
  142. {
  143.         struct _EXCEPTION_REGISTRATION_RECORD *Next;
  144.         PEXCEPTION_ROUTINE Handler;
  145. } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;

  146. typedef struct _NT_TIB
  147. {
  148.         struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
  149.         PVOID StackBase;
  150.         PVOID StackLimit;
  151.         PVOID SubSystemTib;
  152. #if defined(_MSC_EXTENSIONS)
  153.         union
  154.         {
  155.                 PVOID FiberData;
  156.                 DWORD Version;
  157.         };
  158. #else
  159.         PVOID FiberData;
  160. #endif
  161.         PVOID ArbitraryUserPointer;
  162.         struct _NT_TIB *Self;
  163. } NT_TIB, *PNT_TIB;

  164. typedef struct _CLIENT_ID
  165. {
  166.         HANDLE UniqueProcess;
  167.         HANDLE UniqueThread;
  168. } CLIENT_ID, *PCLIENT_ID;

  169. typedef struct _LIST_ENTRY
  170. {
  171.         struct _LIST_ENTRY *Flink;
  172.         struct _LIST_ENTRY *Blink;
  173. } LIST_ENTRY, *PLIST_ENTRY, *PRLIST_ENTRY;

  174. typedef struct _UNICODE_STRING
  175. {
  176.         USHORT Length;
  177.         USHORT MaximumLength;
  178. #ifdef MIDL_PASS
  179.         [size_is(MaximumLength / 2), length_is((Length) / 2)] USHORT * Buffer;
  180. #else // MIDL_PASS
  181.         PWCH   Buffer;
  182. #endif // MIDL_PASS
  183. } UNICODE_STRING;
  184. typedef UNICODE_STRING *PUNICODE_STRING;
  185. typedef const UNICODE_STRING *PCUNICODE_STRING;

  186. typedef struct _RTL_CRITICAL_SECTION_DEBUG
  187. {
  188.         WORD   Type;
  189.         WORD   CreatorBackTraceIndex;
  190.         struct _RTL_CRITICAL_SECTION *CriticalSection;
  191.         LIST_ENTRY ProcessLocksList;
  192.         DWORD EntryCount;
  193.         DWORD ContentionCount;
  194.         DWORD Flags;
  195.         WORD   CreatorBackTraceIndexHigh;
  196.         WORD   SpareWORD;
  197. } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;

  198. #pragma pack(push, 8)
  199. typedef struct _RTL_CRITICAL_SECTION
  200. {
  201.         PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
  202.         LONG LockCount;
  203.         LONG RecursionCount;
  204.         HANDLE OwningThread;        // from the thread's ClientId->UniqueThread
  205.         HANDLE LockSemaphore;
  206.         ULONG_PTR SpinCount;        // force size on 64-bit systems when packed
  207. } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
  208. #pragma pack(pop)

  209. typedef struct _PEB_LDR_DATA
  210. {
  211.         UINT32 Length;
  212.         UCHAR Initialized;
  213.         PVOID SsHandle;
  214.         _LIST_ENTRY InLoadOrderModuleList;
  215.         _LIST_ENTRY InMemoryOrderModuleList;
  216.         _LIST_ENTRY InInitializationOrderModuleList;
  217.         PVOID EntryInProgress;
  218.         UCHAR ShutdownInProgress;
  219.         PVOID ShutdownThreadId;
  220. }PEB_LDR_DATA, *PPEB_LDR_DATA;

  221. typedef struct _LDR_MODULE
  222. {
  223.         LIST_ENTRY        InLoadOrderModuleList;            // +0x000
  224.         LIST_ENTRY        InMemoryOrderModuleList;          // +0x008
  225.         LIST_ENTRY        InInitializationOrderModuleList;  // +0x010
  226.         PVOID             BaseAddress;                      // +0x018
  227.         PVOID             EntryPoint;                       // +0x01C
  228.         ULONG             SizeOfImage;                      // +0x020
  229.         UNICODE_STRING    FullDllName;                      // +0x024
  230.         UNICODE_STRING    BaseDllName;                      // +0x02C
  231.         ULONG             Flags;                            // +0x034
  232.         SHORT             LoadCount;                        // +0x038
  233.         SHORT             TlsIndex;                         // +0x03A
  234.         LIST_ENTRY        HashTableEntry;                   // +0x03C
  235.         ULONG             TimeDateStamp;                    // +0x044
  236.         // +0x048
  237. } LDR_MODULE, *PLDR_MODULE;

  238. typedef struct _CURDIR
  239. {
  240.         _UNICODE_STRING DosPath;
  241.         PVOID Handle;
  242. }CURDIR, *PCURDIR;

  243. typedef struct _STRING
  244. {
  245.         USHORT Length;
  246.         USHORT MaximumLength;
  247. #ifdef MIDL_PASS
  248.         [size_is(MaximumLength), length_is(Length)]
  249. #endif // MIDL_PASS
  250.         PCHAR Buffer;
  251. } STRING;
  252. typedef STRING *PSTRING;
  253. typedef STRING ANSI_STRING;
  254. typedef PSTRING PANSI_STRING;

  255. typedef struct RTL_DRIVE_LETTER_CURDIR
  256. {
  257.         UINT16 Flags;
  258.         UINT16 Length;
  259.         UINT32 TimeStamp;
  260.         _STRING DosPath;
  261. }RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;

  262. typedef struct _RTL_USER_PROCESS_PARAMETERS
  263. {
  264.         UINT32 MaximumLength;
  265.         UINT32 Length;
  266.         UINT32 Flags;
  267.         UINT32 DebugFlags;
  268.         PVOID ConsoleHandle;
  269.         UINT32 ConsoleFlags;
  270.         PVOID StandardInput;
  271.         PVOID StandardOutput;
  272.         PVOID StandardError;
  273.         _CURDIR CurrentDirectory;
  274.         _UNICODE_STRING DllPath;
  275.         _UNICODE_STRING ImagePathName;
  276.         _UNICODE_STRING CommandLine;
  277.         PVOID Environment;
  278.         UINT32 StartingX;
  279.         UINT32 StartingY;
  280.         UINT32 CountX;
  281.         UINT32 CountY;
  282.         UINT32 CountCharsX;
  283.         UINT32 CountCharsY;
  284.         UINT32 FillAttribute;
  285.         UINT32 WindowFlags;
  286.         UINT32 ShowWindowFlags;
  287.         _UNICODE_STRING WindowTitle;
  288.         _UNICODE_STRING DesktopInfo;
  289.         _UNICODE_STRING ShellInfo;
  290.         _UNICODE_STRING RuntimeData;
  291.         RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];
  292.         UINT64 EnvironmentSize;
  293.         UINT64 EnvironmentVersion;
  294.         PVOID PackageDependencyData;
  295.         UINT32 ProcessGroupId;
  296. }RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

  297. #pragma pack(push, 1)
  298. typedef struct _PEB
  299. {
  300.         UCHAR InheritedAddressSpace;
  301.         UCHAR ReadImageFileExecOptions;
  302.         UCHAR BeingDebugged;
  303.         //UCHAR BitField
  304.         BYTE ImageUsesLargePages : 1;
  305.         BYTE IsProtectedProcess : 1;
  306.         BYTE IsImageDynamicallyRelocated : 1;
  307.         BYTE SkipPatchingUser32Forwarders : 1;
  308.         BYTE IsPackagedProcess : 1;
  309.         BYTE IsAppContainer : 1;
  310.         BYTE IsProtectedProcessLight : 1;
  311.         BYTE SpareBits : 1;
  312.         PVOID Mutant;
  313.         PVOID ImageBaseAddress;
  314.         PPEB_LDR_DATA Ldr;
  315.         PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
  316.         PVOID SubSystemData;
  317.         PVOID ProcessHeap;
  318.         PRTL_CRITICAL_SECTION FastPebLock;
  319.         PVOID AtlThunkSListPtr;
  320.         PVOID IFEOKey;
  321.         UINT32 CrossProcessFlags;
  322.         unsigned ProcessInJob : 1;
  323.         unsigned ProcessInitializing : 1;
  324.         unsigned ProcessUsingVEH : 1;
  325.         unsigned ProcessUsingVCH : 1;
  326.         unsigned ProcessUsingFTH : 1;
  327.         unsigned ReservedBits0 : 27;
  328.         PVOID KernelCallbackTable;
  329.         PVOID UserSharedInfoPtr;
  330.         UINT32 SystemReserved;
  331.         UINT32 AtlThunkSListPtr32;
  332.         UINT32 ApiSetMap;
  333.         UINT32 TlsExpansionCounter;
  334.         UINT32 TlsBitmap;
  335.         UINT32 TlsBitmapBits[2];
  336.         PVOID ReadOnlySharedMemoryBase;
  337.         PVOID HotpatchInformation;
  338.         PVOID ReadOnlyStaticServerData;
  339.         PVOID AnsiCodePageData;
  340.         PVOID OemCodePageData;
  341.         PVOID UnicodeCaseTableData;
  342.         UINT32 NumberOfProcessors;
  343.         UINT32 NtGlobalFlag;
  344.         _LARGE_INTEGER CriticalSectionTimeout;
  345.         UINT32 HeapSegmentReserve;
  346.         UINT32 HeapSegmentCommit;
  347.         UINT32 HeapDeCommitTotalFreeThreshold;
  348.         UINT32 HeapDeCommitFreeBlockThreshold;
  349.         UINT32 NumberOfHeaps;
  350.         UINT32 MaximumNumberOfHeaps;
  351.         PPVOID ProcessHeaps;
  352.         PVOID GdiSharedHandleTable;
  353.         PVOID ProcessStarterHelper;
  354.         UINT32 GdiDCAttributeList;
  355.         PRTL_CRITICAL_SECTION LoaderLock;
  356.         UINT32 OSMajorVersion;
  357.         UINT32 OSMinorVersion;
  358.         UINT16 OSBuildNumber;
  359.         UINT16 OSCSDVersion;
  360.         UINT32 OSPlatformId;
  361.         UINT32 ImageSubsystem;
  362.         UINT32 ImageSubsystemMajorVersion;
  363.         UINT32 ImageSubsystemMinorVersion;
  364.         UINT32 ActiveProcessAffinityMask;
  365.         UINT32 GdiHandleBuffer[34];
  366.         PVOID PostProcessInitRoutine;
  367.         PVOID TlsExpansionBitmap;
  368.         PVOID TlsExpansionBitmapBits[32];
  369.         UINT32 SessionId;
  370.         _ULARGE_INTEGER AppCompatFlags;
  371.         _ULARGE_INTEGER AppCompatFlagsUser;
  372.         PVOID pShimData;
  373.         PVOID AppCompatInfo;
  374.         _UNICODE_STRING CSDVersion;
  375.         PVOID ActivationContextData;
  376.         PVOID ProcessAssemblyStorageMap;
  377.         PVOID SystemDefaultActivationContextData;
  378.         PVOID SystemAssemblyStorageMap;
  379.         UINT32 MinimumStackCommit;
  380. }PEB, *PPEB;
  381. #pragma pop

  382. typedef struct _GDI_TEB_BATCH
  383. {
  384.         unsigned Offset : 31;
  385.         unsigned HasRenderingCommand : 1;
  386.         UINT64 HDC;
  387.         UINT32 Buffer[310];
  388. }GDI_TEB_BATCH, *PGDI_TEB_BATCH;

  389. typedef struct _PROCESSOR_NUMBER
  390. {
  391.         WORD   Group;
  392.         BYTE  Number;
  393.         BYTE  Reserved;
  394. } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;

  395. typedef struct _TEB_ACTIVE_FRAME_CONTEXT
  396. {
  397.         UINT32 Flags;
  398.         PCHAR FrameName;
  399. }TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT;

  400. typedef struct _TEB_ACTIVE_FRAME
  401. {
  402.         UINT32 Flags;
  403.         _TEB_ACTIVE_FRAME* Previous;
  404.         PTEB_ACTIVE_FRAME_CONTEXT Context;
  405. }TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME;

  406. typedef struct _TEB
  407. {
  408.         _NT_TIB NtTib;
  409.         PVOID EnvironmentPointer;
  410.         _CLIENT_ID ClientId;
  411.         PVOID ActiveRpcHandle;
  412.         PVOID ThreadLocalStoragePointer;
  413.         PPEB ProcessEnvironmentBlock;
  414.         UINT32 LastErrorValue;
  415.         UINT32 CountOfOwnedCriticalSections;
  416.         PVOID CsrClientThread;
  417.         PVOID Win32ThreadInfo;
  418.         UINT32 User32Reserved[26];
  419.         UINT32 UserReserved[5];
  420.         PVOID WOW32Reserved;
  421.         UINT32 CurrentLocale;
  422.         UINT32 FpSoftwareStatusRegister;
  423.         PVOID SystemReserved1[54];
  424.         INT32 ExceptionCode;
  425.         PVOID ActivationContextStackPointer;
  426.         UCHAR SpareBytes[36];
  427.         UINT32 TxFsContext;
  428.         _GDI_TEB_BATCH GdiTebBatch;
  429.         _CLIENT_ID RealClientId;
  430.         PVOID GdiCachedProcessHandle;
  431.         UINT32 GdiClientPID;
  432.         UINT32 GdiClientTID;
  433.         PVOID GdiThreadLocalInfo;
  434.         UINT32 Win32ClientInfo[62];
  435.         PVOID glDispatchTable[233];
  436.         UINT32 glReserved1[29];
  437.         PVOID glReserved2;
  438.         PVOID glSectionInfo;
  439.         PVOID glSection;
  440.         PVOID glTable;
  441.         PVOID glCurrentRC;
  442.         PVOID glContext;
  443.         UINT32 LastStatusValue;
  444.         _UNICODE_STRING StaticUnicodeString;
  445.         WCHAR StaticUnicodeBuffer[261];
  446.         PVOID DeallocationStack;
  447.         PVOID TlsSlots[64];
  448.         _LIST_ENTRY TlsLinks;
  449.         PVOID Vdm;
  450.         PVOID ReservedForNtRpc;
  451.         PVOID DbgSsReserved[2];
  452.         UINT32 HardErrorMode;
  453.         PVOID Instrumentation[9];
  454.         _GUID ActivityId;
  455.         PVOID SubProcessTag;
  456.         PVOID EtwLocalData;
  457.         PVOID EtwTraceData;
  458.         PVOID WinSockData;
  459.         UINT32 GdiBatchCount;
  460.         _PROCESSOR_NUMBER CurrentIdealProcessor;
  461.         UINT32 IdealProcessorValue;
  462.         UCHAR ReservedPad0;
  463.         UCHAR ReservedPad1;
  464.         UCHAR ReservedPad2;
  465.         UCHAR IdealProcessor;
  466.         UINT32 GuaranteedStackBytes;
  467.         PVOID ReservedForPerf;
  468.         PVOID ReservedForOle;
  469.         UINT32 WaitingOnLoaderLock;
  470.         PVOID SavedPriorityState;
  471.         UINT32 SoftPatchPtr1;
  472.         PVOID ThreadPoolData;
  473.         PPVOID TlsExpansionSlots;
  474.         UINT32 MuiGeneration;
  475.         UINT32 IsImpersonating;
  476.         PVOID NlsCache;
  477.         PVOID pShimData;
  478.         UINT32 HeapVirtualAffinity;
  479.         PVOID CurrentTransactionHandle;
  480.         PTEB_ACTIVE_FRAME ActiveFrame;
  481. }TEB, *PTEB;

  482. #include <iostream>
  483. using namespace std;
  484. #define printsegdec(x) cout<<dec<<"\t"###x##":"<<x<<endl
  485. #define printseghex(x) cout<<hex<<"\t"###x##":"<<x<<endl
  486. #define printsegwstr(x) if(x) wcout<<dec<<"\t"###x##":"<<(wchar_t*)x<<endl

  487. void main()
  488. {
  489.         PTEB pteb = 0;
  490.         _asm
  491.         {
  492.                 mov eax, dword ptr fs : [0x18];
  493.                 mov pteb, eax;
  494.         };
  495.         cout << hex << "TEB address:" << pteb << endl;
  496.         printseghex(pteb->EnvironmentPointer);
  497.         printsegdec(pteb->ClientId.UniqueProcess);
  498.         printsegdec(pteb->ClientId.UniqueThread);
  499.         printsegdec(pteb->ThreadLocalStoragePointer);
  500.         printseghex(pteb->ActiveRpcHandle);
  501.         printsegdec(pteb->LastErrorValue);
  502.         printsegdec(pteb->CountOfOwnedCriticalSections);
  503.         printseghex(pteb->CurrentLocale);
  504.         printsegdec(pteb->LastStatusValue);
  505.         cout << endl;
  506.         //打印TIB
  507.         NT_TIB& ptib = pteb->NtTib;
  508.         EXCEPTION_REGISTRATION_RECORD* perr = ptib.ExceptionList;
  509.         printseghex(ptib.StackBase);
  510.         printseghex(ptib.StackLimit);
  511.         while (perr != (EXCEPTION_REGISTRATION_RECORD*)-1)
  512.         {
  513.                 printseghex(perr->Next);
  514.                 printseghex(perr->Handler);
  515.                 perr = perr->Next;
  516.         }
  517.         cout << endl;
  518.         //打印PEB
  519.         cout << hex << "PEB address:" << pteb->ProcessEnvironmentBlock << endl;
  520.         PPEB ppeb= pteb->ProcessEnvironmentBlock;
  521.         printsegdec((int)ppeb->InheritedAddressSpace);
  522.         printsegdec((int)ppeb->ReadImageFileExecOptions);
  523.         printsegdec((int)ppeb->BeingDebugged);
  524.         printsegdec((int)ppeb->ImageUsesLargePages);
  525.         printsegdec((int)ppeb->IsProtectedProcess);
  526.         printsegdec((int)ppeb->IsImageDynamicallyRelocated);
  527.         printsegdec((int)ppeb->SkipPatchingUser32Forwarders);
  528.         printsegdec((int)ppeb->IsPackagedProcess);
  529.         printsegdec((int)ppeb->IsAppContainer);
  530.         printsegdec((int)ppeb->IsProtectedProcessLight);
  531.         printsegdec((int)ppeb->SpareBits);
  532.         printseghex(ppeb->ImageBaseAddress);
  533.         printseghex(ppeb->ProcessHeap);
  534.         printsegdec(ppeb->NumberOfProcessors);
  535.         printseghex(ppeb->NtGlobalFlag);
  536.         printseghex(ppeb->HeapSegmentReserve);
  537.         printseghex(ppeb->HeapSegmentCommit);
  538.         printseghex(ppeb->HeapDeCommitTotalFreeThreshold);
  539.         printseghex(ppeb->HeapDeCommitFreeBlockThreshold);
  540.         printsegdec(ppeb->NumberOfHeaps);
  541.         printsegdec(ppeb->MaximumNumberOfHeaps);
  542.         printseghex(ppeb->ProcessHeaps);
  543.         printsegdec(ppeb->OSMajorVersion);
  544.         printsegdec(ppeb->OSMinorVersion);
  545.         printsegdec(ppeb->OSBuildNumber);
  546.         printsegdec(ppeb->OSPlatformId);
  547.         printsegdec(ppeb->ImageSubsystem);
  548.         printsegdec(ppeb->ImageSubsystemMajorVersion);
  549.         printsegdec(ppeb->ImageSubsystemMinorVersion);
  550.         printsegdec(ppeb->SessionId);
  551.         cout << endl;

  552.         printseghex(ppeb->Ldr);
  553.         printsegdec(ppeb->Ldr->Length);
  554.         PLDR_MODULE plm1 = (PLDR_MODULE)ppeb->Ldr->InLoadOrderModuleList.Flink;
  555.         cout << "LoadOrder:" << endl;
  556.         do
  557.         {
  558.                 printseghex(plm1->BaseAddress);
  559.                 printseghex(plm1->EntryPoint);
  560.                 printsegdec(plm1->SizeOfImage);
  561.                 printsegwstr(plm1->FullDllName.Buffer);
  562.                 printsegwstr(plm1->BaseDllName.Buffer);
  563.                 printseghex(plm1->Flags);
  564.                 printsegdec(plm1->LoadCount);
  565.                 printsegdec(plm1->TlsIndex);
  566.                 plm1 = (PLDR_MODULE)plm1->InLoadOrderModuleList.Flink;
  567.         } while (plm1 != (PLDR_MODULE)ppeb->Ldr->InLoadOrderModuleList.Flink);

  568.         cout << endl;
  569.         printseghex(ppeb->ProcessParameters);
  570.         printsegdec(ppeb->ProcessParameters->MaximumLength);
  571.         printsegdec(ppeb->ProcessParameters->Length);
  572.         printseghex(ppeb->ProcessParameters->Flags);
  573.         printseghex(ppeb->ProcessParameters->DebugFlags);
  574.         printsegdec(ppeb->ProcessParameters->MaximumLength);
  575.         printsegdec(ppeb->ProcessParameters->MaximumLength);
  576.         wcout << L"\tCurrentDirectory:" << ppeb->ProcessParameters->CurrentDirectory.DosPath.Buffer<<endl;
  577.         wcout << L"\tCommandLine:" << ppeb->ProcessParameters->CommandLine.Buffer << endl;
  578.         wcout << L"\tWindowTitle:" << ppeb->ProcessParameters->WindowTitle.Buffer << endl;
  579.         wcout << L"\tDesktopInfo:" << ppeb->ProcessParameters->DesktopInfo.Buffer << endl;
  580.         cout << endl;
  581. }
复制代码
回复

使用道具 举报

发表于 2015-5-2 14:19:25 | 显示全部楼层
欢迎某天尊加入驱动开发行列。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2015-5-2 23:42:05 | 显示全部楼层
0xAA55 发表于 2015-5-2 14:19
欢迎某天尊加入驱动开发行列。

还没呢,其实,哈哈
回复 赞! 靠!

使用道具 举报

发表于 2015-5-12 13:37:40 | 显示全部楼层
看到PEB 和 TEB 包含了这么多的成员,我就醉了
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-24 10:11 , Processed in 0.030868 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表