浅析"烫烫烫烫"是怎么来的
来源:互联网 发布:学古筝的软件 编辑:程序博客网 时间:2024/06/09 22:58
在用VC写代码时,经常会遇到在栈中申请空间的并且没有被初始化的字符数组就会显示"烫烫烫烫。。。",虽然是知道编译器对栈中没有初始化的数据会进行默认的初始化工作,但是一直不得要领,在拜读《程序员的自我修养》的时候有所收获,还挺有意思的,写出来和大家分享。
代码很简单,就是在栈中申请了一个大小为4个字节的字符数组。
- int main(void)
- {
- char x[4];
- return 0;
- }
用断点查看X的值,可以发现,“烫烫”出现了:
x 0x0012ff60 "烫烫烫烫?" char [4]
查看反汇编:
- 1: int main(void)
- 2: {
- 004113A0 55 push ebp
- 004113A1 8B EC mov ebp,esp
- 004113A3 81 EC CC 00 00 00 sub esp,0CCh
- 004113A9 53 push ebx
- 004113AA 56 push esi
- 004113AB 57 push edi
- 004113AC 8D BD 34 FF FF FF lea edi,[ebp-0CCh]
- 004113B2 B9 33 00 00 00 mov ecx,33h
- 004113B7 B8 CC CC CC CC mov eax,0CCCCCCCCh
- 004113BC F3 AB rep stos dword ptr es:[edi]
- 3: char x[4];
- 4: return 0;
- 004113BE 33 C0 xor eax,eax
- 5: }
简单解释一下关键句的含义:
004113AC 8D BD 34 FF FF FF lea edi,[ebp-0CCh]
将获得的0CCh大小的栈空间首地址赋给edi
004113B2 B9 33 00 00 00 mov ecx,33h
rep的循环次数为33h
004113B7 B8 CC CC CC CC mov eax,0CCCCCCCCh
eax = 0CCCCCCCCh
004113BC F3 AB rep stos dword ptr es:[edi]
将栈空间的33H个双字节赋值为0CCCCCCCCh
而0xcccc用汉语表示刚好就是“烫”
oxcc正好是中断int 3的指令 起到保护作用
- 浅析"烫烫烫烫"是怎么来的
- 浅析"烫烫烫烫"是怎么来的
- 【AjaxPro实现机制浅析二】*.ashx文件是怎么来的?
- 阳历是怎么来的
- 情人节是怎么来的
- bzImage是怎么来的
- 母亲节是怎么来的
- 性能是怎么来的
- 微软的收入是怎么来的
- -128的补码是怎么来的
- 0x33f00038是怎么得出来的?
- 不知道积分是怎么来的
- 权限树是怎么作出来的?
- “Checked”和“Free”是怎么来的?
- 嵌入式这个名字是怎么来的?
- keygen是怎么写出来的。
- 现代处理器是怎么做出来的?
- 中国人虚荣心是怎么来的
- ACM大牛!!!!!!
- http://blog.sina.com.cn/s/blog_4d7d9b1601016kmn.html 中国剩余定理
- Android 蓝牙源码
- arm堆栈的增长方式
- ZOJ 1196 Fast Food 动态规划
- 浅析"烫烫烫烫"是怎么来的
- Android 蓝牙
- run pgp on ubuntu
- android—广播接收者BroadcastReceiver的应用开发范例
- android平台蓝牙编程
- 第十五周上机任务(杨辉三角)
- 这个只有两行的C程序至少有80%的人会判断错,不信的就进来!
- Android蓝牙的基本介绍与实现
- SOA是什么