|
楼主 |
发表于 2009-2-11 14:00:33
|
显示全部楼层
不知道这个方法大家试过没:
环境变量LD_LIBRARY_PATH也可保存目录列表,
装载附加的共享库
在ELF系统上,为了执行一个ELF文件,内核要把控制权交给动态连接器
ld-linux.so.1。
动态连接器执行以下一个步骤完成从程序到进程映象:
1.分析可执行文件中的动态信息section,决定需要哪些库。
2.定位和映象(map)那些共享库,并且分析它们动态信息section
决定是否需要附加的共享库。
3.为可执行程序和那些需要的共享库执行重定位。
4.调用共享库中提供的任何初始化函数并且安排共享库提供的
清除(cleanup)函数在共享库卸栽出进程空间的时候运行。
5.传控制给程序
6.为应用程序提供函数的迟延装定服务
7.为应用程序提供动态转载服务。
环境变量LD_PRELOAD设置共享库名或者用":"把文件名隔开。动态连接器在
任何那些请求的共享库之前把环境变量LD_PRELOAD的共享库装载到进程地址
空间去。例如:
# LD_PRELOAD=./mylibc.so myprog
这里./mylibc.so将第一时间map到程序myprog的空间。因为动态连接器在找
寻标号的时候总是使用第一次碰到的标号,所以我们可以使用LD_PRELOAD来
覆盖标准共享库中的函数。
我们可以这样:
#gcc -c -fPIC -O3 print.c
#gcc -shared print.o -o print.so.1.0
创建自己的共享连接库 |
|