FS寄存器

来源:互联网 发布:中国移动网络加速器 编辑:程序博客网 时间:2024/05/17 06:54

WinNT内核下内存采用保护模式,段寄存器的意义与实模式汇编下的意义不同了。fs[0]就是异常入口队列的首指针(seh) 。另外,FS存的是段选择子,而不是实模式下的高16位基地址。

struct _seh{
     struct _seh * lpNextSeh;
     LPVOID lpFuncEntry;
}

FS寄存器指向当前活动线程的TEB结构(线程结构)

偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号

得到KERNEL32.DLL基址的方法
assume fs:nothing             ;打开FS寄存器
mov eax,fs:[30h]            ;得到PEB结构地址
mov eax,[eax + 0ch]        ;得到PEB_LDR_DATA结构地址
mov esi,[eax + 1ch]        ;InInitializationOrderModuleList
lodsd                      ;得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址
mov edx,[eax + 8h]         ;得到BaseAddress,既Kernel32.dll基址 
0 0
原创粉丝点击