inserting a library(*.so) into a runing processe's adress space
Andrew Haley
aph@redhat.com
Sun Nov 30 12:16:00 GMT 2008
ranjith kumar wrote:
> I have c file (1.c) and a sharedlibrary file (libmy.so).
> I know that using dlopen() in 1.c we can insert libmy.so into address
> space of 1.c and call any function defined in that library.
>
> 1)My question is how to insert a library into a running process when
> it doen not contain dlopen() inside its source code???
> I have little bit information about this. By adjusting heap area of
> the process we can insert a call to dlopen(). I want to know
> how to access heap area of a running process and insert a call to
> dlopen(). I know about ptrace() can be used to stop a process and look
> inside its code.
> Any links or material please.
> Is there any other method to insert a library into a process???
You could certainly do it with ptrace by calling dlopen() in the
context of the process. To figure out how, read the ptrace docs and
inspect gdb source.
> 2) If a library is inserted in a process dynamically how and who
> will replace a function call ie) jump address(in the context of
> binary code) with correct address?
ptrace can do this too.
> 3) I know how to produce a lib******.so files.
> example: gcc -shared -o libmy.so my.o
> But what is the significanc of 'lib' prefix in libmy.so
> I saw some files(.so) without 'lib' prefix(for example my.so).
> How to produce such files and what is the difference between libmy.so
> and my.so??
It's just a naming convention that the tools use.
> 4) I produced an executable by
> gcc -o explample1 1.o lib.o
> and another by
> gccc -o exmple2 1.o libmy.so (libmy.so is made from lib.o)
> Which will run faster example1 or example2? why?
It's generally faster not to use shared libraries.
Your concerns cross a number of groups. binutils can help you for
some of this.
Andrew.
More information about the Gcc-help
mailing list