这是程序代码的片段:
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
,所以它并非万无一失.:-)
希望这可以帮助!