C++栈空间初始化,该怎么解决
C++栈空间初始化
00F233B0 push ebp
00F233B1 mov ebp,esp
00F233B3 sub esp,0CCh
00F233B9 push ebx
00F233BA push esi
00F233BB push edi
00F233BC lea edi,[ebp-0CCh]
00F233C2 mov ecx,33h
00F233C7 mov eax,0CCCCCCCCh ;初始化栈空间
00F233CC rep stos dword ptr es:[edi]
.......
以上是一个main函数起始部分的汇编代码,其中栈空间被初始化为0CCCCCCCCh(十六进制CCCCCCCC),
请问这个0CCCCCCCCh有什么特殊含义么,为什么不直接初始化为零呢?
------解决方案--------------------
vc debug初始化填充0xCC,为了方便调试查看,防止未初始化的情况发生,
要知道release模式是不会自动帮你填任何东西的,也就是所谓初始化,
C++不会做任何多余的事
------解决方案--------------------
这是一种防御式的代码调试方法,CC除了作为无效区域的标记,还是x86指令集中的INT 3单步中断的机器码,可以暂时停止指令的执行。
00F233B0 push ebp
00F233B1 mov ebp,esp
00F233B3 sub esp,0CCh
00F233B9 push ebx
00F233BA push esi
00F233BB push edi
00F233BC lea edi,[ebp-0CCh]
00F233C2 mov ecx,33h
00F233C7 mov eax,0CCCCCCCCh ;初始化栈空间
00F233CC rep stos dword ptr es:[edi]
.......
以上是一个main函数起始部分的汇编代码,其中栈空间被初始化为0CCCCCCCCh(十六进制CCCCCCCC),
请问这个0CCCCCCCCh有什么特殊含义么,为什么不直接初始化为零呢?
------解决方案--------------------
vc debug初始化填充0xCC,为了方便调试查看,防止未初始化的情况发生,
要知道release模式是不会自动帮你填任何东西的,也就是所谓初始化,
C++不会做任何多余的事
------解决方案--------------------
这是一种防御式的代码调试方法,CC除了作为无效区域的标记,还是x86指令集中的INT 3单步中断的机器码,可以暂时停止指令的执行。