DETECTING BINARY INCOMPATIBLE SOFTWARE COMPONENTS USING DYNAMIC LOADER

Authors

  • Áron BARÁTH Eötvös Loránd University.  Email: baratharon@caesar.elte.hu
  • Zoltán PORKOLÁB Eötvös Loránd University. Email: gsd@elte.hu

DOI:

https://doi.org/10.24193/subbi.2018.1.04

Keywords:

programming language, linking, binary compatibility.

Abstract

Modern programming languages support modular development dividing the system into separate translation units and compile them individually. A linker is used then to assemble together these units either statically or dynamically. This process, however, introduces implicit dependences between the translation units. When one or more units are modified in inconsistent way binary incompatibility occurs and may result in unexpected program behavior. Current mainstream programming languages neither specify what are the binary compatibility rules nor provide tools to check them.

In this paper we discuss the details of various cases of binary incompatibility. We implemented a prototype solution in the Welltype programming language to detect binary compatibility by dynamic loader.

Author Biographies

Áron BARÁTH, Eötvös Loránd University.  Email: baratharon@caesar.elte.hu

Department of Programming Languages and Compilers, Eötvös Loránd University.  Email: baratharon@caesar.elte.hu

Zoltán PORKOLÁB, Eötvös Loránd University. Email: gsd@elte.hu

Department of Programming Languages and Compilers, Eötvös Loránd University. Email: gsd@elte.hu

References

ISO, “ISO/IEC 9899:TC3 – committee draft of the C99 standard – section 5.1.1.1.” http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf.

J. Bloch, Effective Java: A Programming Language Guide. The Java Series (2nd ed.). Addison-Wesley, 2008.

D. M. Ritchie, B. W. Kernighan, and M. E. Lesk, The C programming language. Prentice Hall Englewood Cliffs, 1988.

B. Stroustrup, The C++ programming language, 4th Edition. Addison-Wesley, 2013.

S. Chamberlain and I. L. Taylor, “Using LD the GNU linker,” 2010. http://lib.hpu.edu.vn/handle/123456789/21416.

“LLD – the LLVM linker,” 2018. https://lld.llvm.org/.

M. Franz, “Dynamic linking of software components,” Computer, vol. 30, no. 3, pp. 74–81, 1997.

S. Drossopoulou, G. Lagorio, and S. Eisenbach, “Flexible models for dynamic linking,” in European Symposium on Programming, pp. 38–53, Springer, 2003.

E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-oriented Software. Boston, MA, USA: Addison-Wesley Longman Publishing Co., Inc., 1995.

“LD VERSION command.” https://sourceware.org/binutils/docs/ld/VERSION. html.

“ELF symbol versioning with glibc 2.1 and later,” 1999. https://lists.debian.org/lsb-spec/1999/12/msg00017.html.

M. Stevanovic, Dynamic Libraries Versioning, pp. 187–231. Berkeley, CA: Apress, 2014. https://doi.org/10.1007/978-1-4302-6668-6_10.

Tool Interface Standard, Executable and Linking Format (ELF) Specification, Version 1.2, May 1995. http://refspecs.linuxbase.org/elf/elf.pdf.

Santa Cruz Operation, System V Application Binary Interface, March 1997. http://www.sco.com/developers/devspecs/gabi41.pdf.

Oracle, Java Language Specification, Chapter 13. Binary Compatibility, 2018. https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html.

J. Dietrich, K. Jezek, and P. Brada, “Broken promises: An empirical study into evolution problems in java programs caused by library upgrades,” in Software Maintenance, Reengineering and Reverse Engineering (CSMR-WCRE), 2014 Software Evolution Week-IEEE Conference on, pp. 64–73, IEEE, 2014. https://doi.org/10.1109/CSMR-WCRE.2014.6747226.

I. Savga, M. Rudolf, and S. Goetz, “Comeback!: a refactoring-based tool for binary-compatible framework upgrade,” in Companion of the 30th international conference on Software engineering, pp. 941–942, ACM, 2008. https://doi.org/10.1145/1370175.1370198.

K. Atkinson, M. Flatt, and G. Lindstrom, “ABI compatibility through a customizable language,” in Generative Programming and Component Engineering, Proceedings of the Ninth International Conference on Generative Programming and Component Engineering, GPCE 2010, Eindhoven, The Netherlands, October 10-13, 2010 (E. Visser and J. J¨arvi, eds.), pp. 147–156, ACM, 2010. http://doi.acm.org/10.1145/1868294.1868316.

ISO, ISO/IEC 14882:2011 Information technology — Programming languages — C++. Geneva, Switzerland: International Organization for Standardization, Feb. 2012. http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372.

A. Koenig, “The nightmare of binary compatibility,” in Dr. Dobb’s, 2014. http://www.drdobbs.com/cpp/the-nightmare-of-binary-compatibility/240166914.

“How to design a C++ API for binary compatible extensibility,” 2010. https://stackoverflow.com/questions/1774911/how-to-design-a-c-api-for-binary-compatible-extensibility.

Microsoft, “C++ binary compatibility between Visual Studio 2015 and Visual Studio 2017,” 2017. https://docs.microsoft.com/en-us/cpp/porting/ binary-compat-2015-2017.

M. Pietrek, “Peering inside the PE: a tour of the win32 (R) portable executable file format,” Microsoft Systems Journal-US Edition, pp. 15–38, 1994.

Á. Baráth and Z. Porkoláb, “Welltype: Language elements for multiparadigm programming,” in Position Papers of the 2017 Federated Conference on Computer Science and Information Systems, pp. 91–101, 2017. http://dx.doi.org/10.15439/2017F546.

Á. Baráth, “Welltype legacy web page.” http://baratharon.web.elte.hu/welltype, 2014.

Á. Baráth, “Welltype project web page.” http://repo.hu/projects/welltype, 2018.

ISO/IEC, “ISO/IEC 14882:2003(E): Programming Languages - C++ §3.2 One definition rule [basic.def.odr],” 2003. http://eel.is/c++draft/basic.def.odr.

Downloads

Published

2018-06-19

How to Cite

BARÁTH, Áron, & PORKOLÁB, Z. (2018). DETECTING BINARY INCOMPATIBLE SOFTWARE COMPONENTS USING DYNAMIC LOADER. Studia Universitatis Babeș-Bolyai Informatica, 63(1), 51–63. https://doi.org/10.24193/subbi.2018.1.04

Issue

Section

Articles