A working (but not thoroughly tested) version of the static binary rewriter
authorDaniel McNulty <mcnulty@cs.wisc.edu>
Wed, 16 Dec 2009 21:36:36 +0000 (15:36 -0600)
committerDaniel McNulty <mcnulty@cs.wisc.edu>
Tue, 16 Feb 2010 22:46:13 +0000 (16:46 -0600)
commit74b97da57f0c72d5b6dfffcf96390be452246cf3
tree4059e8f0470db2008751264778eaaac3bac8ed2c
parent74633a78f30823b9125dfe0ccb4841f78642638f
A working (but not thoroughly tested) version of the static binary rewriter
for static executables for both x86 and x86_64. Additionally, this includes
changes to support a static RT library, which is a collection of
AddressSpaces. Includes changes to Dyninst to support parsing of
relocatable files (.o's).
==============================================================================
---parseThat---
config.h
    Added a deque to the struct Config to store additional libraries to be loaded.
dyninstCore.C
    Added code to load additional libraries. Also, factored code to load libraries
    outside of instrumentation loop.
parseThat.C
    Added command line option '-l' to specify additional libraries, can be specified
    multiple times. Also, fixed --skip-func option.

---dyninstAPI_RT---
*86*linux2.4/Makefile
    Added new files and flags used during a non-pic static library build.
    Added _32 non-pic static library as well for x86_64.
make.library.tmpl, dyninstAPI_RT/make.module.tmpl
    Added new target -- a non-pic static library. Added rules to build non-pic object
    files
RTlinux.c,RTposix.c,RTsignal-x86.S
    Modified so static version of RT library does not depend on libpthreads or libdl
RTstatic_ctors_dtors-linux-x86.C
    Provides some functions for processing rewritten .ctors and .dtors sections.
RTtlsgetaddr-linux-x86*.S
    Provides a ___tls_get_addr that stands in for a function of the same name
    provided by the dynamic linker. Helps implement TLS for the static binary rewriter.

---SymtabAPI---
emitElf*
    Moved linkStatic and other functions of the static binary rewriter to a separate
    class to allow the code to be shared by emitElf and emitElf64. Also, made some
    changes to remove ifdefs and use architecture specific relocationEntry functions.
emitElfStatic*
    Minor changes to move these functions to a separate class. Moved LinkMap to its
    own file. Can now emit a .bss section, and COMMON block creation is now more
    generic.
LinkMap*
    Created separate files for LinkMap structure.
Symtab*
    Modifications to support parsing of relocatable files. Added a field is_dynamic and
    accessor. Changes to relocationEntry -- factor architecture dependent functions to
    separate function. Changed interface of addExternalSymbolReference.
Object-elf.C
    Lots of small fixes related to how relocatable files are treated. Changed
    parse_all_relocations to be more efficient in its use of maps.
relocationEntry-*
    Added architecture specific files instead of using ifdefs.
Module.C
    Modified to classify shared objects correctly.

---DyninstAPI---
Changed RT library to be represented as a collection of AddressSpace objects instead of
a single AddressSpace object. This results with addition of iterations when searching
the RT library.

baseTramp.C
    Tramp guards can now be used when rewritting static binaries.

binaryEdit.*
    Added ability to determine if a static binary is multithread capable (this is
    architecture dependent). Also, changed to accomodate interface change for
    addExternalSymbolReference. Added doStaticBinarySpecialCases necessary for
    processing static binaries. Init fini callbacks were turned off for static binaries.

image*,IA_IAPI.C
    Added getPtrToInstruction function that works for relocatable files. Modified
    some uses of the previous function to use new version.

linux*
    Added some OS and architecture functions for processing special cases with static
    binaries. This includes functionality for replacing global constructor and
    destructor processing functions to use special constructor and destructor
    handlers. Special relocations are created for these handlers that are
    processed when the rewritten executable is emitted.
60 files changed:
dyninstAPI/h/BPatch_binaryEdit.h
dyninstAPI/src/BPatch_asyncEventHandler.C
dyninstAPI/src/BPatch_binaryEdit.C
dyninstAPI/src/IA_IAPI.C
dyninstAPI/src/addressSpace.C
dyninstAPI/src/addressSpace.h
dyninstAPI/src/baseTramp.C
dyninstAPI/src/binaryEdit.C
dyninstAPI/src/binaryEdit.h
dyninstAPI/src/image-flowGraph.C
dyninstAPI/src/image-func.C
dyninstAPI/src/image-sparc.C
dyninstAPI/src/image-x86.C
dyninstAPI/src/linux-x86.C
dyninstAPI/src/linux.C
dyninstAPI/src/mapped_object.C
dyninstAPI/src/mapped_object.h
dyninstAPI/src/process.C
dyninstAPI/src/process.h
dyninstAPI/src/symtab.C
dyninstAPI/src/symtab.h
dyninstAPI_RT/i386-unknown-linux2.4/Makefile
dyninstAPI_RT/make.module.tmpl
dyninstAPI_RT/src/RTlinux.c
dyninstAPI_RT/src/RTposix.c
dyninstAPI_RT/src/RTsignal-x86.S
dyninstAPI_RT/src/RTstatic_ctors_dtors-linux-x86.c [new file with mode: 0644]
dyninstAPI_RT/src/RTtlsgetaddr-linux-x86.S [new file with mode: 0644]
dyninstAPI_RT/src/RTtlsgetaddr-linux-x86_64.S [new file with mode: 0644]
dyninstAPI_RT/x86_64-unknown-linux2.4/Makefile
make.library.tmpl
parseThat/src/config.h
parseThat/src/dyninstCore.C
parseThat/src/parseThat.C
symtabAPI/h/Archive.h
symtabAPI/h/Symtab.h
symtabAPI/h/symutil.h
symtabAPI/i386-unknown-linux2.4/Makefile
symtabAPI/src/LinkMap.C [new file with mode: 0644]
symtabAPI/src/LinkMap.h [new file with mode: 0644]
symtabAPI/src/Module.C
symtabAPI/src/Object-elf.C
symtabAPI/src/Region.C
symtabAPI/src/Symtab-lookup.C
symtabAPI/src/Symtab.C
symtabAPI/src/emitElf-64.C
symtabAPI/src/emitElf-64.h
symtabAPI/src/emitElf-static-x86.C [deleted file]
symtabAPI/src/emitElf.C
symtabAPI/src/emitElf.h
symtabAPI/src/emitElfStatic-linux-x86.C [new file with mode: 0644]
symtabAPI/src/emitElfStatic-stub.C [moved from symtabAPI/src/emitElf-static-stub.C with 64% similarity]
symtabAPI/src/emitElfStatic.C [moved from symtabAPI/src/emitElf-static.C with 69% similarity]
symtabAPI/src/emitElfStatic.h [new file with mode: 0644]
symtabAPI/src/relocationEntry-elf-ppc32.C [new file with mode: 0644]
symtabAPI/src/relocationEntry-elf-ppc64.C [new file with mode: 0644]
symtabAPI/src/relocationEntry-elf-sparc.C [new file with mode: 0644]
symtabAPI/src/relocationEntry-elf-x86.C [new file with mode: 0644]
symtabAPI/src/relocationEntry-stub.C [new file with mode: 0644]
symtabAPI/x86_64-unknown-linux2.4/Makefile