首页
社区
课程
招聘
[求助]非常奇怪的函数
发表于: 2008-4-19 20:42 5752

[求助]非常奇怪的函数

2008-4-19 20:42
5752
收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对了,顺便说一下, 该程序时用 C++ 编译的。
实在太奇怪了,估计没有人能回答/。
2008-4-19 20:56
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
3
个人认为做这样的分析最好能够结合寄存器和堆栈值的变化来分析~
例如eax初始值是 $1004,那进入0054B410之后会发生什么变化呢?

或许不是最好的办法,但是不妨试一下~
2008-4-20 00:14
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2楼这位大哥,不知阁下又没有注意最后 2行,
  push eax
   ret
就这2行就够受的
都不知道 函数返回到什么地方去了,
还有就是 这个程序没有办法动态跟踪。所以还拿出来求助~

不过还是感谢 。
2008-4-20 06:25
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
补充一点,我猜想可能是  分配 1004 个byte 空间(局部变量)
比如 byte  bytes[]=new bytes[1004]
2008-4-20 06:28
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
用IDA看看吧,我估计IDA应该识别出来是probexx之类的吧,是栈上的内存分配

另外,看了一下lz的发帖时间,你不会是从昨天晚上8点一直搞到今天早上吧,呵呵。如果有这股劲,那什么都能高定的。不过我是菜鸟,只是随便说说了,不能作为指导意见。
2008-4-20 12:10
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
7
这样,你满意了吧!

确实是如justlovemm所说,是最常见的库函数__alloc_probe(size)
楼主的猜想很正确,向楼主这种求知精神表示敬意。

其函数的作用是分配堆栈空间,对堆栈空间进行安全检查。
算法如下,
当要求分配的堆栈空间小于1000时,
  neg     eax
  add     eax, esp
  add     eax, 4        
; 这三条指令作用是算出正确的堆栈指针,最后加4,是因为在调用此函数时本身往堆栈中压入了4字节的返回地址

test    [eax], eax
; 对堆栈桢底部进行非破坏性的读测试,其实源操作数可以是任意寄存器,比如test [eax], ebx
使用eax是效率最高的
; 读测试时,如果当前堆栈不可存取,便会出错。不用等到caller函数执行时出错。是程序可以采用的内存管理安全措施之一,其它还有Heap Cookie, ...

xchg    eax, esp
; esp被赋值,与原值的差值是caller函数需要的堆栈桢大小
; eax被赋值,指向callee的返回地址
mov     eax, [eax]
push    eax
retn
; 只要知道eax最后等于返回地址,就不难理解这段代码了吗

当要求分配的堆栈空间大于1000时,以0x1000为分配单位,小心的分配,小心的测试
probepage:
sub     ecx, 1000h        ; ecx是堆栈指针
sub     eax, 1000h        ; eax是尺寸
test    [ecx], eax        ; 非破坏性读测试
cmp     eax, 1000h
jnb     short probepage   ;

在理解的时候,注意堆栈上的返回地址,堆栈指针的传递,test指令的意图,...
剩下的代码再通过上面的代码举一反三,就知道意思了。
2008-4-20 16:56
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
  


哈哈~~~ 知道了~~~
不过还是谢谢  n 个恢复的人~~~

我在 chkstk.asm 文件中已经找到答案~~
因为版本不同, chkstk。asm 的 内容也有差异!
不过大同小异~~~
欧也~~~~~
2008-4-20 18:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了
2008-4-20 21:46
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
10
学习了。
不看几位牛人的解释,我还以为又是扭曲变换。怎么库函数也用这种push eax,ret.
2008-4-20 22:30
0
游客
登录 | 注册 方可回帖
返回
//