ELF Files Explained Part 2

ELF Files Explained - Part 2 Hero

ELF Files Explained – Part 2: Inside the ELF Format – Headers, Sections, Symbols and Debug Information


Part 2 of the "ELF Files Explained" Series

In Part 1, we explored the history of executable file formats and the evolution from early UNIX formats such as a.out and COFF to the Executable and Linkable Format. We also saw how ELF became the standard executable format for Linux and a fundamental component of modern embedded development toolchains.

In this article, we move beyond that historical perspective and begin examining the internal structure of an ELF file. Rather than treating it as an opaque binary, we will break it down into its major components and see how linkers, loaders and debuggers each interpret the information it contains.


Continue reading “ELF Files Explained Part 2” »

ELF Files Explained Part 1

ELF Files Explained - Part 1 Hero

ELF Files Explained – Part 1: History and Fundamentals


Part 1 of the “ELF Files Explained” Series

Every software developer has encountered executable files, yet relatively few stop to consider the file format that makes them possible. Whether you are developing applications for Linux, writing firmware for an embedded microcontroller, or debugging software using GCC-based tools, there is a good chance an ELF file is being created somewhere in the build process.

Despite its widespread use, the Executable and Linkable Format (ELF) is often treated as a black box. Most developers know that the compiler produces one, the debugger loads one, and the embedded programmer may ultimately generate a HEX file from one — but the format itself remains largely invisible. Understanding what an ELF file is, and why it was designed the way it was, provides valuable insight into how modern software development tools work together.

This first article looks at the origins of executable file formats, tracing the evolution from early UNIX formats such as a.out and COFF to the development of ELF. We will also see how ELF grew beyond its UNIX roots to become the standard executable format for Linux and an essential component of modern embedded development toolchains.


Continue reading “ELF Files Explained Part 1” »

CAN Bus Explained Part 1

CAN Bus Explained Part 1

CAN BUS EXPLAINED

Part 1: Origins, Architecture and Differential Signalling

Continue reading “CAN Bus Explained Part 1” »

UPDI Explained: The Complete Guide to Programming and Debugging Modern AVR Microcontrollers

Unified Program and Debug Interface architecture showing host PC, USB-UART adapter and AVR microcontroller connected through a single-wire UPDI interface

UPDI Explained: The Complete Guide to Programming and Debugging Modern AVR Microcontrollers

A comprehensive guide to the Unified Program and Debug Interface (UPDI), including architecture, signalling, security, memory programming, debugging, recovery techniques and programmers.

Continue reading “UPDI Explained: The Complete Guide to Programming and Debugging Modern AVR Microcontrollers” »

Microcontrollers, training, electronics and coding

Share