这是程序代码的片段:

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

 &authenticated;
 &guard1;
 &guard2;

那么,当引用在程序代码中作为单个表达式站在那里时,这意味着什么呢?

编辑:更多上下文:它是在debian服务器上用gcc编译的,并且与一个安全项目有关,在该项目中您可能会溢出buf数组。

最佳答案

考虑到这是用于安全项目的,我的猜测是这些语句旨在防止编译器优化authenticatedguard1guard2变量。如果以后在函数中不使用这些变量,则兼容的C编译器可以对其进行优化,从而更改函数调用的堆栈框架的布局。

从技术上讲,由于这些语句没有副作用,因此编译器原则上也可以对其进行优化。但是,我的理解是预期的编译器不会执行此操作(不是它无法执行操作,只是它无法执行操作)。这样,堆栈帧的布局将被两个不是空终止符的authenticated值屏蔽char变量,从而可能会难以覆盖authenticated。当然,听起来您的任务是专门更改authenticated,所以这不是万无一失的。 :-)

希望这可以帮助!

关于c - &variable作为表达式在c中的含义是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26766220/

10-12 23:56