这是程序代码的片段:
char authenticated = 0;
char guard1 = 234;
char guard2 = 234;
//more variables initliased...
char buf[128];
&authenticated;
&guard1;
&guard2;
那么,当引用作为程序代码中的单个表达式站立时,这意味着什么?
编辑:更多上下文:它是在debian服务器上用gcc编译的,并且与一个安全项目有关,在该项目中您可能会溢出buf数组。
考虑到这是一个安全的项目,我的猜测是,这些声明的目的是阻止编译器优化掉了authenticated
,guard1
和guard2
变量。如果以后在函数中不使用这些变量,则兼容的C编译器可以优化它们,从而更改函数调用的堆栈框架的布局。
从技术上讲,由于这些语句没有副作用,因此编译器原则上也可以对其进行优化。但是,我的理解是预期的编译器不会执行此操作(不是它无法执行操作,只是它无法执行操作)。这样,堆栈框架的布局将使用authenticated
两个char
不是null终止符的值来屏蔽变量,这可能会使覆盖起来有些棘手authenticated
。当然,听起来您的任务是专门更改的authenticated
,所以这不是万无一失的。:-)
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句