能力值:
( LV2,RANK:10 )
|
-
-
2 楼
很好玩的代码。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
why? 就这一段代码出现了很多次,不知道有什么作用?
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
期待二楼的讲解哈子
我这等小菜也学一点东东
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
是关于SEH的吧。
push eax ;保存EAX,这个应该是ERR 结构的handler
mov eax, dword ptr fs:[0] ;当前进程异常指针进EAX
push eax ;填充 err的prev结构
mov eax, dword ptr [esp+C];
mov dword ptr fs:[0], esp
不知道对不对,等高手来吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
哎,都看不大懂,关注中。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
就是高级语言中的异常处理的设置,有点像VB中的on error goto ErrHandle.
|
能力值:
( LV9,RANK:180 )
|
-
-
8 楼
mov eax, 401000h
call 你的代码
就等于这样:
push ebp ;Prologue
mov ebp, esp
push -1
push 401000h ;ExceptionHandler
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
Prologue + Set ExceptionHandler
简单明了
|
能力值:
( LV8,RANK:130 )
|
-
-
9 楼
该代码中关于SEH 部分注释:
SEH 链基于如下结构
_EXCEPTION_REGISTRATION struc
prev dd ?
handler dd ?
_EXCEPTION_REGISTRATION ends
就是说,前面一个Double word 是旧的Exeption Handle, 后面一个是新的Execption Handle
Exeption Handle 的链头存在FS:[0] 位置处。
注意,在栈中,先入栈在高地址,故handler 被先入栈,旧handler 后入栈。
现在标注一下代码
push -1
push eax ;新handler
mov eax, dword ptr fs:[0]
push eax ;旧handler
mov eax, dword ptr [esp+C]
mov dword ptr fs:[0], esp ;重设Exception 链表头, 至此exception 链表更改完成
mov dword ptr [esp+C], ebp
lea ebp, dword ptr [esp+C]
push eax
其它未标注部分,与Exception 无关, 与你的编译语言有关,像是对栈帧的操作,它把[ebp+c]内容存入栈顶,而把ebp存入[esp+c]处,不具有通用性。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
没有看出什么东西 一样关注
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
天书啊,完全不懂````````
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那个retn什么意思?
没有任何pop就返回,那谁负责平衡栈
那段代码是不是贴错了或者中间少了某部分?
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
就是POP 呢 没有怎么平衡啊
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
精采!强烈学习中!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
push eax
retn
这个eax保存的就是返回指针
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
hjjdebug的回答的太好了,努力学习中。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
堆栈不平衡吧,请高手指点一下
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
代码还原
push ebp
mov ebp,esp
push eax
push fs:[0]
mov fs:[0],esp
push -1
ret;这里就会发生异常,跳到先前的eax中的地址去。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
完全是路过,本人一点都不懂,只是有一颗想学习的心
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
额。。貌似比较难。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
这是c调用方式,调用者负责平衡堆栈,这段代码似乎应该是在安装异常处理程序
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
mov eax,dword ptr [esp+C] 就是返回的地址
push eax
retn
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
hjjdebug的回答的太好了,努力学习中。
|
|
|