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

时间:2015-03-04 14:59:03

标签: symlink ld-preload zpaq

目标:我想强制zpaq备份符号链接,好像它们是真实文件一样,可能是通过欺骗它(使用LD_PRELOAD或某种排序或FUSE系统)使思考符号链接是实际文件。

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

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

有没有办法做到这一点?否则精彩的zpaq没有 目前支持符号链接,文件位于不同的驱动器上, 所以我也不能使用硬连接。

1 个答案:

答案 0 :(得分:1)

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

唯一可能的问题是,对glibc中的内容的调用并不总是与您可能期望的符号相关联...例如,写入调用实际上可能会调用__write(如果它没有&#39} ; t内联到更低级别的东西)。根据您的优化级别,实际上将完全删除某些函数调用,例如具有固定长度的memset。如果您正在使用_FORTIFY_SOURCE,还会检查许多功能的变体。我不认为这应该是readlink的问题,但您可能只需要TIAS。

基本上就是这样做。如果它不起作用,那么然后会在需要帮助调试时返回到SO。