使用 LD_PRELOAD 强制程序将符号链接视为真实文件

Force program to treat symlinks as real files using LD_PRELOAD

目标:我想强制 zpaq 备份符号链接,就好像它们是真实文件一样,可能是通过愚弄它(使用 LD_PRELOAD 或某种类型或 FUSE 系统)认为符号链接是真实文件。

我想要create/find一个强制程序读取符号链接的库 因为它们是实际文件,然后使用 LD_PRELOAD (或其他东西 类似于)运行 该环境中的程序。

换句话说,当程序调用 readdir() [或其他] 时, 符号链接显示为实际文件,并且当程序调用 open() [或其他],它打开实际的目标文件,而不是符号链接。

有什么办法吗?否则很棒的 zpaq 没有 目前支持符号链接,文件在不同的驱动器上, 所以我也不能使用硬链接。

那么问题是什么?您似乎已经知道 LD_PRELOAD;您需要做的就是编写一个公开正确函数的库并将其放入 LD_PRELOAD。 This link 如果需要,可以更详细地解释该过程。

唯一潜在的问题是对 glibc 中事物的调用并不总是链接到您可能期望的符号……例如,对 write 的调用实际上可能调用 __write(如果它不内联到更低级别的东西)。根据您的优化级别,某些函数调用实际上将被完全删除,例如具有固定长度的 memset。如果您使用的是 _FORTIFY_SOURCE,那么还有许多功能的已检查变体。我不认为这应该是阅读链接的问题,但你可能只需要 TIAS。

基本上,就是这样做。如果它不起作用,然后 如果您需要帮助调试,请返回 SO。