FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号
得到KERNEL32.DLL基址的方法
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基址
问题一:
上一篇中获得当前PEB的代码如下
mov eax, dword ptr fs:[0x18]
mov eax, dword ptr [eax+0x30]
其实完全可以
move eax, dword ptr fs:[0x30]
测试过了,这两段代码是等效的
问题二:
既然fs指向当前TEB,那为什么要用
mov eax, dword ptr fs:[0x18]
来获得当前TEB地址呢
因为 move eax, dword ptr fs:[0x00]获得的是 fs:[0x00]的内容 而无法获取真正的fs对应的地址

写的好写的好~~~ cheap Mbt walking shoes,discount Mbt walking shoes,free shipping
写的很好,我深有同感。 cheap Air max 90 ,discount Air max 90 ,free shipping
很喜欢你的细致文笔、细腻的情感,点缀的音乐也非常好。cheap Nike shox r4 ,discount Nike shox r4 ,free shipping
Great article very important information i found here dXB3Syjra8cO3Q