首页
社区
课程
招聘
[求助]为什么main函数开始有一个memset
发表于: 2017-1-6 11:19 3811

[求助]为什么main函数开始有一个memset

2017-1-6 11:19
3811
请问为什么在main函数开始会有一个memset函数将一段栈空间设置为0xCC,这样做是为了什么?

以下是IDA的反汇编结果。

int main_0()
{
  char v1; // [sp+Ch] [bp-48h]@1
  int v2; // [sp+4Ch] [bp-8h]@1
  int v3; // [sp+50h] [bp-4h]@1

  memset(&v1, 0xCCu, 0x48u);
  v3 = 8;
  v2 = 0x16;
  printf("b = %d\n", 0x16);
  return 0;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 70
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你这肯定是debug版
2017-1-6 11:38
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
楼上正解, 把整个栈空间初始化为0xCC是为了进行缓冲区溢出检查
2017-1-6 11:44
0
雪    币: 262
活跃值: (115)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
谢谢,我明白了。
2017-1-6 12:22
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Opcode Instruction 64-Bit Mode    Compat/ Leg Mode        Description
CC        INT 3         Valid               Valid                             Interrupt 3—trap to debugger.

单步中断指令的机器码是0xCC, 插入这么些个int 3应该是为了防止数组、字符串等在函数调用的时候操作不当,数据溢出到意料之外的地方被当做指令来执行,在执行之后发生中断来防止其他更坏的情况发生吧。个人观点。。
2017-1-6 18:21
0
游客
登录 | 注册 方可回帖
返回
//