我正在尝试为stat/lstat/fstat编写一个钩子,但似乎无法从dlsym获得原始版本。我使用以下代码来获取原始指针。
orig_stat = dlsym(RTLD_NEXT, "stat");
orig_lstat = dlsym(RTLD_NEXT, "lstat");
orig_fstat = dlsym(RTLD_NEXT, "fstat");但是,这三个变量都设置为null,并且调用dlerror也会返回null。
我使用以下命令创建共享对象:
clang fakestat.c -shared -fPIC -ldl -o fakestat.so并通过使用LD_PRELOAD=fakestat.so ./test运行测试程序来使用我的库
发布于 2018-02-27 01:57:20
stat家族函数实际上是glibc中内部函数的包装器。您可以在调用任何标准[lf]stat调用的二进制文件上查看objdump的输出,您将看到这些函数的二进制文件中的实际符号。所以你必须挂接这些函数。以下是您希望挂钩/dlsym的函数:
用于stat的__xstat和__xstat64。
用于lstat的__lxstat和__lxstat64。
用于fstat的__fxstat和__fxstat64。
用于LFS support的64后缀函数。请参阅feature test macros.
https://stackoverflow.com/questions/48994135
复制相似问题