- 论坛徽章:
- 0
|
原帖由 system888net 于 2009-1-4 12:56 发表 ![]()
lz是关心在同一个动态库中两个函数之间调用的时候plt修改是否会共享吗? 因为没见到你的代码,所以只能这么理解了,若理解有误请LZ更正.
对于sum call _sum,虽然两个函数都在动态库中,但运行时都是从属 ...
对,我关心的就是同一个共享库中的两个函数之间的调用问题。
看我的代码。
mylib.c
#include <stdio.h>
int a,aa;
int sum(int,int);
int _sum(int,int);
int sum(int x, int y)
{
a = 1;
aa =2 ;
a = _sum(x,y);
printf("in sum, a =%d\n",a);
return a;
}
int _sum(int x, int y)
{
return x + y;
}
注意:
1、mylib.c生成libmylib.so
2、注意语句“a=_sum(x,y);”,返回编后是“4af: e8 c4 fe ff ff call 378 <_sum@plt>”。请注意,这个“call 378”在被映射到不同的进程后应该是call不同的地址,因为共享库自己的plt表项_sum@plt的地址在各进程中是不同的(因为共享库被映射的起始地址不同)。那么,如果这一句call在各进程中是不同的,那岂不是共享库的代码并没有被各进程共享? |
|