Arm Image Format

Last updated
Arm Image Format
Developed by Acorn Computers
Type of format Binary, executable

In computer programming, the Arm Image Format (AIF) is an object file format used primarily for software intended to run on ARM microprocessors. It was introduced by Acorn Computers for use with their Archimedes computer.[ citation needed ] It can optionally facilitate debugging, including under operating systems running on other processor architectures.

Contents

Format

The file can be either executable or non-executable and is loaded at 0x8000 unless otherwise specified. [1] Executable files can relocate themselves if necessary and non-executable files are prepared for execution by an image loader. An extended AIF is a type of non-executable which includes information to enable the placement of code and data within specific areas of memory. [1]

The file includes a header and separate areas of read-only and read-write code/data. It can optionally include data for debugging and the code (with list) for self-relocation. [1]

AIF header

The header includes information about self-relocation, entry point, exit instruction, area sizes and locations, debug type, addressing mode and memory placement (in the case of the extended file). [1]

An allocation was later made in the header to mark executables as being "StrongARM-ready", to address some backward compatibility issues. [2]

Debugging

The files can be run for debugging under DOS and SunOS using the ARM Windowing Debugger. [3]

Other uses

Microsoft's MMLite modular system architecture supports the loading of various image formats, [4] including AIF files. [5] [6] Porting of Wind River Systems' VxWorks operating system to the StrongARM EBSA-285 board involved using AIF files. [7]

Related Research Articles

<span class="mw-page-title-main">Executable and Linkable Format</span> Standard file format for executables, object code, shared libraries, and core dumps.

In computing, the Executable and Linkable Format, is a common standard file format for executable files, object code, shared libraries, and core dumps. First published in the specification for the application binary interface (ABI) of the Unix operating system version named System V Release 4 (SVR4), and later in the Tool Interface Standard, it was quickly accepted among different vendors of Unix systems. In 1999, it was chosen as the standard binary file format for Unix and Unix-like systems on x86 processors by the 86open project.

zlib DEFLATE codec library

zlib is a software library used for data compression. zlib was written by Jean-loup Gailly and Mark Adler and is an abstraction of the DEFLATE compression algorithm used in their gzip file compression program. zlib is also a crucial component of many software platforms, including Linux, macOS, and iOS. It has also been used in gaming consoles such as the PlayStation 4, PlayStation 3, Wii U, Wii, Xbox One and Xbox 360.

<span class="mw-page-title-main">Application binary interface</span> Binary interface between two program units

In computer software, an application binary interface (ABI) is an interface between two binary program modules. Often, one of these modules is a library or operating system facility, and the other is a program that is being run by a user.

ARM is a family of reduced instruction set computer (RISC) instruction set architectures for computer processors, configured for various environments. Arm Ltd. develops the architectures and licenses them to other companies, who design their own products that implement one or more of those architectures, including system on a chip (SoC) and system on module (SOM) designs, that incorporate different components such as memory, interfaces, and radios. It also designs cores that implement these instruction set architectures and licenses these designs to many companies that incorporate those core designs into their own products.

The Portable Executable (PE) format is a file format for executables, object code, DLLs and others used in 32-bit and 64-bit versions of Windows operating systems. The PE format is a data structure that encapsulates the information necessary for the Windows OS loader to manage the wrapped executable code. This includes dynamic library references for linking, API export and import tables, resource management data and thread-local storage (TLS) data. On NT operating systems, the PE format is used for EXE, DLL, SYS, MUI and other file types. The Unified Extensible Firmware Interface (UEFI) specification states that PE is the standard executable format in EFI environments.

<span class="mw-page-title-main">VxWorks</span> Real-time operating system

VxWorks is a real-time operating system developed as proprietary software by Wind River Systems, a wholly-owned subsidiary of Aptiv. First released in 1987, VxWorks is designed for use in embedded systems requiring real-time, deterministic performance and, in many cases, safety and security certification for industries such as aerospace and defense, medical devices, industrial equipment, robotics, energy, transportation, network infrastructure, automotive, and consumer electronics.

<span class="mw-page-title-main">RISC OS</span> Computer operating system by Acorn Computers Ltd

RISC OS is a computer operating system originally designed by Acorn Computers Ltd in Cambridge, England. First released in 1987, it was designed to run on the ARM chipset, which Acorn had designed concurrently for use in its new line of Archimedes personal computers. RISC OS takes its name from the reduced instruction set computer (RISC) architecture it supports.

The Common Object File Format (COFF) is a format for executable, object code, and shared library computer files used on Unix systems. It was introduced in Unix System V, replaced the previously used a.out format, and formed the basis for extended specifications such as XCOFF and ECOFF, before being largely replaced by ELF, introduced with SVR4. COFF and its variants continue to be used on some Unix-like systems, on Microsoft Windows, in UEFI environments and in some embedded development systems.

