-
-
[求助]SEH fs:[0]地址有限制吗?
-
发表于:
2007-9-1 18:10
5212
-
如题。
我试了下
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。
[课程]Linux pwn 探索篇!