~ubuntu-branches/debian/sid/upx-ucl/sid

« back to all changes in this revision

Viewing changes to src/stub/util/sstrip/README

  • Committer: Bazaar Package Importer
  • Author(s): Robert Luberda
  • Date: 2006-06-13 21:23:23 UTC
  • mfrom: (1.3.1 upstream) (3.1.2 edgy)
  • Revision ID: james.westby@ubuntu.com-20060613212323-343yzs4jt6vr5483
* New upstream version.
* Standards-Version: 3.7.2 (no changes).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
sstrip is a small utility that removes the contents at the end of an
 
2
ELF file that are not part of the program's memory image.
 
3
 
 
4
Most ELF executables are built with both a program header table and a
 
5
section header table. However, only the former is required in order
 
6
for the OS to load, link and execute a program. sstrip attempts to
 
7
extract the ELF header, the program header table, and its contents,
 
8
leaving everything else in the bit bucket. It can only remove parts of
 
9
the file that occur at the end, after the parts to be saved. However,
 
10
this almost always includes the section header table, and occasionally
 
11
a few random sections that are not used when running a program.
 
12
 
 
13
It should be noted that the GNU bfd library is (understandably)
 
14
dependent on the section header table as an index to the file's
 
15
contents. Thus, an executable file that has no section header table
 
16
cannot be used with gdb, objdump, or any other program based upon the
 
17
bfd library, at all. In fact, the program will not even recognize the
 
18
file as a valid executable. (This limitation is noted in the source
 
19
code comments for bfd, and is marked "FIXME", so this may change at
 
20
some future date. However, I would imagine that it is a pretty
 
21
low-priority item, as executables without a section header table are
 
22
rare in the extreme.) This probably also explains why strip doesn't
 
23
offer the option to do this.
 
24
 
 
25
Shared library files may also have their section header table removed.
 
26
Such a library will still function; however, it will no longer be
 
27
possible for a compiler to link a new program against it.
 
28
 
 
29
As an added bonus, sstrip also tries to removes trailing zero bytes
 
30
from the end of the file. (This normally cannot be done with an
 
31
executable that has a section header table.)
 
32
 
 
33
sstrip is a very simplistic program. It depends upon the common
 
34
practice of putting the parts of the file that contribute to the
 
35
memory image at the front, and the remaining material at the end. This
 
36
permits it to discard the latter material without affecting file
 
37
offsets and memory addresses in what remains. Of course, the ELF
 
38
standard permits files to be organized in almost any order, so if a
 
39
pathological linker decided to put its section headers at the top,
 
40
sstrip would be useless on such executables.