首页
社区
课程
招聘
[旧帖] 新手逆向遇到的问题求解答 0.00雪花
发表于: 2013-9-29 14:26 8266

[旧帖] 新手逆向遇到的问题求解答 0.00雪花

2013-9-29 14:26
8266
经常IDA打开一个PE文件开头会看到
mov ecx,14h
mov eax,0CCCCCCCCh
rep stosd
查了资料说是为了初始化局部变量,但是为什么是0CCCCCCCCh呢?

有的时候还会出现
push ebp
mov ebp,esp
and esp,0FFFFFFF0h 或者 and esp,0FFFFFC68h或者and esp,0FFFFFFF0
这里的不同的数值到底有何意思?

还有自己用vc写的小程序用OD打开后会有SE处理程序安装,请问这一步是干嘛用的??

本人新手,还望大神给予指点

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 51
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
  就是初始化啊,你管它是不是0CCCCC干嘛,C语言写的,vc的Hello Word 反汇编初始化也是0CCCCC,这个是规定,不用理它,SE程序那个是系统弄的,也不用管,直接找main就  OK了
2013-9-29 14:57
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有的时候还会出现
push ebp
mov ebp,esp
and esp,0FFFFFFF0h 或者 and esp,0FFFFFC68h或者and esp,0FFFFFFF0
这里的不同的数值到底有何意思?
2013-9-29 15:04
0
雪    币: 51
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你可以看下  函数调用原理  ,这个就是开辟占空间,
2013-9-29 15:09
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
5
0CCCCCCCCh是有特定用处的,因为CC就是Int3指令,所以在变量空间中填写这个指令,可以尽可能 的防止缓冲区溢出。如果程序执行到这里,就自动停下来,而不会再乱执行。
2013-9-29 15:12
0
雪    币: 51
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好的  你说的对
2013-9-29 15:15
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
7
只是恰巧知道而已,还得继续学习。。
2013-9-29 15:59
0
雪    币: 242
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
高手,一语中的
2013-10-25 21:58
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pvq
9
至于 "and esp,FFFFFFF0h"
因为0xFFFFFFF0 = 11111111 11111111 11111111 11110000

这个相当于把esp的最后4个bit位清零, 也就是把stack往低地址对齐使其能够被16整除...这样对32位或者64位CPU来说,所有的的stack上的基本变量都可以一次访问到(如果地址没有对齐,那么有可能CPU需要访问两次内存来获得一个8 byte的变量) -- 这样看来,实际上将stack地址在8 byte上对齐对32位甚至64位的CPU都足够了...但是问题是对于一些 SIMD (single instruction, multiple data) 的指令*规定*访问的地址必须向16 byte对齐 (也就是必须被16为整除 -- 这是从指令效率的方面来设计的).
2013-11-12 14:20
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个可以管一下的。

你知道VC里面有名的 烫烫烫烫烫 么。 就是这货。

VC为了防溢出,对栈中申请的数据,未初始化的都由编译器初始化为0xCCCC ,如果出现未初始化使用,编译器就会检测到。然后提示用户。

对应的堆中使用的是0xFEFF

2013-11-12 14:26
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pvq
11
对, 当在heap里面分配新内存的时候,VC会对新的区域加初始化为0xCDCDCDCD,

0xCD也是中断指令(interrupt,带8位直接参数的). 这样万一程序因为什么bug执行到了这段是0xCC或者0xCD的内存,就会引发中断, 从而被你觉得奇怪的那个编译器生成的SEH 代码捕捉到,而这些生成的SEH很多时候是把发生问题处的内存内容显示出来,这样如果是0xCC的话,在中文的区域设置里面,对于MBCS字符集,就是"烫烫烫烫烫";如果是0xCD的话,就是“屯屯屯屯屯”...
2013-11-12 14:45
0
雪    币: 93
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你搞个Release版本的出来再调就是xor eax,eax rep stosd了.
2013-11-12 14:57
0
游客
登录 | 注册 方可回帖
返回
//