An object file is a computer file containing object code, that is, machine code output of an assembler or compiler. The object code is usually relocatable, and not usually directly executable. There are various formats for object files, and the same machine code can be packaged in different object file formats. An object file may also work like a shared library.

In computer programming, a magic number is any of the following:

A fat binary is a computer executable program or library which has been expanded with code native to multiple instruction sets which can consequently be run on multiple processor types. This results in a file larger than a normal one-architecture binary file, thus the name.

JTAG is an industry standard for verifying designs and testing printed circuit boards after manufacture.

Mach-O, short for Mach object file format, is a file format for executables, object code, shared libraries, dynamically-loaded code, and core dumps. It was developed to replace the a.out format.

<span class="mw-page-title-main">Interactive Disassembler</span> Software reverse engineering tool

The Interactive Disassembler (IDA) is a disassembler for computer software which generates assembly language source code from machine-executable code. It supports a variety of executable formats for different processors and operating systems. It also can be used as a debugger for Windows PE, Mac OS X Mach-O, and Linux ELF executables. A decompiler plug-in for programs compiled with a C/C++ compiler is available at extra cost. The latest full version of IDA Pro is commercial, while a less capable version is available for download free of charge.

<span class="mw-page-title-main">UEFI</span> Operating system software specification

UEFI is a set of specifications written by the UEFI Forum. They define the architecture of the platform firmware used for booting and its interface for interaction with the operating system. Examples of firmware that implement these specifications are AMI Aptio, Phoenix SecureCore Tiano, TianoCore EDK II and InsydeH2O.

<span class="mw-page-title-main">QEMU</span> Free virtualization and emulation software

QEMU is a free and open-source emulator. It emulates the machine's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems. It can interoperate with Kernel-based Virtual Machine (KVM) to run virtual machines at near-native speed. QEMU can also do emulation for user-level processes, allowing applications compiled for one architecture to run on another.

Relocation is the process of assigning load addresses for position-dependent code and data of a program and adjusting the code and data to reflect the assigned addresses. Prior to the advent of multiprocess systems, and still in many embedded systems, the addresses for objects were absolute starting at a known location, often zero. Since multiprocessing systems dynamically link and switch between programs it became necessary to be able to relocate objects using position-independent code. A linker usually performs relocation in conjunction with symbol resolution, the process of searching files and libraries to replace symbolic references or names of libraries with actual usable addresses in memory before running a program.

<span class="mw-page-title-main">Universal binary</span> Apple multi-architecture binary files

The universal binary format is, in Apple parlance, a format for executable files that run natively on either PowerPC or Intel-manufactured IA-32 or Intel 64 or ARM64-based Macintosh computers. The format originated on NeXTStep as "Multi-Architecture Binaries", and the concept is more generally known as a fat binary, as seen on Power Macintosh.

An HTML Application (HTA) is a Microsoft Windows program whose source code consists of HTML, Dynamic HTML, and one or more scripting languages supported by Internet Explorer, such as VBScript or JScript. The HTML is used to generate the user interface, and the scripting language is used for the program logic. An HTA executes without the constraints of the internet browser security model; in fact, it executes as a "fully trusted" application.

In computer programming, a self-relocating program is a program that relocates its own address-dependent instructions and data when run, and is therefore capable of being loaded into memory at any address. In many cases, self-relocating code is also a form of self-modifying code.

References

  1. 1 2 3 4 "ARM Software Development Toolkit Reference Guide" (PDF). ARM Holdings . Retrieved 28 June 2012.
  2. "Application Note 295". Engineering Support Application Note. Acorn Computers. 4 October 1996. Archived from the original on 2013-01-04. Retrieved 28 June 2012.
  3. "armwd - The ARM Windowing Debugger". Man Pages for ARM Tools. University of Cambridge . Retrieved 28 June 2012.
  4. Helander, Johannes; Forin, Alessandro (1998). "MMLite: a highly componentized system architecture". Proceedings of the 8th ACM SIGOPS European workshop on Support for composing distributed applications: 96–103. doi: 10.1145/319195.319210 .
  5. "Everything You Always Wanted To Know About MMLite (but were afraid to ask): The FAQ for MMLite". Microsoft Invisible Computing. Microsoft. 2004. Retrieved 28 June 2012.
  6. "aif_ldr.c". Microsoft Invisible Computing. Microsoft. 2004. Retrieved 28 June 2012.
  7. "Porting VxWorks to an Intel StrongARM SA-110 Based Platform" (PDF). Intel. April 2001. Retrieved 28 June 2012.[ permanent dead link ]