采用FS去定位API地址:
FS寄存器指向当前活动线程的TEB结构(线程结构)
偏移 说明
000 指向SEH链指针
004 线程堆栈顶部
008 线程堆栈底部
00C SubSystemTib
010 FiberData
014 ArbitraryUserPointer
018 FS段寄存器在内存中的镜像地址
020 进程PID
024 线程ID
02C 指向线程局部存储指针
030 PEB结构地址(进程结构)
034 上个错误号
mov eax,fs:[0x18] ; 获得当前线程的TEB地址
mov eax,[eax+0x30] ; 在TEB偏移30h获得PEB地址
TIB+18h 是TIB的反身指针 指向PEB的首地址 因此可省略而直接使用fs:[30h] 得到自己进程的PEB
从XP SP2 引入 不同进程的PEB地址会不一样 所以不能用 本进程的FS:[28H] 的指针去读取其他进程的内容
如果是用这种方式去获得PEB的话 还要去循环验证是否为 kernel32.dll
mov eax,fs:[0x18] //获得FS段寄存器在内存中的镜像地址,即TEB的地址
mov pTeb,eax
所以不采用这种方式 在 计算机病毒揭秘 中 去寻找API地址 采用 先找 kernel32.dll 在去找API地址
FS