c表达式和变量是什么意思

 LEE渡 发布于 2022-12-12 20:22

这是程序代码的片段:

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

 &authenticated;
 &guard1;
 &guard2;

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

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

1 个回答
  • 考虑到这是一个安全的项目,我的猜测是,这些声明的目的是阻止编译器优化掉了authenticated,guard1guard2变量.如果稍后在函数中不使用这些变量,则兼容的C编译器可以将它们优化掉,从而改变函数调用的堆栈帧的布局.

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

    希望这可以帮助!

    2022-12-12 20:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有