Bytecode Verification
Jean-Louis Lanet · 2025
Cited by 0
Read the abstract, see who wrote it and who cites it, and get the citation in APA, MLA, Chicago or Harvard.
About 2,542 papers for “Bytecode”
Jean-Louis Lanet · 2025
Cited by 0
Geoff A. Cohen, Jeffrey S. Chase · 2008
Bytecode transformation is a powerful technique to dynamically extend or adapt Java software using transformer programs that automatically rewrite compiled classes. Bytecode transformers have been used to integrate separately developed software components, instrument programs with monitoring or debugging code, and extend programs with new features for security, data management, and other needs. Although bytecode transformation has shown promise in research systems, acceptance of this technique in practice depends on effective software tools to facilitate development of transformers that are effective and correct across all legal inputs. This paper explores interfaces for safe code insertion in JOIE, a toolkit for constructing bytecode transformers for the Java environment. JOIE provides a core set of low-level primitives for manipulating Java classfiles, supplemented by higher-level interfaces that directly support common transformer styles. The goal of this design is to make common transformations safe and efficient, without sacrificing the toolkit’s generality for more complex transformers. JOIE’s high-level facilities include expressive interfaces for safe insertion of new code into existing applications, which is the focus of this paper. A key technique is to extend compiled classes by mixing in attributes, behaviors, and interfaces from auxiliary classes that are written in Java and packaged with the transformer. In addition the JOIE architecture supports modular primitives for traversing and filtering existing bytecode and splicing in new instruction sequences. This paper presents the architecture of JOIE’s code insertion facilities, and illustrates their use in three example transformations. These examples expose issues and tradeoffs in the design and use of the interfaces, and demonstrate the potential of the JOIE bytecode transformation architecture as a tool for software extension. key words: Java; bytecode; program transformation; architecture; interfaces 1.
Cited by 0
Davide Ancona, Ferruccio Damiani, Sophia Drossopoulou et al. · 2005
We define compositional compilation as the ability to typecheck source code fragments in isolation, generate We define compositional compilation as the ability to typecheck source code fragments in isolation, generate corresponding binaries,and link together fragments whose mutual assumptions are satisfied, without reinspecting the code. Even though compositional compilation is a highly desirable feature, in Java-like languages it can hardly be achieved. This is due to the fact that the bytecode generated for a fragment (say, a class) is not uniquely determined by its source code, but also depends on the compilation context.We propose a way to obtain compositional compilation for Java, by introducing a polymorphic form of bytecode containing type variables (ranging over class names) and equipped with a set of constraints involving type variables. Thus, polymorphic bytecode provides a representation for all the (standard) bytecode that can be obtained by replacing type variables with classes satisfying the associated constraints.We illustrate our proposal by developing a typing and a linking algorithm. The typing algorithm compiles a class in isolation generating the corresponding polymorphic bytecode fragment and constraints on the classes it depends on. The linking algorithm takes a collection of polymorphic bytecode fragments, checks their mutual consistency, and possibly simplifies and specializes them. In particular, linking a self-contained collection of fragments either fails, or produces standard bytecode (the same as would have been produced by standard compilation of all fragments).
Cited by 51
Arnaud Fontaine, Samuel Hym, Isabelle Simplot-ryl et al. · 2011
Cited by 0
Gerwin Klein · it - Information Technology · 2005
Zusammenfassung Der Bytecode Verifier ist ein essenzieller Bestandteil der Sicherheitsarchitektur der Programmierplattform Java. Die vorliegende Dissertation stellt eine formale, ausführbare Spezifikation des Bytecode Verifiers vor sowie den Beweis, dass diese korrekt ist. Die Formalisierung, vollständig im Theorembeweiser Isabelle durchgeführt, besteht aus einem abstrakten Framework für Bytecode-Verifikation, das mit zunehmend ausdrucksstarken Typsystemen instanziiert wird. Diese decken sämtliche wichtigen Eigenschaften der Java-Plattform ab. Die Formalisierung liefert zwei ausführbare, verifizierte Bytecode Verifier: den Standard-Algorithmus, wie er auf normalen Desktop-Rechnern benutzt wird, und einen Lightweight Bytecode Verifier für eingebettete Systeme mit Ressourcenbeschränkungen wie z.B. Java SmartCards.
Cited by 2
Christopher League, Valery Trifonov, Zhong Shao · 2001
We describe the design and implementation of lambdaJVM, a functional representation of Java bytecode that makes data flow explicit, verification simple, and that is well-suited for translation into lower-level representations such as those used in optimizing compilers. It is a good alternative to stack-based Java bytecode for virtual machines or ahead-of-time compilers which optimize methods and produce native code. We use lambdaJVM as one component in a sophisticated type-preserving compiler for Java class files. Though our implementation is incomplete, preliminary measurements of both compile and run times are promising.
Cited by 0
Erven Rohou, Sergei Dyshel, Dorit Nuzman et al. · 2011
Diversity is a confirmed trend of computing systems, which present a complex and moving target to software developers. Virtual machines and just-in-time compilers have been proposed to mitigate the complexity of these systems. They do so by offering a single and stable abstract machine model thereby hiding architectural details from programmers.
Cited by 8
Hendra Gunadi · 2015
The Android operating system is now used in the majority of mobile devices. Each application in Android runs in an instance of the Dalvik virtual machine, which is a register-based virtual machine (VM). Most applications for Android are developed using Java, compiled to Java bytecode and then translated to DEX bytecode using the dx tool in the Android Software Development Kit. In this work, I aim to develop a type-based method for certifying non-interference properties of DEX bytecode, following a methodology that has been developed for Java bytecode certification by Barthe et al. To this end, I develop a formal operational semantics of the Dalvik VM, a type system for DEX bytecode, and prove the soundness of the type system with respect to a notion of non-interference. I then study the translation process from Java bytecode to DEX bytecode, as implemented in the dx tool in the Android SDK. I show that an abstracted version of the translation from Java bytecode to DEX bytecode preserves the non-interference property. More precisely, I show that if the Java bytecode is typable in Barthe et al's type system (which guarantees non-interference) then its translation is typable in our type system. This result opens up the possibility to leverage existing bytecode verifiers for Java to certify non-interference properties of Android bytecode.
Cited by 8
Gerwin Klein, Tobias Nipkow · Theoretical Computer Science · 2003
Cited by 84
Tobias Nipkow · Journal of Automated Reasoning · 2003
Cited by 14
Yanchuan Li, Gordon Fraser · Lecture notes in computer science · 2011
Cited by 23
Philippe Moret, Walter Binder, Éric Tanter · 2011
Bytecode instrumentation is a widely used technique to implement aspect weaving and dynamic analyses in virtual machines such as the Java Virtual Machine. Aspect weavers and other instrumentations are usually developed independently and combining them often requires significant engineering effort, if at all possible. In this paper we introduce polymorphic bytecode instrumentation (PBI), a simple but effective technique that allows dynamic dispatch amongst several, possibly independent instrumentations.
Cited by 25
Bernd Klein · Einführung in Python 3 · 2013
No AccessEinführung in Python 3Jul 2013Bytecode und MaschinencodeBernd KleinBernd Kleinhttps://doi.org/10.3139/9783446437173.003SectionsAboutPDF ToolsAdd to FavoritesDownload CitationTrack CitationsCopy LTI LinkPDF key 'share (en)' returned an object instead of string.FacebookTwitterEmailLinkedIn previous chapternext chapter FiguresReferencesRelatedDetails 2013Pages: 17-19Print ISBN: 978-3-446-43547-6eISBN: 978-3-446-43717-3 Copyright & Permissions© 2013 Carl Hanser Verlag GmbH & Co. KGPDF downloadLoading ...
Cited by 1
Lennart Beringer · The Journal of Logic and Algebraic Programming · 2010
Cited by 5
Macháček, Ondřej · Brno University of Technology Digital Library (Brno University of Technology) · 2013
Tato práce se zabývá popisem struktury mezikódu jazyka Java a disassemblováním instrukcí mezikódu jazyka Java. Součástí této práce je knihovna pro disassemblování souborů tříd jazyka Java. Knihovna umožňuje zobrazit veškeré disassemblované informace uložené v souboru tříd. Pro ukázku práce s knihovnou byla napsána i jednoduchá aplikace s grafickým uživatelským rozhraním.
Cited by 0
H.D. Lambridge · 2002
We present our results obtained from applying well known optimizations to Java bytecodes. We survey the optimizations implemented thus far, which include peephole optimizations, jump redundancy eliminations, and common subexpression elimination. The transformations are each analyzed according to several criteria. We measure the impact each has on reducing a program's execution time and size, the frequency by which the optimizations can be applied, and the extra compile time incurred. Together, these results quantify the overall effectiveness of employing classical optimizations on bytecodes. Our experiments were conducted on a representative set of public domain Java programs which were compiled using Sun's JDK 1.0.2. All transformations were applied to bytecodes with no access to their original source.
Cited by 0
Robert F. Stärk, Joachim Schmid, Egon Börger · 2001
Cited by 1
Yuxin Qin, Dejice Jacob, Jeremy Singer · ENLIGHTEN (Jurnal Bimbingan dan Konseling Islam) · 2022
WebAssembly, known as Wasm, is an interpreted portable bytecode execution format that is growing in popularity. In this work, we perform a simple pair of characterizations of Wasm. Statically, we compare the instruction set to other portable bytecodes like JVM and PCODE, showing that Wasm operates at a lower abstraction level than JVM, similar to PCODE. Dynamically, we study the Wasm instruction mix for a set of common benchmark applications. This investigation reveals that, like JVM, data movement operations occur most frequently in instruction traces. We conclude by discussing possible future directions for optimizing Wasm execution.
Cited by 0Open access
Tobias Nipkow · Lecture notes in computer science · 2001
Cited by 43Open access
Hřibal, Jaromír · Brno University of Technology Digital Library (Brno University of Technology) · 2015
První část této bakalářské práce se zabývá základními principy virtuálního stroje jazyka Java a detailněji se věnuje jeho instrukční sadě a formátu . class souborů, dohromady známých jako bajtkód . Následující část prezentuje rešerši existujících nástrojů pro manipulaci s bajtkódem . Poslední část popisuje vytvoření pluginu do vývojového prostředí Eclipse , který realizuje uživatelsky přívětivé zobrazení zadaného bajtkódu spolu s původním zdrojovým kódem, ze kterého byl bajtkód generován. Nástroj předpokládá dostupnost těchto zdrojových kódů, takže neplní roli dekompilátoru.
Cited by 0