首页
社区
课程
招聘
[求助]以下汇编代码何解?(很短,就几行)
发表于: 2008-6-1 19:53 9812

[求助]以下汇编代码何解?(很短,就几行)

2008-6-1 19:53
9812
收藏
免费 7
支持
分享
最新回复 (22)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很好玩的代码。。。
2008-6-1 20:02
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
3
why? 就这一段代码出现了很多次,不知道有什么作用?
2008-6-1 20:04
0
雪    币: 1137
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
期待二楼的讲解哈子
我这等小菜也学一点东东
2008-6-1 20:49
0
雪    币: 236
活跃值: (16)
能力值: ( 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
不知道对不对,等高手来吧。
2008-6-1 22:31
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哎,都看不大懂,关注中。
2008-6-2 12:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
就是高级语言中的异常处理的设置,有点像VB中的on error goto ErrHandle.
2008-6-2 13:44
0
雪    币: 2067
活跃值: (82)
能力值: ( 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
简单明了
2008-6-2 14:27
0
雪    币: 107
活跃值: (12)
能力值: ( 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]处,不具有通用性。
2008-6-2 15:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
没有看出什么东西 一样关注
2008-6-2 15:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
天书啊,完全不懂````````
2008-6-3 12:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
那个retn什么意思?
没有任何pop就返回,那谁负责平衡栈
那段代码是不是贴错了或者中间少了某部分?
2008-6-3 13:25
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
就是POP 呢  没有怎么平衡啊
2008-6-3 23:11
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
精采!强烈学习中!
2008-6-4 09:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
push   eax
retn

这个eax保存的就是返回指针
2008-6-4 12:23
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
hjjdebug的回答的太好了,努力学习中。
2009-5-3 13:42
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
堆栈不平衡吧,请高手指点一下
2009-5-3 19:00
0
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
代码还原
push ebp
mov ebp,esp
push eax
push fs:[0]
mov fs:[0],esp
push -1
ret;这里就会发生异常,跳到先前的eax中的地址去。
2009-5-5 09:54
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
完全是路过,本人一点都不懂,只是有一颗想学习的心
2009-5-5 11:43
0
雪    币: 686
活跃值: (540)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
额。。貌似比较难。
2009-5-5 18:20
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这是c调用方式,调用者负责平衡堆栈,这段代码似乎应该是在安装异常处理程序
2009-5-6 09:32
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
mov     eax,dword ptr [esp+C] 就是返回的地址

push    eax
retn
2009-5-6 23:53
0
雪    币: 0
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
hjjdebug的回答的太好了,努力学习中。
2009-5-7 10:39
0
游客
登录 | 注册 方可回帖
返回
//