在c中,&变量作为表达式是什么意思

时间:2014-11-05 20:13:09

标签: c reference

这是程序代码的片段:

 char authenticated = 0;
 char guard1 = 234;
 char guard2 = 234;
 //more variables initliased...
 char buf[128];

 &authenticated;
 &guard1;
 &guard2;

那么当引用作为程序代码中的单个表达式存在时,它意味着什么?

编辑:更多上下文:它是在debian服务器上使用gcc编译的,它与安全项目相关,您可以在其中溢出buf数组。

1 个答案:

答案 0 :(得分:6)

鉴于这是针对安全项目的,我的猜测是这些语句旨在阻止编译器优化掉authenticatedguard1guard2变量。如果稍后函数中没有使用这些变量,那么兼容的C编译器可以优化它们,改变函数调用的堆栈帧布局。

从技术上讲,由于这些语句没有副作用,编译器原则上也可以优化它们。但是,我得到的意思是预期的编译器没有这样做(不是它不能这样做,只是它不能这样做)。这样,堆栈帧的布局将authenticated变量屏蔽两个char值,这些值不是空终止符,可能会使覆盖authenticated有点棘手。当然,听起来你的任务是专门改变authenticated,所以它并非万无一失。 : - )

希望这有帮助!