#include<stdio.h>
short a = 10;//强符号
short b = 20;
int main()
{
Func();
printf("a: %d\n",a);
printf("b: %d\n",b);
return 0
}
int a;//弱符号 不确定外部是否存在强符号 *COM*
void Func()
{
a = 100;
}//生成指令:mov dword ptr[a],64
a=100
b=0
强弱符号
强符号:已初始化的符号
弱符号:未初始化的符号
规则:
两强: 编译错误
一强一弱: 编译正确 取强符号
两弱: 编译器处理
调用Func()后
此时的.data段只保留了4个字节的长度(a 2字节,b 2字节),所以给a赋值100时,64 00 00 00以越界的方式覆盖掉b的值。