Introduction
This page describes the ELF Resource tools. These consist of two programs: rc, the Resource Compiler, and re the Resource Editor. Basically, these tools are used to embed data into ELF relocatable object files (this data to be referenced from C programs), and to later change this data in compiled ELF executables. The rc tool does the first job. It compiles data files into object (.o) files, giving the data in each file a symbol in the object file that can be referenced from other object files. Why is this useful? One purpose is it allows binary data to be accessed within C programs without having to embed the data in a C source file. Imagine embedding a program icon into an ELF file using a C source file:
char myicon [] = {\234,\073,\023,\245,...

rc provides an easy method to do just that.

The re tool is used to change data after the program has already been linked into an executable, for example to replace the icon resource added to an executable as was done above.

Abstractly, these tools are used to manipulate what I call "resources". A resource is a pair of symbols (variables) in an executable or relocatable object file. The first symbol is an array of bytes containing data the program uses, and the second is an integer containing the size of the first symbol. These together provide enough information for a C program to use the information the resource represents.

What are these elves you're talking about?
The ELF files described above are a standard format of executable files and relocatable files. When you run a program under GNU/Linux, you are running an ELF executable file.

The ELF relocatable files are the .o files generated when compiling a C or C++ program. They are an intermediate stage between compiled source code, and a linked executable.