`

一个java语义上的漏洞

    博客分类:
  • java
阅读更多

对于长期使用C++的人来说,这样的语义确实叫人一下子难以接受。

/*
* Main.java
*
* Created on 2006年8月17日, 下午8:28
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package javaapplication2;

/**
*
* @author Zenny Chen
*/

class Parent
{
protected int t;

public Parent()
{
System.out.println("Creating Parent...");
create();
}

public void create()
{
System.out.println("Parent created!");

t = 1;
}
}

class Child extends Parent
{
private int c;

public void create()
{
c = 1;
System.out.println("Child created!");
}

public Child()
{
System.out.println("Creating Child...");
create();
}

public int getValue()
{
return c + t;
}
}

public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

Child ch = new Child();

System.out.println("The result is: "+ch.getValue());
}
}

从语义学和工程学角度,在Child对象被创建时首先要创建其父类域,然后可以根据父类属性
来获得创建自身资源的需要。然而Java在处理方法重写这个语义时,执行的是“一刀切”,
父类域尚未被创建完就开始调用其子类所重写的方法来。这样很可能造成子类的资源也无法
被初始化(若子类构造方法不去构建)。
从这点上,C++做得就比较好。创建一个对象就像造房子,一层一层建造。C++中虚函数的多态性
不会表现在构造函数和析构函数中,而且构造函数和析构函数也不会受到const对象的限制。
尽管在语义的实现上确实要比Java复杂一点,但符合语义学和工程学。

分享到:
评论

相关推荐

    基于图网络的Java反序列化漏洞检测方法.pdf

    本文提出了一种基于图网络的Java反序列化漏洞检测方法SerialFinder,该方法利用图结构充分表达反序列化漏洞调用链的语义信息,训练图同构网络模型,进而可以检测潜在的反序列化漏洞调用链。该方法可以弥补已有方法的...

    Java理论与实践:修复Java内存模型2

    本文介绍了Java平台从一开始就包括了对线程的支持,包括一个计划为正确同步的程序提供“一次编写,到处运行”保证的、跨平台的内存模型,但是原来的内存模型有一些漏洞。虽然许多Java平台提供了比JMM所要求的更强的...

    大学生java学习心得(多篇).doc

    在文档中,作者列出了 17 个 Java 语言特性限制,旨在避免一些潜在的安全漏洞。这些限制包括: 1. 不要使用 static、非 final 字段。 2. 不要使用线程同步原语来同步多个组件实例的运行。 3. 不要使用 AWT 函数来...

    java8看不到源码-VulSeeker:基于语义学习的跨平台二进制漏洞搜索器

    它是一种基于语义学习的跨平台二进制漏洞搜索工具。 给定漏洞函数f ,VulSeeker 可以识别二进制程序是否包含与f相同的漏洞。 目前支持X86、X64、ARM32、ARM64、MIPS32、MIPS64六种架构。 如果您遇到任何问题,请随时...

    java8看不到源码-javascript-semantics:KJS:JavaScript的完整形式语义

    和查找已知安全漏洞 () 来证明。 如何运行语义 以下说明适用于标准 Debian/Ubuntu 发行版,尤其适用于 64 位 Ubuntu 14.04 LTS。 0. 安装基本依赖 安装 JDK 1.8: $ sudo add-apt-repository ppa:webupd8team/java $...

    Java安全与质量编码规范

    + 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。 + 静态常量的命名应:字母全部大写,单词间通过下划线连接。 安全性 * 认证与授权: + 密码管理:禁止将密码硬编码在代码中。应以密文方式...

    仿拼多多源码java-MLDetectVuln:使用ML检测漏洞

    仿拼多多源码 java AAAI 20 Order Matters: Semantic-Aware Neural Networks for ...利用AI算法解决大规模二进制程序函数相似性分析的问题,科恩实验室出的,光从题目上...javascripty引擎时无法高效地生成“语义上有效的

    使用静态分析技术找到真正”的代码质量缺陷与安全漏洞.pptx

    使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞 ...静态分析技术是一个非常有用的工具,可以帮助我们尽早发现和修复代码质量缺陷和安全漏洞。但是,我们也需要注意到这种技术的缺陷和限制,以便更好地应用它。

    代码审计神器Fortify - Fortify SCA 20.1.1

    Fortify首先通过调用语言的编译器或者解释器把前端的语言代码(如JAVA,C/C++源代码)转换成一种中间媒体文件NST(Normal Syntax Tree),将其源代码之间的调用关系,执行环境,上下文等分析清楚。 通过分析不同类型...

    cpg&joern分享.pdf

    Joern 提供了一个命令行接口,用户可以使用 Joern 来分析 Java 代码,生成 CPG,并对其进行查询和分析。 AST、CFG、PDG AST(Abstract Syntax Tree)是一种抽象语法树,用于表示源代码的结构。 CFG(Control Flow...

    xalanjava源码-jdeopt:通过取消隐式特权提升来强化Java的访问控制

    正如我们所展示的,这给软件维护带来了许多陷阱,使得运行时的维护者很容易引入明显的混淆副漏洞,即使只是应用正常的语义保留重构。 如何解决这个问题? 是否可以不使用捷径来实现 Java 的访问控制,如果可以,这种...

    代码审计[java 安全编程] - T00LS

    这里有两个关键条件,第᳿是用户能够控制输 入;第二是用户输入的数据被拼接到要执行的代码中从而被执行。sql 注入漏洞则是程序将用户输入数据 拼接到了 sql 语句中,从而攻击者即可构造、改变 sql 语义从而进行攻击...

    fortify新版安装步骤.pdf

    深度扫描:利用其先进的分析引擎(包括数据流分析、语义分析、结构分析、控制流分析和配置流分析),深入源代码,识别潜在的安全漏洞。 广泛的语言支持:支持多种编程语言,如Java、C/C++、.NET、PHP、Python、...

    微信公众平台开发视频

    13 群发接口(上) [暂未上传] 14 群发接口(下) [暂未上传] 15 模板消息 | 32:34 16 用户分组管理 | 41:17 17 获取用户信息 | 27:00 18 案例:微信墙 [暂未上传] 19 网页授权获取用户基本信息 | 59:40 20 ...

    java报修源码下载-w13scan:PassiveSecurityScanner(被动式安全扫描器)

    是基于Python3的一款开源的Web漏洞发现工具,它支持主动扫描模式和被动扫描模式,能运行在Windows、Linux、Mac上。 声明 使用W13Scan前请遵守当地法律,W13Scan仅提供给教育行为使用。 特点 相比于其他专业的扫描工具...

    代码审计方案.doc

    Fortify SCA 通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞...

    rewrite-docs:存储用于生成docs.openrewrite.org的降价文档

    它包含一个预打包的重构配方平台,用于常见的框架迁移和风格一致性任务。 它还允许您定义自定义配方,以实现各种源代码转换。 重写做什么? 通过对表示您的源代码的(AST)进行更改并将修改后的树打印回源代码中来...

    硒页面对象发电机「Selenium Page Object Generator」-crx插件

    该模板使用Handlebars.js表达式,这是一种简洁的无逻辑语义模板语言。 这是BETA的早期版本,预计会具有粗糙的边缘和有限的功能。 目前,它支持3个不同的目标:Java,C#和机器人框架。 ***要利用最新更改,需要...

Global site tag (gtag.js) - Google Analytics