无法使用 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.
我正在尝试为 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.