0x00 说明
“烫”这个汉字在计算机程序执行出错时老是出现,特别有意思,尤其在Windows环境下执行越界访问的程序,会打印出一串“烫烫烫…”,作者以前在VS下写程序的时候就出现过一直打印“烫”,当时没有去仔细研究研究为什么是“烫”这个汉字,现在特把这个原因说明。
0x01 “烫”的GBK编码
首先,不得不提到“烫”的GBK编码为“0xCCCC”,同时在x86系统中“0xCC”代表汇编指令”INT 3“的机器码。
INT 3:一个中断指令,例如设置软中断与这个指令相关,那么一段内存全是“CCCCCC…”,就会一直产生“烫”。
另外还有一个例子,在往单片机的液晶显示上显示汉字的时候,有时候乱码也会出现“烫”,因为对于有些液晶,如12864,其汉字库就是GBK编码。
0x02 较简单的测试程序
运行环境
VS2013
C代码
#include "stdafx.h"
void foo(void)
{
int a=0, b=0, c=2;
printf("hello,world\n");
}
int main()
{
int i=0, j=0;
char array[10];//声明一个数组,没有初始化
printf("%s\n",array);//使用字符串的形式打印
foo();
return 0;
}
汇编程