基于tcp的网络编写应用程序序的编写结果为什么会有烫烫烫

拒绝访问 | www. | 百度云加速
请打开cookies.
此网站 (www.) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(38f5abbbd67f43d1-ua98).
重新安装浏览器,或使用别的浏览器Posts - 554,
Articles - 272,
Comments - 1118
号角声在远方又吹响/何时回故乡/又怎么回故乡/曾经的你现在又怎样/是谁的新娘/为谁做衣裳/
火跳动着绝望/谁在低声吟唱/说遗忘者的哀伤 /用战斗证明希望
11:52 by Rollen Holt, ... 阅读,
在Debug&模式下,VC&会把未初始化的栈内存全部填成0xcc,当字符串看就是&烫烫烫烫&&会把未初始化的堆内存全部填成0xcd,当字符串看就是&屯屯屯屯&&可以让我们方便地看出那些内存没初始化但是Release&模式下不会有这种附加动作,原来那块内存里是什么就是什么
名字&&&&&&描述0xCD&& Clean Memory&&&&申请的内存由malloc或者new完成0xDD&& Dead Memory&&&&释放后的内存,用来检测悬垂指针0xFD&& Fence Memory&&&&动态申请后的内存值,没有初始化。用来检测数组的下标界限0xAB&& (Allocated Block?)&&&&使用LocalAlloc()分配的内存&0x0DF0ADBA Bad Food&&&&&使用LocalAlloc并且参数为LMEM_FIXED,但是还没写入0xCC&&&&使用了/GZ选项,没有初始化的自动变量在DBGHEAP.C文件中,
Microsoft's memorymanagement functions often initialize memory with special values. The followingarticle describes frequent used variants.&Microsoft Visual C++ Runtime libraryC runtime library provides it own debug codes:0xCD, 0xCDCDCDCD - New objects. New objects are filled with 0xCD when they areallocated.0xFD, 0xFDFDFDFD - No-man's land memory. Extra bytes that belong to theinternal block allocated, but not the block you requested. They are placedbefore and after requested blocks and used for data bound checking.0xDD, 0xDDDDDDDD - Freed blocks. The freed blocks kept unused in the debugheap's linked list when the _CRTDBG_DELAY_FREE_MEM_DF flag is set are currentlyfilled with 0xDD. Although in some cases you won't see magic 0xDDDDDDDD value,as it will be overwritten by another debug function (e.g. 0xFEEEFEEE forHeapFree).These constants are defined in DbgHeap.c file asstatic unsigned char _bNoMansLandFill = 0xFD; /* fill no-man's land with this*/static unsigned char _bDeadLandFill = 0xDD; /* fill free objects with this */static unsigned char _bCleanLandFill = 0xCD; /* fill new objects with this */Compiler initialisations0xCC, 0xCCCCCCCC - The /GX Microsoft Visual C++ compiler option initialises alllocal variables not explicitly initialised by the program. It fills all memoryused by these variables with 0xCC, 0xCCCCCCCC.&Windows NT memory codes0xABABABAB - Memory following a block allocated by LocalAlloc().&0xBAADF00D - "Bad Food". This is memory allocated via LocalAlloc(LMEM_FIXED, ... ). It is memory that has been allocated but not yet written to.0xFEEEFEEE - OS fill heap memory, which was marked for usage, but wasn'tallocated by HeapAlloc() or LocalAlloc(). Or that memory just has been freed byHeapFree().
好了,现在来解释一下标题。
未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个&字符串&被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个&烫&字。
  烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  是debug中未初始化的栈变量  屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯  是debug中未初始化的堆变量
举个例子:
int main(void)
char x[4];
用断点查看X的值,可以发现,&烫烫&出现了:
x&0x0012ff60 "烫烫烫烫?"&char [4]
查看反汇编:
1: int main(void)
81 EC CC 00 00 00 sub
004113AA 56
004113AB 57
004113AC 8D BD 34 FF FF FF lea
edi,[ebp-0CCh]
B9 33 00 00 00
B8 CC CC CC CC
eax,0CCCCCCCCh
004113BC F3 AB
dword ptr es:[edi]
char x[4];
004113BE 33 C0
简单解释一下关键句的含义:
004113AC 8D BD 34 FF FF FF lea&&&&&&&& edi,[ebp-0CCh]
将获得的0CCh大小的栈空间首地址赋给edi
B9 33 00 00 00&& mov&&&&&&&& ecx,33h
rep的循环次数为33h 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的指令 起到保护作用基于TCP的聊天程序设计与开发_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于TCP的聊天程序设计与开发
总评分4.4|
浏览量971156
用知识赚钱
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 编写控制台应用程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信