我有一个相当特殊的文件格式可以使用: 每行以其内容的校验和开头,后面跟着一个换行符。带文件功能的LD_PRELOAD
它看起来像这样:
[CHECKSUM OF LINE_1][LINE_1]\n
[CHECKSUM OF LINE_2][LINE_2]\n
[CHECKSUM OF LINE_3][LINE_3]\n
...
我的目标:要允许任何应用程序使用这些文件的工作就像他们将与其他任何文本文件工作 - 不知道额外的校验和在每行的开头。
由于我使用Debian wheezy(内核3.18.26)在Linux机器上工作,我想使用LD_PRELOAD机制来覆盖相关的文件功能。 我在https://zlibc.linux.lu/index.html上看到过类似zlibc的东西 - 解释了它是如何工作的(https://zlibc.linux.lu/zlibc.html#SEC8)。
但我没有明白。它们只取代文件打开功能。没有阅读。没有写信。没有fseek。没有。那么它是怎样工作的? 或者 - 我必须拦截哪些函数来处理这个文件上的每个读或写操作并相应地处理它们?
这听起来像一个合理的做法。 我的假设是正确的,所有功能,如fopen,fclose,fgets,fputs,fread,fwrite等等都是库函数,使用你提到的系统调用? 像fseek和ftell这样的函数怎么样? 是否有任何其他系统调用我应该拦截以确保一切正常? –
@DanielHeinrich:我更新了答案。 – woockashek