精华内容
下载资源
问答
  • 空指针引用故障(空指针解引用)

    千次阅读 2019-01-09 18:52:45
    其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元 。当指针指向无效内存地址时对其引用,有可能...

    C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(Memory Leakage)、内存的重复释放、空指针解引用(NullPointer Dereference)

    其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元 。当指针指向无效内存地址时对其引用,有可能产生不可预见的错误,导致软件系统崩溃。空指针引用缺陷可能导致系统崩溴、拒绝服务等诸多不良后果。

     

    展开全文
  • 提出了一种基于指针分析的空指针引用故障测试方法,分析了指针与内存地址之间的映射关系,并给出了故障测试算法。实验结果表明,该方法能够有效检测空指针引用故障。
  • 基于区域内存模型的空指针引用缺陷检测
  • 为实现基于静态分析技术充分地检测出C程序中的空指针引用缺陷,提出了一种基于属性可靠分析的缺陷检测方法。首先介绍了空指针引用缺陷模式及特征。然后针对空指针引用缺陷的检测特点提出了属性可靠分析理论,并将...
  • 基于判断逻辑的空指针引用故障检测,王锐强,金大海,空指针引用故障是程序中非常常见的一类故障,国内外有大量的机构组织在研究如何检测这类故障,但是大多数的成果都有其自身的局限
  • 一种多敏感空指针引用错误的静态检测方法,白杨,王瑀屏,空指针引用错误是一种常见的、难以发现和避免的程序错误。针对该错误,结合传统静态分析方法和符号执行方法,提出一种过程内流敏
  • 空指针引用错误是一种常见的、难以发现和避免的程序错误。针对该错误,结合传统静态分析方法和符号执行方法,提出一种过程内流敏感、路径敏感和过程间上下文敏感的多敏感静态分析方法。对全局指针、局部指针以及函数...
  • 3S CoDeSys运行时工具包空指针引用

    千次阅读 2014-03-21 22:56:41
    原文地址:http://ics-cert.us-cert.gov/advisories/ICSA-14-030-01 ...译文地址: 译文作者:ICS-CERT   概述 独立研究者NicholasMiles发现了Smart SoftwareSloutions(3S) CoDeSys运行时工具包的空指针引用漏洞。

    原文地址:http://ics-cert.us-cert.gov/advisories/ICSA-14-030-01

    译文地址:http://www.ics-cert.com.cn/?p=195

    译文地址:http://blog.csdn.net/icscert/article/details/21749007

    译文作者:ICS-CERT

     

    概述

    独立研究者NicholasMiles发现了Smart SoftwareSloutions(3S) CoDeSys运行时工具包的空指针引用漏洞。3S已经发布了更新,修正这一漏洞。Nicholas Miles已经测试了更新,确认漏洞已经修正了。

    这一漏洞可以被远程利用。

    影响产品

    如下版本的CoDeSys受影响:

    • CoDeSys运行时工具包V2.4.7.44以前版本

    影响范围

    如果被利用,攻击者能够远程利用此漏洞导致运行时工具应用程序中的系统崩溃。

    对于每个组织机构的影响取决于每个组织特有的多方面因素。NCCIC/ICS-CERT建议各组织机构基于自身的操作环境、架构和产品情况来评估这些漏洞产生的影响。

    背景

    3S是一个德国的公司,在德国和北京设有办事机构。3S开发软件应用于各种各样的可编程控制器和工业控制器。3S也开发可视化应用程序(人机界面),工程桌面编程平台,安全模块和现场控制器。

    受影响的产品,CoDeSys运行时工具,是嵌入在第三方的软件中,这些软件应用于各种各样的厂商的SCADA系统中。据3S的消息,CoDeSys的部署跨多个行业,包括关键制造、楼宇自动化、能源、交通等等。3S估计,这些产品应用在全球范围。

    漏洞特征

    漏洞概述

    空指针引用a

    CoDeSys运行时工具中的一个指针,希望其值是有效的,但是这一指针的值为NULL。通过引用这一空指针,攻击者能够使运行时工具崩溃。

    这一漏洞被定义为CVE-2014-0757b。CVSS v2的分数为4.3,CVSS向量字符串为(AV:N/AC:M/Au:N/C:N/I:N/A:C).c

    漏洞详细信息

    可利用性

    本漏洞可以被远程利用

    Exp代码

    目前还没有发现针对此漏洞的Exp代码被公布出来。

    难度

    具有中等技术水平的攻击者可以利用此漏洞。

    解决办法

    3S已经发布了更新,可以在3S CODESYS的的下载页下载:

    http://www.codesys.com/support-training/self-help/downloads-updates.html

    请联系CODESYS支持中心来了解更新的额外信息。

    NCCIC/ICS-CERT鼓励所有者采取额外的措施来保护这些风险及其他的安全风险。

    • 尽可能的少暴露控制系统设备或系统自身的网络,并确保他们不被互联网访问。
    • 在本地控制系统网络和远程设备之间部署防火墙,并将控制网络与企业网络隔离。
    • 如果需要远程访问,采用安全的方法,例如VPN,VPN被认为是唯一安全的访问方式。

    NCCIC/ICS-CERT当然还提供了针对工业控制信息安全方面的建议在此路径下

    http://ics-cert.us-cert.gov/content/recommended-practices.

    很多建议是可以读的,并且可以下载,包括《采用纵深防御策略来提高工业控制系统信息安全》。NCCIC/ICS-CERT 建议各部门进行在部署安全防御时,先适当的进行安全分析和风险评估。

    其他相关的解决方案指导和建议发布在了NCCIC/ICS-CERT的技术信息文章上,ICS-TIP-12-146-01Bg,该文章可以在NCCIC/ICS-CERT的网站上下载。

    各组织机构如果发现了一些有恶意嫌疑的程序,可以将其报告给NCCIC/ICS-CERT来跟踪和对应这些意外。

    参考文档

    展开全文
  • 介绍了一种在控制流的基础上利用故障状态机对JAVA空指针故障进行检测的方法。该方法利用变量区间来表示状态的前提条件,对程序中不可达路径进行处理,从而达到减少误报的目的。
  • 空指针引用可以传递值 今天写代码,碰到一个 空指针引用可以传递值 。 想了很久,终于想通了。 代码如下: void insert( int* &par) {  par = new int(5); //可以把存储5的地址传出去 } ...

    空指针引用可以传递值


    今天写代码,碰到一个 空指针引用可以传递值 。 想了很久,终于想通了。


    代码如下:


    void insert( int* &par)

    {

     par =  new int(5);  //可以把存储5的地址传出去

    }


    int *p = NULL;

    insert(p);


    //数组某个元素,取地址,  这个地址变量是不能作为引用的实参的。

    代码如下:

    void insert( int* &par)

    {

     par =  5; 

    }

    int a[5] = {1, 2, 3, 4, 5};

    insert(&a[0]);    //这里编译报错。invalid initialization of non-const reference of type 'Node*&' from an rvalue of type 'int*'

                               //  虽然 &a[0]  是 int *  类型的, 但它是 a[0] 的地址。  引用是某个存在的变量的别名, 这里的 地址 不是 真实存在的变量。 


    展开全文
  • 重新分析和review代码后,发现了几处可能引起问题的空指针引用。 1. 函数参数传入为空,在函数内部没有进行参数的检测。(例1) 2. 在实现一个类的构造函数时,发生异常,导致并没有构造出理解的对象

    最近,又偶尔发现在某些手机上会提示“程序异常退出”的情况,在android中,最通常的原因可能是资源引用的不正确(即findViewById函数引用的资源是错误的),或者是出现空指针问题。重新分析和review代码后,发现了几处可能引起问题的空指针引用。


    1. 函数参数传入为空,在函数内部没有进行参数的检测。(例1)

    2. 在实现一个类的构造函数时,发生异常,导致并没有构造出理解的对象,然后,再引用这个对象,其实是引用了一个null对象,导致程序发生“异常退出”。(例2)



    1. 例1:函数参数传入为空,在函数内部没有进行参数的检测。

    参考代码如下:

    调用者:

    public void run() {
        try {
            FileEngine.deleteFile(plainFilePath);
            ...

    被调者FileEngine.deleteFile的实现:

    public static boolean deleteFile(String filePath) {
        if (filePath == null) {
            return false;
        }
        File file = new File(filePath);
        if (!file.exists()) {
            return false;
        }
        if (file.isFile()) {
            return file.delete();
        } else {
            return false;
        }
    }
    

    错误异常:java.lang.NullPointerException

        atjava.io.File.<init>(File.java:277)


    分析:可以在deleteFile函数内部进行参数的null值判断;

      或者,在调用deleteFile之前,进行输入参数的check。

     或者由于明知是文件操作,可以直接进行异常的捕获。


    2. 例2:构造函数没有成功构造。

    参考代码:

    调用者:

    LogWriter.getInstance().print("setOnItemLongClickListener===========000====");

    被调用者LogWriter类中对应的函数实现:

    public class LogWriter {
        private static LogWriter mLogWriter;
        private static String mPath;
        private static Writer mWriter;
        private static SimpleDateFormat df;
    
        private LogWriter() {
            mPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test";
            File file = new File(mPath);
            if (!file.exists()) {
                file.mkdirs();
            }
            try {
                SimpleDateFormat df0 = new SimpleDateFormat("yy-MM-dd-HH-mm",Locale.getDefault());
                File logFile=new File(mPath,"Log-"+df0.format(new Date())+".txt");
                mWriter = new BufferedWriter(new FileWriter(logFile));
            } catch (IOException e) {
                e.printStackTrace();
            }
            df = new SimpleDateFormat("[yy-MM-dd HH:mm:ss]: ", Locale.getDefault());
        }
        public static LogWriter getInstance() {
            if (mLogWriter == null) {
                mLogWriter = new LogWriter();
            }
            return mLogWriter;
        }
        public void close() throws IOException {
            mWriter.close();
        }
        public void print(String log) {
            try {
                mWriter.write(df.format(new Date()));
                mWriter.write(log);
                mWriter.write("\r\n");
                mWriter.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    分析:

    这里,实现了一个单例模式LogWriter,通常情况下这个它能够正常运转。但是,LogWriter有可能创建不成功(即构造函数可能抛出异常,),导致getInstance()得到的值是null,再调用它的print函数时,就造成空指针引用。

    可见,保持构造函数的原子性,也是设计一个类时需要考虑的。


    展开全文
  • 空指针间接引用发生在应用程序间接引用其预期有效但实际为空的指针时,通常会导致崩溃或退出。 扩展描述 空指针间接引用可能在多个弱点发生后发生,如竞争条件和简单程序省略等。 相关视图 与“研究层面”视图...
  • 空指针引用

    千次阅读 2012-09-03 23:42:24
    使用指针,可以有空指针,那么引用怎么办. //写时才拷贝Copy-On-Write char& string::operator[](unsigned int idx) { if (idx > _Len || _Ptr == 0 ) { static char nullchar = 0; return nullchar; }
  • 空指针的解引用

    千次阅读 2013-07-24 21:00:37
    NULL指针的访问异常是C程序员常见的bug,事实上部分情况下空指针可以解引用,下面的thread,列出了几个例子。 ... On the PDP-11, it happened that addres
  • 什么是解引用空指针? C语言中,如果一个指针变量的值为NULL,解引用这个指针时,会导致程序崩溃(Segmentation fault)。 如何防止解引用空指针? 基本思路是在解引用指针前,先判断是否为NULL,如果是NULL则...
  • 打印空引用不会报空指针异常的原因 首先大家都知道,在打印一个引用的时候,如果Object的toString()没有重写的情况下,最终会调用toString(),那问题来了,空引用调用toString()不应该报错吗??
  • 空指针引用会崩溃

    2017-03-26 16:22:59
    - (BOOL)doSomeThing:(NSError **)err {    *err = [NSErrorerrorWithDomain:@"123"code:101userInfo:nil]; ...如果调用方不关心错误输出放回,这样调用会崩溃,...所以在解引用之前要判断一下if(e...
  • 该PPT介绍了Cling的应用场景、实现以及如何在Cling中实现动态地检测空指针引用错误。 关于作者:丁保增,中科院软件所博士在读,研究方向:系统安全,虚拟化安全。在GSoC2013项目中,实现了在Cling中动态地...
  • 空指针引用错误检测为实例研究,使用Apache、OpenSSH、gzip等应用领域广泛的典型应用为实验用例,与Saturn、Splint和Clang-SA进行对比,Propagator的平均检测时间仅为12秒,误报率平均仅为13%,远低于对比工具,...
  • 今天在使用FileUtils 的时候发现出现了空指针异常现象 private FileUtils fileUtils = new FileUtils(this); 想了半天原来是fileUtils应该在onCreate();方法中创建。才能获取到上下文。否则直接用成员变量是获取...
  • 引用空指针问题

    2019-09-18 18:21:54
    今天看到一段奇怪的代码,它的主要流程是这样的: void set() ...千万不要解引用空指针,千万不要解引用空指针,千万不要解引用空指针。 转载于:https://my.oschina.net/u/1986432/blog/891948
  • 1、传指针。 2、解引用。 通过交换a和b数值的实例来说明其重要性: 在主函数中输入a和b的值;int a = 10;int b = 20;预期输出结果为a = 20;b = 10。 1、 明显与预期结果不符。原因:没有传指针! 2、 具体...
  • 调用controller报空指针有两种情况: 1、 service 或者mapper 没有加载到spring容器中 ,引用时候肯定报空指针2、 service加载到spring容器中了, 但是controller中定义的方法为private,私有方法被接口访问时候,...
  • 空指针引用是程序中存在的比较常见的问题,由于它在程序中比较隐蔽,用动态方法测试耗时又耗力且很难达到全面覆盖的效果。该文介绍了一种针对空指针引用故障的静态分析方法,将空指针引用问题抽象为一类故障模型,并...
  • 使用java中timer定时器执行代码,会自动开启线程来跑定时任务中的方法,但是用 ...这样的方式引用不了这个service,直接报空指针,此时就要用 SysUserTokenService sysUserTokenService = (SysU...
  • C++ 中“空引用”与“空指针”的区别 分类: C/C++ 2013-08-21 10:48 1276人阅读 评论(0) 收藏 举报 网络上有很多讨论C++ 的“引用”与“指针“的区别的文章,谈到区别,其中有一条:“引用不能为空...
  • 应用service层时 private Manager manager; 少加了@Autowired 添加后,空指针报错解决
  • 最近做安卓开发,频繁遇到因为String为null导致的空指针引用闪退,所以想办法解决一下。 TextUtils里提供了isEmpty的判断是否为空,既判断是否是null,又判断length是否为0,ctrl+鼠标右键 进去查看源代码可以看到其...
  • 空指针异常 NullPointException

    千次阅读 2019-08-26 23:00:11
    空指针异常 NullPointException 空指针异常,是运行时异常,及时编写代码时出现了空指针异常,编译器(javac) 会编译通过不报错,但是运行时Runtime阶段会抛出NullPointException 一.空指针异常可能的情况 1.调用null...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 261,942
精华内容 104,776
关键字:

空指针引用