首页 > 其他分享 >编译与字符串溢出总结

编译与字符串溢出总结

时间:2023-11-20 17:22:06浏览次数:33  
标签:字节 12345678 编译 地址 字符串 溢出

大家都知道字符串不能超出定义的长度,那么这是为什么呢?

编译与字符串

本次总结将用编译原理的知识来解释其中的原理。
首先,程序编译时,函数编译将产生一个栈,

栈按从高地址到低地址的顺序入栈,在函数参数、返回地址等入栈后,局部变量入栈。假设有字符数组
char str[4];
而后给它赋值有
str="12345678";
这个字符串"12345678"共有8个字节,而我们定义时只有4个字节,那么多出的4个字节将会往下存储,覆盖掉底下的控制链,就会出错,但是仍然能够返回调用函数继续执行语句,原因就在于,此时返回地址并没有被覆盖。这就是为什么有时候数组溢出仍能输出执行,而有时候就不行。

标签:字节,12345678,编译,地址,字符串,溢出
From: https://www.cnblogs.com/yuan-f/p/17844418.html

相关文章