构建共享库-pie
选项似乎给你你想要的一切:
/* pie.c */
#include <stdio.h>
int foo()
{
printf("in %s %s:%d\n", __func__, __FILE__, __LINE__);
return 42;
}
int main()
{
printf("in %s %s:%d\n", __func__, __FILE__, __LINE__);
return foo();
}
/* main.c */
#include <stdio.h>
extern int foo(void);
int main()
{
printf("in %s %s:%d\n", __func__, __FILE__, __LINE__);
return foo();
}
$ gcc -fPIC -pie -o pie.so pie.c -Wl,-E
$ gcc main.c ./pie.so
$ ./pie.so
in main pie.c:9
in foo pie.c:4
$ ./a.out
in main main.c:6
in foo pie.c:4
$
p.S. glibc的通过系统调用实现write(3)
,因为它没有其他地方调用(这是最低水平的话)。这与能够执行libc.so.6
无关。
'/ lib目录/ LD-linux.so.2'只是另一个例子:) – 2010-07-11 22:21:51