Запутался что-то с этим всем, может кто подскажет? Если приложение нативное (32 битное на 32 битной ОС или 64 бит), то там все как бы ясно. Но , для WoW64 есть 2 РЕВ в процессе. И какой за что отвечает, откуда вообще брать инфу? Берем WinDBG , запускаем 32 битную софтину на 64 битной ОС. >0:000:x86> !peb Код (Text): PEB at 0000000000279000 InheritedAddressSpace: No ReadImageFileExecOptions: No BeingDebugged: Yes ImageBaseAddress: 0000000000400000 Ldr 00007ff98b4653c0 *** unable to read Ldr table at 00007ff98b4653c0 SubSystemData: 0000000000000000 ProcessHeap: 0000000000500000 ProcessParameters: 0000000000502560 CurrentDirectory: 'C:\WINDOWS\' ... Берем адрес 279000 , пишем 0:000:x86> dt _peb 0x279000 Код (Text): ntdll_772e0000!_PEB +0x000 InheritedAddressSpace : 0 '' +0x001 ReadImageFileExecOptions : 0 '' +0x002 BeingDebugged : 0x1 '' +0x003 BitField : 0 '' +0x003 ImageUsesLargePages : 0y0 +0x003 IsProtectedProcess : 0y0 +0x003 IsImageDynamicallyRelocated : 0y0 +0x003 SkipPatchingUser32Forwarders : 0y0 +0x003 IsPackagedProcess : 0y0 +0x003 IsAppContainer : 0y0 +0x003 IsProtectedProcessLight : 0y0 +0x003 IsLongPathAwareProcess : 0y0 +0x004 Mutant : (null) +0x008 ImageBaseAddress : 0xffffffff Void +0x00c Ldr : 0xffffffff _PEB_LDR_DATA +0x010 ProcessParameters : 0x00400000 _RTL_USER_PROCESS_PARAMETERS +0x014 SubSystemData : (null) +0x018 ProcessHeap : 0x8b4653c0 Void +0x01c FastPebLock : 0x00007ff9 _RTL_CRITICAL_SECTION +0x020 AtlThunkSListPtr : 0x00502560 _SLIST_HEADER +0x024 IFEOKey : (null) +0x028 CrossProcessFlags : 0 +0x028 ProcessInJob : 0y0 +0x028 ProcessInitializing : 0y0 +0x028 ProcessUsingVEH : 0y0 +0x028 ProcessUsingVCH : 0y0 +0x028 ProcessUsingFTH : 0y0 +0x028 ProcessPreviouslyThrottled : 0y0 +0x028 ProcessCurrentlyThrottled : 0y0 +0x028 ProcessImagesHotPatched : 0y0 +0x028 ReservedBits0 : 0y000000000000000000000000 (0) +0x02c KernelCallbackTable : (null) +0x02c UserSharedInfoPtr : (null) +0x030 SystemReserved : 0x500000 +0x034 AtlThunkSListPtr32 : (null) +0x038 ApiSetMap : 0x8b464fe0 Void +0x03c TlsExpansionCounter : 0x7ff9 +0x040 TlsBitmap : (null) +0x044 TlsBitmapBits : [2] 0 +0x04c ReadOnlySharedMemoryBase : (null) +0x050 SharedData : 0x00000001 Void +0x054 ReadOnlyStaticServerData : (null) +0x058 AnsiCodePageData : (null) +0x05c OemCodePageData : (null) +0x060 UnicodeCaseTableData : (null) +0x064 NumberOfProcessors : 0 +0x068 NtGlobalFlag : 0x40000 +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0x0 +0x078 HeapSegmentReserve : 0x8b465340 +0x07c HeapSegmentCommit : 0x7ff9 +0x080 HeapDeCommitTotalFreeThreshold : 0x7ffff +0x084 HeapDeCommitFreeBlockThreshold : 0 +0x088 NumberOfHeaps : 0x7fe50000 +0x08c MaximumNumberOfHeaps : 0 +0x090 ProcessHeaps : (null) +0x094 GdiSharedHandleTable : (null) +0x098 ProcessStarterHelper : 0x7fe50750 Void +0x09c GdiDCAttributeList : 0 +0x0a0 LoaderLock : 0x7ffb0000 _RTL_CRITICAL_SECTION +0x0a4 OSMajorVersion : 0 +0x0a8 OSMinorVersion : 0x7ffc0228 +0x0ac OSBuildNumber : 0 +0x0ae OSCSDVersion : 0 +0x0b0 OSPlatformId : 0x7ffd0650 +0x0b4 ImageSubsystem : 0 +0x0b8 ImageSubsystemMajorVersion : 0xc +0x0bc ImageSubsystemMinorVersion : 0x470 +0x0c0 ActiveProcessAffinityMask : 0x79b8000 +0x0c4 GdiHandleBuffer : [34] 0xffffe86d +0x14c PostProcessInitRoutine : (null) +0x150 TlsExpansionBitmap : (null) +0x154 TlsExpansionBitmapBits : [32] 0 +0x1d4 SessionId : 0 +0x1d8 AppCompatFlags : _ULARGE_INTEGER 0x0 +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0 +0x1e8 pShimData : (null) +0x1ec AppCompatInfo : (null) +0x1f0 CSDVersion : _UNICODE_STRING "" +0x1f8 ActivationContextData : (null) +0x1fc ProcessAssemblyStorageMap : (null) +0x200 SystemDefaultActivationContextData : (null) +0x204 SystemAssemblyStorageMap : (null) +0x208 MinimumStackCommit : 0 +0x20c SparePointers : [4] (null) +0x21c SpareUlongs : [5] 0 +0x230 WerRegistrationData : (null) +0x234 WerShipAssertPtr : (null) +0x238 pUnused : 0x8b465320 Void +0x23c pImageHeaderHash : 0x00007ff9 Void +0x240 TracingFlags : 1 +0x240 HeapTracingEnabled : 0y1 +0x240 CritSecTracingEnabled : 0y0 +0x240 LibLoaderTracingEnabled : 0y0 +0x240 SpareTracingBits : 0y00000000000000000000000000000 (0) +0x248 CsrServerReadOnlySharedMemoryBase : 0 +0x250 TppWorkerpListLock : 0 +0x254 TppWorkerpList : _LIST_ENTRY [ 0x0 - 0x0 ] +0x25c WaitOnAddressHashTable : [128] (null) +0x45c TelemetryCoverageHeader : (null) +0x460 CloudFileFlags : 0 +0x464 CloudFileDiagFlags : 0 +0x468 PlaceholderCompatibilityMode : 0 '' +0x469 PlaceholderCompatibilityModeReserved : [7] "" +0x470 LeapSecondData : (null) +0x474 LeapSecondFlags : 0 +0x474 SixtySecondEnabled : 0y0 +0x474 Reserved : 0y0000000000000000000000000000000 (0) +0x478 NtGlobalFlag2 : 0 Явно что-то другое показывает. Пишем >!wow64exts.info Код (Text): PEB32: 0x27a000 PEB64: 0x279000 Значит, то что выше - 64 битный РЕВ, дампим 32 битный 0:000:x86> dt _peb 0x27a000 Код (Text): ntdll_772e0000!_PEB +0x000 InheritedAddressSpace : 0 '' +0x001 ReadImageFileExecOptions : 0 '' +0x002 BeingDebugged : 0x1 '' +0x003 BitField : 0 '' +0x003 ImageUsesLargePages : 0y0 +0x003 IsProtectedProcess : 0y0 +0x003 IsImageDynamicallyRelocated : 0y0 +0x003 SkipPatchingUser32Forwarders : 0y0 +0x003 IsPackagedProcess : 0y0 +0x003 IsAppContainer : 0y0 +0x003 IsProtectedProcessLight : 0y0 +0x003 IsLongPathAwareProcess : 0y0 +0x004 Mutant : 0xffffffff Void +0x008 ImageBaseAddress : 0x00400000 Void +0x00c Ldr : 0x773fdca0 _PEB_LDR_DATA +0x010 ProcessParameters : 0x00641fd8 _RTL_USER_PROCESS_PARAMETERS +0x014 SubSystemData : (null) +0x018 ProcessHeap : 0x00640000 Void +0x01c FastPebLock : 0x773fda60 _RTL_CRITICAL_SECTION +0x020 AtlThunkSListPtr : (null) +0x024 IFEOKey : (null) +0x028 CrossProcessFlags : 3 +0x028 ProcessInJob : 0y1 +0x028 ProcessInitializing : 0y1 +0x028 ProcessUsingVEH : 0y0 +0x028 ProcessUsingVCH : 0y0 +0x028 ProcessUsingFTH : 0y0 +0x028 ProcessPreviouslyThrottled : 0y0 +0x028 ProcessCurrentlyThrottled : 0y0 +0x028 ProcessImagesHotPatched : 0y0 +0x028 ReservedBits0 : 0y000000000000000000000000 (0) +0x02c KernelCallbackTable : (null) +0x02c UserSharedInfoPtr : (null) +0x030 SystemReserved : 0 +0x034 AtlThunkSListPtr32 : (null) +0x038 ApiSetMap : 0x00040000 Void +0x03c TlsExpansionCounter : 0 +0x040 TlsBitmap : 0x773fdc50 Void +0x044 TlsBitmapBits : [2] 0x10001 +0x04c ReadOnlySharedMemoryBase : 0x7fe50000 Void +0x050 SharedData : (null) +0x054 ReadOnlyStaticServerData : 0x7fe50750 -> (null) +0x058 AnsiCodePageData : 0x7ffb0000 Void +0x05c OemCodePageData : 0x7ffc0228 Void +0x060 UnicodeCaseTableData : 0x7ffd0650 Void +0x064 NumberOfProcessors : 0xc +0x068 NtGlobalFlag : 0x470 +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000 +0x078 HeapSegmentReserve : 0x100000 +0x07c HeapSegmentCommit : 0x2000 +0x080 HeapDeCommitTotalFreeThreshold : 0x10000 +0x084 HeapDeCommitFreeBlockThreshold : 0x1000 +0x088 NumberOfHeaps : 1 +0x08c MaximumNumberOfHeaps : 0x10 +0x090 ProcessHeaps : 0x773fc760 -> 0x00640000 Void +0x094 GdiSharedHandleTable : (null) +0x098 ProcessStarterHelper : (null) +0x09c GdiDCAttributeList : 0 +0x0a0 LoaderLock : 0x773fb3d0 _RTL_CRITICAL_SECTION +0x0a4 OSMajorVersion : 0xa +0x0a8 OSMinorVersion : 0 +0x0ac OSBuildNumber : 0x47bb +0x0ae OSCSDVersion : 0 +0x0b0 OSPlatformId : 2 +0x0b4 ImageSubsystem : 2 +0x0b8 ImageSubsystemMajorVersion : 4 +0x0bc ImageSubsystemMinorVersion : 0 +0x0c0 ActiveProcessAffinityMask : 0xfff +0x0c4 GdiHandleBuffer : [34] 0 +0x14c PostProcessInitRoutine : (null) +0x150 TlsExpansionBitmap : 0x773fdc38 Void +0x154 TlsExpansionBitmapBits : [32] 1 +0x1d4 SessionId : 1 +0x1d8 AppCompatFlags : _ULARGE_INTEGER 0x0 +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0 +0x1e8 pShimData : 0x001b0000 Void +0x1ec AppCompatInfo : (null) +0x1f0 CSDVersion : _UNICODE_STRING "" +0x1f8 ActivationContextData : (null) +0x1fc ProcessAssemblyStorageMap : (null) +0x200 SystemDefaultActivationContextData : 0x001a0000 _ACTIVATION_CONTEXT_DATA +0x204 SystemAssemblyStorageMap : (null) +0x208 MinimumStackCommit : 0 +0x20c SparePointers : [4] (null) +0x21c SpareUlongs : [5] 0 +0x230 WerRegistrationData : (null) +0x234 WerShipAssertPtr : (null) +0x238 pUnused : (null) +0x23c pImageHeaderHash : (null) +0x240 TracingFlags : 0 +0x240 HeapTracingEnabled : 0y0 +0x240 CritSecTracingEnabled : 0y0 +0x240 LibLoaderTracingEnabled : 0y0 +0x240 SpareTracingBits : 0y00000000000000000000000000000 (0) +0x248 CsrServerReadOnlySharedMemoryBase : 0x7df4`a6460000 +0x250 TppWorkerpListLock : 0 +0x254 TppWorkerpList : _LIST_ENTRY [ 0x27a254 - 0x27a254 ] +0x25c WaitOnAddressHashTable : [128] (null) +0x45c TelemetryCoverageHeader : (null) +0x460 CloudFileFlags : 0 +0x464 CloudFileDiagFlags : 0 +0x468 PlaceholderCompatibilityMode : 0 '' +0x469 PlaceholderCompatibilityModeReserved : [7] "" +0x470 LeapSecondData : 0x7ffa0000 _LEAP_SECOND_DATA +0x474 LeapSecondFlags : 0 +0x474 SixtySecondEnabled : 0y0 +0x474 Reserved : 0y0000000000000000000000000000000 (0) +0x478 NtGlobalFlag2 : 0 Еще что-то совсем другое. В общем, помогите разобраться.
Судя по смещениям эта команда пытается парсить указатель, как 32-битный PEB. И когда ты пытаешься парсить адрес 32-битного PEB, он парсится корректно, не понимаю, в чем вопрос?
Rel, ну как же корректно, если пишет Код (Text): +0x00c Ldr : 0xffffffff _PEB_LDR_DATA и это PEB64: Как понял, нужно получать адреса РЕВ и точно указывать, какой парсим, РЕВ32 или 64, через dt - тогда глюков нет. Просто по дефолту !peb видимо парсит 32 битный РЕВ по 64 битному адресу, или хз. Thetrik, когда пишем вида mov eax,[fs:30h] какой РЕВ будет в еах, при условии что прога 32 бит, а винда 64 ? 32 битный же?