WinNT内核下内存采用保护模式,段寄存器的意义与实模式汇编下的意义不同了。fs[0]就是异常入口队列的首指针(seh)。另外,FS存的是段选择子,而不是实模式下的高16位基地址。struct_seh{struct_seh*lpNextSeh;LPVOIDlpFuncEntry;}FS寄存器指向当前活动线程的TEB结构(线程结构)偏移说明000指向SEH链指针004线程堆栈顶部008线程堆栈底部00CSubSystemTib010FiberData014ArbitraryUserPointer018FS段寄存器在内存中的镜像地址020进程PID024线程ID02C指向线程局部存储指针030PEB结构地址(进程结构)034上个错误号得到KERNEL32.DLL基址的方法assumefs:nothing;打开FS寄存器moveax,fs:[30h];得到PEB结构地址moveax,[eax+0ch];得到PEB_LDR_DATA结构地址movesi,[eax+1ch];InInitializationOrderModuleListlodsd;得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址movedx,[eax+8h];得到BaseAddress,既Kernel32.dll基址