首页
社区
课程
招聘
[求助]SEH fs:[0]地址有限制吗?
发表于: 2007-9-1 18:10 5213

[求助]SEH fs:[0]地址有限制吗?

2007-9-1 18:10
5213
如题。
我试了下
GolbalAlloc(0,0x8);
//HeapAlloc(GetProcessHeap(),0,0x8);
//mov eax,g_mem;//八字节的全局变量
mov edx,fs:[0]
mov [eax],edx
mov [eax+4],ErrorProc
mov fs:[0],eax
都不行。只能按照seh in asm作者所说的用本堆栈的地址才行吗?
push ErrorProc
push fs:[0]
mov fs:[0],esp
但是这个的缺点很明显,在高级语言中都是这样调用函数的.
push ebp
mov ebp,esp
//代码,如call xxxxxxxx。或以上的SEHChainFunc
mov esp,ebp
pop ebp
retn
如果是这样的,不管是自己构造的还是内联汇编,堆栈肯定会被恢复(自己构造的CALL虽然该层不会恢复,但是上层肯定会恢复的),这样就会导致指针失效?换句话说只能在每个CALL里每次都要重新构造链接SEH Chain?(本人目的是在其他语言中实现SEH异常处理,不是在C/C++中处理)
。。。。。
还请大侠赐教。我只先到一个方法,就是直接备份并覆盖原来的SEH。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 215
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我又重新看了下<<seh in asm>>,作者好象说可以用自己的内存空间,为什么我这边就是不行呢?
2007-9-3 17:19
0
雪    币: 1746
活跃值: (287)
能力值: (RANK:450 )
在线值:
发帖
回帖
粉丝
3
这个问题  前几天dummy刚告诉  只能在堆栈里, 不能放其他地方, 详情可以问下dummy

至于楼主说的情况, 可以在线程入口处就安装SEH处理项, 可避免函数栈桢导致的恢复
2007-9-3 21:35
0
雪    币: 215
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
啊,郁闷。。。。看来只能直接挂接在原handle上。。。至于放在线程入口,这个不好办。因为如果是模块化代码的话难以控制线程(当然hook创建线程API除外)
2007-9-4 09:10
0
雪    币: 215
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
斑竹在哪?帖子怎么被移过来了?
2007-9-5 19:14
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Kernel32!DispatchExceptionHandlers()函数对SEH_FRAME的有效性进行了检测,必须符合两个条件:

1, teb->stack_limit <= seh_frame <= teb->stack_base
2, seh_frame地址必须对齐(0 == (seh_frame & 3))

显然你的方法不符合条件1。
2007-9-6 03:44
0
游客
登录 | 注册 方可回帖
返回
//