Folks:
authorchadd <chadd>
Mon, 15 Apr 2002 21:48:43 +0000 (21:48 +0000)
committerchadd <chadd>
Mon, 15 Apr 2002 21:48:43 +0000 (21:48 +0000)
commitd063a62204f70032ad9505a4effb88d58aa7985a
tree8704f11d3b474e23c55bb20c26bbad93ec17346a
parent0a85665b49f67df5c2e778f56fb073690cafc1ff
Folks:
This commit brings a temporary fix
to the problem with shared libraries moving around
in mutated (via save the world) binaries.  The
mutator currently throws an error to the user
that they can optionally ignore when it sees
dlopen being used.

Now with this commit the mutated binary
will check each loaded shared library to make sure
that if it is instrumented it is loaded in the
correct location.  If it is not loaded in the correct
location an error message is printed and the
application exits.  There is no recoverable way
to handle this right now, the instrumentation will
simply be jumping to the wrong addresses.

In the future I hope to fix this, that is
to say have the mutated binary patch its own
mutations after the shared library is loaded to
take into account the new addresses.  This will
be a large and difficult task because of the way
we generate code to place in the mutatee.  Note
that to correctly patch the mutated binary every
instruction the mutator inserts into the mutatee
that touches memory or performs flow control, either
through relative or absolute addresses, must be
looked at to ensure correctness.  That is a lot
of instructions and they are generated all over
the place.

Note this commit is for Solaris and Linux.

IMPORTANT: This commit also moves the save the
world functionality to RTmutatedBinary.c.  This is part
of an effort to pull the Dyninst and Paradyn runtime
shared library apart and create two separate,
non-interdependent objects.

cheers,c
chadd
dyninstAPI/src/Object-elf.C
dyninstAPI/src/Object-elf.h
dyninstAPI/src/inst-x86.C
dyninstAPI/src/linux.C
dyninstAPI/src/process.C
dyninstAPI/src/process.h
dyninstAPI/src/solaris.C
dyninstAPI_RT/i386-unknown-linux2.4/Makefile
dyninstAPI_RT/sparc-sun-solaris2.8/Makefile
dyninstAPI_RT/src/RTcommon.c
dyninstAPI_RT/src/RTmutatedBinary.c [new file with mode: 0644]