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

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

2008-6-1 19:53
9283
push    -1
push    eax
mov     eax, dword ptr fs:[0]
push    eax
mov     eax, dword ptr [esp+C]
mov     dword ptr fs:[0], esp
mov     dword ptr [esp+C], ebp
lea      ebp, dword ptr [esp+C]
push   eax
retn

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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

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

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