热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++开发分享C中未初始化指针的危险究竟是什么?

我正在努力处理C,因为我通过JimTrevor的“旋风:C语言的安全方言”为PL课程工作。特雷弗和他的合着者正试图制作一个安全的C版本,因此他们用他们的语言消除了未初始化的指针。在

我正在努力处理C,因为我通过Jim Trevor的“ 旋风:C语言的安全方言 ”为PL课程工作。 特雷弗和他的合着者正试图制作一个安全的C版本,因此他们用他们的语言消除了未初始化的指针。 在未初始化的指针上搜索一下 ,似乎未初始化的指针指向内存中的随机位置。 似乎这一点使它们不安全。 如果引用非itilialized指针,则跳转到内存的不安全部分。 期。 但特雷弗谈论它们的方式似乎暗示它更复杂。 他引用了下面的代码,并解释说当函数FrmGetObjectIndex取消引用f时,它不是访问有效指针,而是访问一个不可预测的地址 – 当分配f的空间时堆栈上的任何内容。

什么是Trevor的意思是“当f的空间分配时,堆栈中的任何东西”? 默认情况下,“未初始化”指针是否已初始化为内存中的随机位置? 或者他们的“随机”行为是否与为这些指针分配的内存有关,因为堆栈上的意外行为会填充奇怪的值(然后被引用)。

Form *f; switch (event->eType) { case frmOpenEvent: f = FrmGetActiveForm(); ... case ctlSelectEvent: i = FrmGetObjectIndex(f, field); ... } 

    什么是Trevor的意思是“当f的空间分配时,堆栈中的任何东西”?

    他的意思是,在大多数汇编语言中,使用单独的指令来保留堆栈上的空间并在新保留的空间内写入初始值。 如果C程序使用未初始化的变量,程序通常会在运行时执行保留堆栈空间但没有设置指令的指令。 当使用指针时,它将字面上包含在保留空间之前堆栈上的位模式。 在好的情况下,这将是一个无效的地址。 在不好的情况下,这将恰好是一个有效的地址,并且效果将是不可预测的。

    这只是一种典型行为。 从理论的角度来看,使用不确定值是未定义的行为 。 可能会发生比简单地访问无效地址或有效地址更奇怪的事情(使用意外或故意使用未初始化数据(非地址)的示例)。


    以下是Cyclone旨在阻止C的受限子集的危险:

     int a, *p; int main(int c, char **v){ int l, *lp, i; if (c & 1) a = l + 1; // danger if (c & 2) *lp = 3; // danger if (c & 4) { p = &a; for (i=0; i<=1; i++) { int block_local; *p = 4; // danger p = &block_local; } } } 

    在最后一个危险的行中,实际上,很可能将4写入变量block_local ,但实际上,在第二次迭代中, p是不确定的,程序不应该访问*p ,并且它是未定义的行为什么时候呢。

    在现代操作系统上,危险是核心转储。 在没有内存管理的早期系统上,可能存储器映射到外部硬件的i / o,危险程度完全不同。

      以上就是c/c++开发分享C中未初始化指针的危险究竟是什么?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
      • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
      • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
      • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
      • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
        本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
      • 开发笔记:实验7的文件读写操作
        本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
      • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
      • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
      • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
      • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
      • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
      • Python正则表达式学习记录及常用方法
        本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
      • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
      • Java学习笔记之面向对象编程(OOP)
        本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
      • Go Cobra命令行工具入门教程
        本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
      author-avatar
      mobiledu2502881467
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有