fs
来源:互联网 发布:多益网络账号游戏绑定 编辑:程序博客网 时间:2024/04/28 20:25
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地址
偏移 说明
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基址
SEH异常在汇编中实现,据我的理解是这样的
push ******** //将需要返回的地址压入堆栈
mov eax,dword ptr fs:[0] //fs:[0]是指向堆栈里面的SEH 那么这句的意思就是将堆栈SEH地址传送到寄存器EAX.
push eax //fs[0]压入堆栈,
mov dword ptr fs:[0],esp //构造一个ERR结构,这句完成后,堆栈里面最上方就有一个SEH记录了
上面的就是SEH结构,下面的就是让程序产生异常.
产生异常最白的理解方法就是让程序出错,不是跳到其他垃圾地方,而是让语句出错
例如div 0 也就是除以0 大家都知道0是不能被除的```所以程序就出错了```
- FS
- fs
- fs
- fs
- fs
- fs
- fs
- FS
- FS-V1、FS-M1、FS-M2、FS-T1、FS-T2
- fs寄存器
- FS寄存器
- FS寄存器
- fs:[124]
- FS寄存器
- FS Register
- fs shell
- Gluster fs
- fs寄存器
- C/C++语言中的void及void指针总结
- iframe scroll 滚动条置顶
- 禚 的iphone开发专栏
- 难道是360安全卫士惹的祸?
- kmyhy的专栏
- fs
- Qt drag & drop
- 简单调试打印函数
- 一地鸡毛——软件项目中的人际困局
- Android中的网络时间同步
- const 修饰的只读变量
- QT和VS冲突的解决方法
- 深入浅出SharePoint——更新Task Item
- Column does not belong to table error!