无法使用 dlsym 获取统计信息

Unable to get stat with dlsym

我正在尝试为 stat/lstat/fstat 编写一个钩子,但我似乎无法从 dlsym 获得原始版本。我正在使用以下代码来获取原始指针。

orig_stat = dlsym(RTLD_NEXT, "stat");
orig_lstat = dlsym(RTLD_NEXT, "lstat");
orig_fstat = dlsym(RTLD_NEXT, "fstat");

但是,所有三个变量都设置为 null 并调用 dlerror 也 returns null.

我正在创建共享对象:

clang fakestat.c -shared -fPIC -ldl -o fakestat.so

并通过 运行 一个带有 LD_PRELOAD=fakestat.so ./test

的测试程序使用我的库

stat 系列函数实际上是 glibc 中内部函数的包装器。您可以在调用任何标准 [lf]stat 调用的二进制文件上查看 objdump 的输出,您将在二进制文件中看到这些函数的实际符号。所以你必须挂钩这些功能。以下是您要挂接/dlsym 的函数:

__xstat & __xstat64 对于 stat.

__lxstat & __lxstat64 对于 lstat.

__fxstat & __fxstat64 对于 fstat.

后缀为64的函数用于LFS support. See the feature test macros.