The ELF Tool Chain Project
Quick Links
- SF.Net project overview.
- Mailing Lists.
- Source Tree.
- Wiki Index.
- Source analysis by Ohloh.Net.
- Commit log search, by FreshBSD.org
- RSS feed of project activity.
News
- 2012/09/24: Release 0.6.1 is now available for download.
- 2011/11/16: Release 0.5.1 is now available for download.
About This Project
We maintain BSD licensed implementations of essential compilation tools and libraries for building and analyzing ELF based program images.
Supported Operating Systems
Our source code is known to work on the following operating systems:
Why is this project useful?
This project provides tools for program development. Notably:
- Our code is structured as a set of tools written using a set of well-documented libraries. This approach comes in useful when custom tools for manipulating ELF programs and shared libraries are desired.
- We strive to keep to the traditional BSD standard for quality in code and documentation. We strive to 'Do The Right Thing'.
- Our code is licensed under a liberal license.
- As a project, we strive to make our decisions in a transparent and inclusive manner.
What are the shortcomings of this project?
- Our code is relatively new, it has not seen the level of adoption that the GNU binutils code base has.
- Our code base only deals with ELF objects; other object file formats are not supported.
- Our development team is small, comprising of volunteers.
How do I help?
- Please join the mailing list; let us know how you are using our code and how your experience has been.
- Please review our code and documentation; let us know if you find a bug.
- Pick up a ticket from our list of open tickets, and send in fixes.
- We need help in setting up build and test automation for the OSes we support, please see BuildAutomation.
Implementation Status
| Tool | Description | Development Status | Owner | Repository Location | Comments |
| Native or POSIX-mandated Tools | |||||
| ar | Archive manager. | released | kaiwang27 | ar/ | |
| as | Assembler. | planning | (see libmc, isa) | ||
| brandelf | Set/read the ELF brand for an executable. | released | brandelf/ | ||
| c++filt | Translated encoded symbols. | released | kaiwang27 | c++filt/ | |
| elfdump | Diagnostic tool. | released | kaiwang27 | elfdump/ | |
| isa | Instruction set analyser | in development | jkoshy | isa/ | |
| ld | Link editor. | in development | kaiwang27 | ld/ | |
| nm | List symbols in an ELF object. | released | hglee | nm/ | |
| mcs | Manage comment sections in ELF objects. | released | kaiwang27 | elfcopy/ | |
| ranlib | Generate an archive symbol table. | released | kaiwang27 | ar/ | |
| size | List ELF object sizes. | released | samarunraj | size/ | |
| strings | Extract printable strings from an ELF object. | released | samarunraj | strings/ | |
| strip | Discard information from objects. | released | kaiwang27 | elfcopy/ | |
| GNU Tools | |||||
| addr2line | Debug tool. | released | kaiwang27 | addr2line/ | |
| elfcopy | Copy and translate between object formats. | released | kaiwang27 | elfcopy/ | |
| findtextrel | Find undesired text relocations. | released | kaiwang27 | findtextrel/ | |
| objdump | Display object information. | planning | Merge with elfdump? | ||
| readelf | Display ELF information. | released | kaiwang27 | readelf/ | |
| Libraries and API sets | |||||
| libdwarf | A library for parsing DWARF debug information. | released | kaiwang27 | libdwarf/ | "pfgshield-freebsd" (email suppressed) notes that early versions of SGI's libdwarf library were released under a non-GPL'ed license. |
| libelf | A library for reading and writing ELF objects. | released | jkoshy | libelf/ | |
| libelftc | Common code used by tools. | released | libelftc/ | ||
| libmc | Machine/assembly code manipulation. | planning | For use in an optimizing linker, debugger and assember, program instrumentation tools, and the like. | ||
| Test Suites | |||||
| ar | The test suite for the ar utility. | released | kaiwang27 | test/ar/ | |
| elfcopy | The test suite for elfcopy utility. | released | kaiwang27 | test/elfcopy/ | |
| elfdump | The test suite for elfdump utility. | released | kaiwang27 | test/elfdump/ | |
| libdwarf-test-suite | The test suite for the libdwarf library. | released | kaiwang27 | test/libdwarf/ | |
| libelf | The test suite for the libelf library. | released | jkoshy | test/libelf/ | |
| nm | The test suite for the nm utility. | released | test/nm/ | ||
| size | The test suite for the size utility. | planning | See ticket #9. | ||
| strings | The test suite for the strings utility. | planning | See ticket #10. | ||
| Documentation | |||||
| Manual pages | Reference documentation. | released | jkoshy | (multiple locations) | Each utility and library API has a manual entry. |
| libelf by Example | Tutorial introduction to programming with libelf. | Released | jkoshy | documentation/libelf-by-example | |
| libdwarf by Example | An introduction to DWARF and libdwarf. | planning | jkoshy | TBD |
Getting Started
Open Project-Wide Tickets
Project History
This work was originally a part of the FreeBSD Project; it has been moved to SourceForge.Net to encourage wider participation from the open-source developer community.
Related Reading
- The DWARF standard.
- The ERESI project---The ERESI Reverse Engineering Software Interface.
- The Libunwind project.
- The Linux Standard Base specification (v3.1).
- The NASM and YASM open source assemblers.
- The New Jersey Machine Code Toolkit.
- The Knit utility.
- The Solaris Linker and Libraries Guide.
- The PyDevTools project allows rapid prototyping of program development tools in Python.