这是程序代码的片段:
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
变量,从而可能会难以覆盖authenticated
。当然,听起来您的任务是专门更改authenticated
,所以这不是万无一失的。 :-)
希望这可以帮助!
关于c - &variable作为表达式在c中的含义是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26766220/