能力值:
( LV2,RANK:10 )
|
-
-
2 楼
debug 还是 release版本的啊
在调试原理里面有讲到,为了帮助检查错误和支持调试,保证函数返回时栈指针的值与进入函数时一致。以便万一cpu意外执行到该区域时,可以中断到调试器。0xCC 就是INT3 指令
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
等高手解答吧,我也不知道!
|
能力值:
( LV3,RANK:30 )
|
-
-
4 楼
回答2楼
是debug版本的。
能不能详细一点说说0xCC?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
断点异常INT 3指令的机器码为11001100b 就是 0xCC
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
00401019 lea edi,[ebp-44h]
0040101C mov ecx,11h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
就是这几句代码的作用吧
我以前看有人回答过,想不起回答了,反正我觉得没必要去理他
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
sub esp,44h
把栈顶抬高44H(开辟一段栈空间供使用)
00401019 lea edi,[ebp-44h]
0040101C mov ecx,11h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
把这段栈内存全部填充为CC(int 3)
当然,这段代码用到的栈空间只有变量x的4个字节
开辟这么多,就是编译器的效果了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
CC就是INT 3的机器码,这边是开辟变量内存空间,
初始化为cc,这样如果变量区被其他指令调用的时候,
就会调用int 3中断(一般来说,变量区不应该被调用的)
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
了解。有点类似于代码陷阱(我的单片机书里写的)。。为了防止esp由于干扰而指到堆栈中的一种方式是吧。
|
能力值:
( LV7,RANK:100 )
|
-
-
10 楼
编译器给main分配足够的局部变量c debug下
0xCC 对应汇编指令 int 3 ,stack上的空间填充值
oxCD 是CRT运行库填充的值,heap的空间
debug状态,为初始化的内存都是0xcc,释放过的内存都是0xdd。
具体看下:http://fpcfjf.blog.163.com/blog/static/5546979320091434614870/
|
|
|