In this paper, we study reverse engineering Functional Classes in java. As a case study we use a middleware application. Functional Classes is a design style that merges both object-oriented and functional programming...
详细信息
ISBN:
(纸本)9780769530994
In this paper, we study reverse engineering Functional Classes in java. As a case study we use a middleware application. Functional Classes is a design style that merges both object-oriented and functional programming paradigms. A functional class is a class without variables having pure functions as methods. As a result, a functional class is naturally a mediator In this paper as the main contribution, we show that Functional Classes lead to java bytecode that is re-compilable. Consequently, Functional Classes provide a promising basis for mixed design of applications, where the developers can work simultaneously on the project using a UML editor source code editor, code generator and optimizer Then, synchronization between the various tools is achieved on-the-fly using only the bytecode representation.
Existing approaches are inadequate to address the information flow in java bytecode and the type systems verification often used in these approaches is imprecise. This paper presents a method to disclose java bytecode...
详细信息
ISBN:
(纸本)0780395387
Existing approaches are inadequate to address the information flow in java bytecode and the type systems verification often used in these approaches is imprecise. This paper presents a method to disclose java bytecode information flow, in which the information dependence relationship among the variables in the bytecode is determined by data-flow analysis and information flow policy is verified by type-checking method. Since the analysis object is bytecode, this approach can be used for java mobile code systems. The precision of verification can be improved because of this approach.
BISM (bytecode-level Instrumentation for Software Monitoring) is a lightweight java bytecode instrumentation tool which features an expressive high-level control-flow-aware instrumentation language. The language follo...
详细信息
ISBN:
(纸本)9783030605087;9783030605070
BISM (bytecode-level Instrumentation for Software Monitoring) is a lightweight java bytecode instrumentation tool which features an expressive high-level control-flow-aware instrumentation language. The language follows the aspect-oriented programming paradigm by adopting the joinpoint model, advice inlining, and separate instrumentation mechanisms. BISM provides joinpoints ranging from bytecode instruction to method execution, access to comprehensive context information, and instrumentation methods. BISM runs in two modes: build-time and load-time. We demonstrate BISM effectiveness using two experiments: a security scenario and a general runtime verification case. The results show that BISM instrumentation incurs low runtime and memory overheads.
Dependence analysis is a fundamental technique for program understanding and is widely used in software testing and debugging. However, there are a limited number of analysis tools available despite a wide range of re...
详细信息
ISBN:
(纸本)9780769549682
Dependence analysis is a fundamental technique for program understanding and is widely used in software testing and debugging. However, there are a limited number of analysis tools available despite a wide range of research work in this field. In this paper, we present javaPDG(1), a static analyzer for java bytecode, which is capable of producing various graphical representations such as the system dependence graph, procedure dependence graph, control flow graph and call graph. As a program-dependence-graph based analyzer, javaPDG performs both intra- and inter-procedural dependence analysis, and enables researchers to apply a wide range of program analysis techniques that rely on dependence analysis. javaPDG provides a graphical viewer to browse and analyze the various graphs and a convenient JSON based serialization format.
This paper presents a strategy for the visualization of dynamic object relationships in java programs. The metaphor of a chemical molecule is used to aid Comprehension, and to help in reducing the size of the object g...
详细信息
ISBN:
(纸本)0769524435
This paper presents a strategy for the visualization of dynamic object relationships in java programs. The metaphor of a chemical molecule is used to aid Comprehension, and to help in reducing the size of the object graph. Our strategy has been implemented by dynamically instrumenting java bytecode to collect trace data, which is then analyzed and visualized in 3D using VRML. Quantitative and graphical results are presented, based on an analysis of programs in the SPEC JVM98 and JOlden benchmark suites.
In this paper we explore the application of the QP water-marking algorithm proposed by G. Qu and M. Potkonjak to software watermarking. The algorithm was originally proposed as a technique for watermarking the graph c...
详细信息
ISBN:
(纸本)3540213767
In this paper we explore the application of the QP water-marking algorithm proposed by G. Qu and M. Potkonjak to software watermarking. The algorithm was originally proposed as a technique for watermarking the graph coloring problem which can be applied to a variety of media such as FPGA designs and software through register allocation. We implemented the algorithm within the SandMark framework, a system that allows the study of watermarking, tamper-proofing, and obfuscation algorithms for java bytecode. Through the use of this framework we were able to perform an empirical evaluation of the algorithm. In particular we demonstrate that the use of register allocation, while incurring no performance overhead and being stealthy, is in fact vulnerable to attacks such as decompile/recompile. We also demonstrate that the QP algorithm does not allow for accurate watermark recognition without, significant modifications.
This paper proposes to explore the following question: can software evolution systems like FINCH, that evolve linear representations originating from a higher-level structural language, take advantage of building bloc...
详细信息
ISBN:
(纸本)9781450349390
This paper proposes to explore the following question: can software evolution systems like FINCH, that evolve linear representations originating from a higher-level structural language, take advantage of building blocks inherent to that original language?
The java Virtual Machine (or JVM) is central to the system's aim of providing a secure program execution environment that operates identically on a wide variety of computing platforms. To be most effective in this...
详细信息
ISBN:
(纸本)9781581130959
The java Virtual Machine (or JVM) is central to the system's aim of providing a secure program execution environment that operates identically on a wide variety of computing platforms. To be most effective in this role, the JVM needs a rigorous, complete description, to specify precisely the behavior required of implementations. In response, a number of researchers have produced formal accounts of the JVM that seek to define it in an unambiguous and comprehensible manner. Unfortunately, the size and complexity of the JVM means that many of these formal accounts must either restrict their scope substantially, or risk becoming unwieldy and intractable. This paper suggests an alternative approach to the specification of the JVM that seeks to ameliorate such problems by composing together a small set of "microinstructions" to produce the full bytecode set. These microinstructions are encapsulated as functions in the polymorphic functional programming language Haskell, using the familiar mechanisms of Hindley-Milner type inference to characterize the JVM's rather thorny verifier. In this way, its is hoped that a foundation will be laid for formal descriptions of the java Virtual Machine that need not trade tractability for completeness.
Type-based amortised resource analysis following Hofmann and Jost where resources are associated with individual elements of data structures and doled out to the programmer under a linear typing discipline-have been s...
详细信息
Type-based amortised resource analysis following Hofmann and Jost where resources are associated with individual elements of data structures and doled out to the programmer under a linear typing discipline-have been successful in providing concrete resource bounds for functional programs, with good support for inference. In this work we translate the idea of amortised resource analysis to imperative pointer-manipulating languages by embedding a logic of resources, based on the affine intuitionistic Logic of Bunched Implications, within Separation Logic. The Separation Logic component allows us to assert the presence and shape of mutable data structures on the heap, while the resource component allows us to state the consumable resources associated with each member of the structure. We present the logic on a small imperative language, based on java bytecode, with procedures and mutable heap. We have formalised the logic and its soundness property within the Coq proof assistant and extracted a certified verification condition generator. We also describe an proof search procedure that allows generated verification conditions to be discharged while using linear programming to infer consumable resource annotations. We demonstrate the logic on some examples, including proving the termination of in-place list reversal on lists with cyclic tails.
Exchanging mutable data objects with untrusted code is a delicate matter because of the risk of creating a data space that is accessible by an attacker. Consequently, secure programming guidelines for java stress the ...
详细信息
Exchanging mutable data objects with untrusted code is a delicate matter because of the risk of creating a data space that is accessible by an attacker. Consequently, secure programming guidelines for java stress the importance of using defensive copying before accepting or handing out references to an internal mutable object. However, implementation of a copy method (like clone()) is entirely left to the programmer. It may not provide a sufficiently deep copy of an object and is subject to overriding by a malicious sub-class. Currently no language-based mechanism supports secure object cloning. This paper proposes a type-based annotation system for defining modular copy policies for class-based object-oriented programs. A copy policy specifies the maximally allowed sharing between an object and its clone. We present a static enforcement mechanism that will guarantee that all classes fulfil their copy policy, even in the presence of overriding of copy methods, and establish the semantic correctness of the overall approach in Coq. The mechanism has been implemented and experimentally evaluated on clone methods from several java libraries.
暂无评论