【发布时间】:2018-01-04 18:46:50
【问题描述】:
我有一个 C 文件,里面有两个非常小的 subs 来重新实现 getauxval,
unsigned long int __wrap_getauxval (unsigned long int __type) {
printf("foobar");
exit(5);
}
unsigned long int getauxval (unsigned long int __type) {
printf("foobar");
exit(5);
}
我正在编译这个
gcc -shared -fPIC -ldl -Wl,-wrap=getauxval hax.c -o hax.so
这样,我可以运行这个
LD_PRELOAD=/tmp/hax.so myExec
它会打印 foobar 并死掉,但是 如果我删除 getauxval 并仅依赖 LD -wrap'd 版本 __wrap_getauxval,我发现它不起作用.我在这里想念什么?为什么我可以重新实现getauxval和LD_PRELOAD,但是我不能包装它?我该怎么做才能包装像getauxval 这样的函数?
【问题讨论】:
标签: gcc linker ld ld-preload