Здравствуйте ! Подскажите, пожалуйста, где можно раздобыть декларации(описание) различных струкур (типа EPROCESS) для Windows7 ?
Код (Text): struct _EPROCESS { // static data ------------------------------------ // non-static data -------------------------------- /*<thisrel this+0x0>*/ /*|0x98|*/ struct _KPROCESS Pcb; /*<thisrel this+0x98>*/ /*|0x4|*/ struct _EX_PUSH_LOCK ProcessLock; /*<thisrel this+0xa0>*/ /*|0x8|*/ union _LARGE_INTEGER CreateTime; /*<thisrel this+0xa8>*/ /*|0x8|*/ union _LARGE_INTEGER ExitTime; /*<thisrel this+0xb0>*/ /*|0x4|*/ struct _EX_RUNDOWN_REF RundownProtect; /*<thisrel this+0xb4>*/ /*|0x4|*/ void* UniqueProcessId; /*<thisrel this+0xb8>*/ /*|0x8|*/ struct _LIST_ENTRY ActiveProcessLinks; /*<thisrel this+0xc0>*/ /*|0x8|*/ unsigned long ProcessQuotaUsage[2]; /*<thisrel this+0xc8>*/ /*|0x8|*/ unsigned long ProcessQuotaPeak[2]; /*<thisrel this+0xd0>*/ /*|0x4|*/ unsigned long CommitCharge; /*<thisrel this+0xd4>*/ /*|0x4|*/ struct _EPROCESS_QUOTA_BLOCK* QuotaBlock; /*<thisrel this+0xd8>*/ /*|0x4|*/ struct _PS_CPU_QUOTA_BLOCK* CpuQuotaBlock; /*<thisrel this+0xdc>*/ /*|0x4|*/ unsigned long PeakVirtualSize; /*<thisrel this+0xe0>*/ /*|0x4|*/ unsigned long VirtualSize; /*<thisrel this+0xe4>*/ /*|0x8|*/ struct _LIST_ENTRY SessionProcessLinks; /*<thisrel this+0xec>*/ /*|0x4|*/ void* DebugPort; /*<thisrel this+0xf0>*/ /*|0x4|*/ void* ExceptionPortData; /*<thisrel this+0xf0>*/ /*|0x4|*/ unsigned long ExceptionPortValue; /*<bitfield this+0xf0>*/ /*|0x4|*/ unsigned long ExceptionPortState:0:3; /*<thisrel this+0xf4>*/ /*|0x4|*/ struct _HANDLE_TABLE* ObjectTable; /*<thisrel this+0xf8>*/ /*|0x4|*/ struct _EX_FAST_REF Token; /*<thisrel this+0xfc>*/ /*|0x4|*/ unsigned long WorkingSetPage; /*<thisrel this+0x100>*/ /*|0x4|*/ struct _EX_PUSH_LOCK AddressCreationLock; /*<thisrel this+0x104>*/ /*|0x4|*/ struct _ETHREAD* RotateInProgress; /*<thisrel this+0x108>*/ /*|0x4|*/ struct _ETHREAD* ForkInProgress; /*<thisrel this+0x10c>*/ /*|0x4|*/ unsigned long HardwareTrigger; /*<thisrel this+0x110>*/ /*|0x4|*/ struct _MM_AVL_TABLE* PhysicalVadRoot; /*<thisrel this+0x114>*/ /*|0x4|*/ void* CloneRoot; /*<thisrel this+0x118>*/ /*|0x4|*/ unsigned long NumberOfPrivatePages; /*<thisrel this+0x11c>*/ /*|0x4|*/ unsigned long NumberOfLockedPages; /*<thisrel this+0x120>*/ /*|0x4|*/ void* Win32Process; /*<thisrel this+0x124>*/ /*|0x4|*/ struct _EJOB* Job; /*<thisrel this+0x128>*/ /*|0x4|*/ void* SectionObject; /*<thisrel this+0x12c>*/ /*|0x4|*/ void* SectionBaseAddress; /*<thisrel this+0x130>*/ /*|0x4|*/ unsigned long Cookie; /*<thisrel this+0x134>*/ /*|0x4|*/ unsigned long Spare8; /*<thisrel this+0x138>*/ /*|0x4|*/ struct _PAGEFAULT_HISTORY* WorkingSetWatch; /*<thisrel this+0x13c>*/ /*|0x4|*/ void* Win32WindowStation; /*<thisrel this+0x140>*/ /*|0x4|*/ void* InheritedFromUniqueProcessId; /*<thisrel this+0x144>*/ /*|0x4|*/ void* LdtInformation; /*<thisrel this+0x148>*/ /*|0x4|*/ void* VdmObjects; /*<thisrel this+0x14c>*/ /*|0x4|*/ unsigned long ConsoleHostProcess; /*<thisrel this+0x150>*/ /*|0x4|*/ void* DeviceMap; /*<thisrel this+0x154>*/ /*|0x4|*/ void* EtwDataSource; /*<thisrel this+0x158>*/ /*|0x4|*/ void* FreeTebHint; /*<thisrel this+0x160>*/ /*|0x8|*/ struct _HARDWARE_PTE PageDirectoryPte; /*<thisrel this+0x160>*/ /*|0x8|*/ unsigned __int64 Filler; /*<thisrel this+0x168>*/ /*|0x4|*/ void* Session; /*<thisrel this+0x16c>*/ /*|0xf|*/ unsigned char ImageFileName[15]; /*<thisrel this+0x17b>*/ /*|0x1|*/ unsigned char PriorityClass; /*<thisrel this+0x17c>*/ /*|0x8|*/ struct _LIST_ENTRY JobLinks; /*<thisrel this+0x184>*/ /*|0x4|*/ void* LockedPagesList; /*<thisrel this+0x188>*/ /*|0x8|*/ struct _LIST_ENTRY ThreadListHead; /*<thisrel this+0x190>*/ /*|0x4|*/ void* SecurityPort; /*<thisrel this+0x194>*/ /*|0x4|*/ void* PaeTop; /*<thisrel this+0x198>*/ /*|0x4|*/ unsigned long ActiveThreads; /*<thisrel this+0x19c>*/ /*|0x4|*/ unsigned long ImagePathHash; /*<thisrel this+0x1a0>*/ /*|0x4|*/ unsigned long DefaultHardErrorProcessing; /*<thisrel this+0x1a4>*/ /*|0x4|*/ long LastThreadExitStatus; /*<thisrel this+0x1a8>*/ /*|0x4|*/ struct _PEB* Peb; /*<thisrel this+0x1ac>*/ /*|0x4|*/ struct _EX_FAST_REF PrefetchTrace; /*<thisrel this+0x1b0>*/ /*|0x8|*/ union _LARGE_INTEGER ReadOperationCount; /*<thisrel this+0x1b8>*/ /*|0x8|*/ union _LARGE_INTEGER WriteOperationCount; /*<thisrel this+0x1c0>*/ /*|0x8|*/ union _LARGE_INTEGER OtherOperationCount; /*<thisrel this+0x1c8>*/ /*|0x8|*/ union _LARGE_INTEGER ReadTransferCount; /*<thisrel this+0x1d0>*/ /*|0x8|*/ union _LARGE_INTEGER WriteTransferCount; /*<thisrel this+0x1d8>*/ /*|0x8|*/ union _LARGE_INTEGER OtherTransferCount; /*<thisrel this+0x1e0>*/ /*|0x4|*/ unsigned long CommitChargeLimit; /*<thisrel this+0x1e4>*/ /*|0x4|*/ unsigned long CommitChargePeak; /*<thisrel this+0x1e8>*/ /*|0x4|*/ void* AweInfo; /*<thisrel this+0x1ec>*/ /*|0x4|*/ struct _SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; /*<thisrel this+0x1f0>*/ /*|0x6c|*/ struct _MMSUPPORT Vm; /*<thisrel this+0x25c>*/ /*|0x8|*/ struct _LIST_ENTRY MmProcessLinks; /*<thisrel this+0x264>*/ /*|0x4|*/ unsigned long ModifiedPageCount; /*<thisrel this+0x268>*/ /*|0x4|*/ unsigned long Flags2; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long JobNotReallyActive:0:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long AccountingFolded:1:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long NewProcessReported:2:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ExitProcessReported:3:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ReportCommitChanges:4:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long LastReportMemory:5:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ReportPhysicalPageChanges:6:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long HandleTableRundown:7:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long NeedsHandleRundown:8:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long RefTraceEnabled:9:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long NumaAware:a:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ProtectedProcess:b:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long DefaultPagePriority:c:3; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long PrimaryTokenFrozen:f:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ProcessVerifierTarget:10:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long StackRandomizationDisabled:11:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long AffinityPermanent:12:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long AffinityUpdateEnable:13:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long PropagateNode:14:1; /*<bitfield this+0x268>*/ /*|0x4|*/ unsigned long ExplicitAffinity:15:1; /*<thisrel this+0x26c>*/ /*|0x4|*/ unsigned long Flags; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long CreateReported:0:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long NoDebugInherit:1:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ProcessExiting:2:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ProcessDelete:3:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long Wow64SplitPages:4:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long VmDeleted:5:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long OutswapEnabled:6:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long Outswapped:7:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ForkFailed:8:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long Wow64VaSpace4Gb:9:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long AddressSpaceInitialized:a:2; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long SetTimerResolution:c:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long BreakOnTermination:d:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long DeprioritizeViews:e:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long WriteWatch:f:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ProcessInSession:10:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long OverrideAddressSpace:11:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long HasAddressSpace:12:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long LaunchPrefetched:13:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long InjectInpageErrors:14:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long VmTopDown:15:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ImageNotifyDone:16:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long PdeUpdateNeeded:17:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long VdmAllowed:18:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long CrossSessionCreate:19:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ProcessInserted:1a:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long DefaultIoPriority:1b:3; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long ProcessSelfDelete:1e:1; /*<bitfield this+0x26c>*/ /*|0x4|*/ unsigned long SetTimerResolutionLink:1f:1; /*<thisrel this+0x270>*/ /*|0x4|*/ long ExitStatus; /*<thisrel this+0x274>*/ /*|0x20|*/ struct _MM_AVL_TABLE VadRoot; /*<thisrel this+0x294>*/ /*|0x10|*/ struct _ALPC_PROCESS_CONTEXT AlpcContext; /*<thisrel this+0x2a4>*/ /*|0x8|*/ struct _LIST_ENTRY TimerResolutionLink; /*<thisrel this+0x2ac>*/ /*|0x4|*/ unsigned long RequestedTimerResolution; /*<thisrel this+0x2b0>*/ /*|0x4|*/ unsigned long ActiveThreadsHighWatermark; /*<thisrel this+0x2b4>*/ /*|0x4|*/ unsigned long SmallestTimerResolution; /*<thisrel this+0x2b8>*/ /*|0x4|*/ struct _PO_DIAG_STACK_RECORD* TimerResolutionStackRecord; // base classes ----------------------------------- // friends ---------------------------------------- // static functions ------------------------------- // non-virtual functions -------------------------- // virtual functions ------------------------------ }; // <size 0x2c0> Держи если впадлу качать
кстати подскажите пожалуйста формат запроса к серверу символов смотрел там хеш какой-то юзается, никто не в курсе, что за алгоритм?
Насчёт символов. [] Если не установлены DTW (Debugging Tools for Windows), то залить с сайта MS. В комплекте, кроме всего прочего, идёт symchk. [] Далее. Составить текстовый список файлов, для которых нужно получить символы, по одному файлу на линию. Для получения символов с ядерными структурами вроде достаточно вписать только ntoskrnl.exe. [] Выполнить "symchk /it MyFilesList.txt /s "" /om Output.txt". (Ключ /s нужен для того, чтобы тулза не начала сразу сливать символы в случае правильно выставленного sym-сервера). [] Будет сгенерирован манифест (файл "Output.txt"), содержащий хеши. Содержимое можно запостить сюда, и кто-нибудь сольёт файлы символов командой "symchk /im "Output.txt" /s SRV*C:\SymbolsForDialupers*http://msdl.microsoft.com/download/symbols", упакует их (удалив из папки бинарники) и выложит на файлообменник. Для одного файла это, вероятно, не актуально (~7мб pdb) и достаточно будет "symchk /if C:\windows\system32\ntoskrnl.exe /s SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols", но если нужна целая коллекция, то экономия времени получится приличная. На полученный pdb-файл можно натравить pdbdump (вывод показал Co^H^H Great в #3) или dia2dump.
Удалось мне раздобыть символы для Win7. Точнее: Windows_Winmain.7100.0.090421-1700.X86FRE.Symbols.msi (208 МБ) Но меня постигло страшное разочарование. В нем нет ntoskrnl Правда есть ntkrnlmp.pdb, но pdbdump отказывается его парсить. А выдает только вот это: Код (Text): ////////////////////////////////////////////////////////////////////////// Typedefs ////////////////////////////////////////////////////////////////////////// Enumerations ////////////////////////////////////////////////////////////////////////// Constants ////////////////////////////////////////////////////////////////////////// Structs ////////////////////////////////////////////////////////////////////////// Classes ////////////////////////////////////////////////////////////////////////// Unions ////////////////////////////////////////////////////////////////////////// Functions ////////////////////////////////////////////////////////////////////////// Globals/Statics ////////////////////////////////////////////////////////////////////////// Public symbols Впрочем, он не "парсит" и другие pdb-шки оттуда Подскажите пожалуйста, в чем может быть дело ?
Одинаковая вещь. С тех пор как однопроцессорная и, вроде, даже non-PAE версии ядра уже не поставляются, ntoskrnl можно считать алиасом ntkrnlmp. pdbdump глючный, увы. Сейчас вообще не запустился почему-то. Одна может воспользовать dia2dump, хотя выходные данные таковы, что их придётся перепарсивать, ага. Если нужно просто посмотреть смещения, то при наличие исполняемого модуля (лайк, "ntoskrnl.exe") можно открыть его в windbg в качестве крэш-дампа (вывод для ядра висты32): Код (Text): Loading Dump File [D:\Symbols\ntkrpamp.exe\47918B123b9000\ntkrpamp.exe] Symbol search path is: SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols Executable search path is: ModLoad: 00400000 007b9000 D:\Symbols\ntkrpamp.exe\47918B123b9000\ntkrpamp.exe eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=00000000 eip=004ec4b0 esp=00000000 ebp=00000000 iopl=0 nv up di pl nz na po nc cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000 efl=00000000 ntkrpamp!KiSystemStartup: 004ec4b0 55 push ebp 0:000> .sympath D:\symtest Symbol search path is: D:\symtest Expanded Symbol search path is: d:\symtest 0:000> .reload . 0:000> lm start end module name 00400000 007b9000 ntkrpamp (private pdb symbols) d:\symtest\ntkrpamp.pdb 0:000> dt -v _KPROCESS ntkrpamp!_KPROCESS struct _KPROCESS, 35 elements, 0x80 bytes +0x000 Header : struct _DISPATCHER_HEADER, 13 elements, 0x10 bytes +0x010 ProfileListHead : struct _LIST_ENTRY, 2 elements, 0x8 bytes +0x018 DirectoryTableBase : Uint4B +0x01c Unused0 : Uint4B +0x020 LdtDescriptor : struct _KGDTENTRY, 3 elements, 0x8 bytes +0x028 Int21Descriptor : struct _KIDTENTRY, 4 elements, 0x8 bytes +0x030 IopmOffset : Uint2B +0x032 Unused1 : UChar +0x033 Unused2 : UChar +0x034 ActiveProcessors : Uint4B +0x038 KernelTime : Uint4B +0x03c UserTime : Uint4B +0x040 ReadyListHead : struct _LIST_ENTRY, 2 elements, 0x8 bytes +0x048 SwapListEntry : struct _SINGLE_LIST_ENTRY, 1 elements, 0x4 bytes +0x04c VdmTrapcHandler : Ptr32 to Void +0x050 ThreadListHead : struct _LIST_ENTRY, 2 elements, 0x8 bytes +0x058 ProcessLock : Uint4B +0x05c Affinity : Uint4B +0x060 AutoAlignment : Bitfield Pos 0, 1 Bit +0x060 DisableBoost : Bitfield Pos 1, 1 Bit +0x060 DisableQuantum : Bitfield Pos 2, 1 Bit +0x060 ReservedFlags : Bitfield Pos 3, 29 Bits +0x060 ProcessFlags : Int4B +0x064 BasePriority : Char +0x065 QuantumReset : Char +0x066 State : UChar +0x067 ThreadSeed : UChar +0x068 PowerState : UChar +0x069 IdealNode : UChar +0x06a Visited : UChar +0x06b Flags : struct _KEXECUTE_OPTIONS, 8 elements, 0x1 bytes +0x06b ExecuteOptions : UChar +0x06c StackCount : Uint4B +0x070 ProcessListEntry : struct _LIST_ENTRY, 2 elements, 0x8 bytes +0x078 CycleTime : Uint8B С WinDbg можно поиграть и на живой системе: Код (Text): Connected to Windows Server 2008/Windows Vista 6001 x64 target at (Tue Aug 4 11:54:32.989 2009 (GMT+4)), ptr64 TRUE lkd> !process 0 0 utorrent.exe PROCESS fffffa8002e66c10 SessionId: 1 Cid: 0bf4 Peb: 7efdf000 ParentCid: 0b3c DirBase: 332cc000 ObjectTable: fffff8800dc67420 HandleCount: 339. Image: utorrent.exe lkd> dt _eprocess Break* fffffa8002e66c10 nt!_EPROCESS +0x370 BreakOnTermination : 0y0 lkd> dt _eprocess Break* nt!_EPROCESS +0x370 BreakOnTermination : Pos 13, 1 Bit lkd> eb fffffa8002e66c10 + 370 + 0n13/8 fffffa80`02e66f81 08 28 28 fffffa80`02e66f82 4d lkd> dt _eprocess Break* fffffa8002e66c10 nt!_EPROCESS +0x370 BreakOnTermination : 0y1 ; dare to terminate my torrents now!
Символы, скачанные напрямую с сервера символов посредством symchk (я никогда неюзал символьные пакеты и даже понятия не имею как там что лежит) pdbdump парсит нормально. А про symchk я выше уже писал