Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux LD_使用文件函数预加载_Linux_Function_Overriding_Ld Preload - Fatal编程技术网

Linux LD_使用文件函数预加载

Linux LD_使用文件函数预加载,linux,function,overriding,ld-preload,Linux,Function,Overriding,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_PREL

我有一种非常特殊的文件格式: 每一行都以其内容的校验和开头,后跟一个新行字符

看起来是这样的:

[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-mechanism覆盖相关的文件函数。 我在zlibc上看到过类似的情况,并解释了它是如何工作的()

但是我不明白。它们仅替换文件打开功能。禁止阅读。不要写。没问题。没有什么。那么它是如何工作的呢?
或者-我必须截取哪些函数来处理此文件上的每个读或写操作并相应地处理它们?

我没有确切地检查它是如何工作的,但原因似乎很简单

可能的实施:

zlibc开放:

  • 将要打开的文件解压缩到某个临时文件
  • 打开此临时文件而不是您的文件
  • zlibc关闭:

  • 压缩临时文件
  • 覆盖原始文件
  • 在这种情况下,您不需要重写读/写/etc,因为您可以使用原始的

    在您的情况下,您有两种可能的解决方案:

  • 打开
    ,使用带条校验和复制文件<代码>关闭计算校验和并覆盖原始文件的
  • 读取
    写入
    ,能够跳过/计算校验和
  • 公元2年。 发件人:

    fread()是C库的一部分,提供缓冲读取。它是 通常通过调用read()来实现,以填充其缓冲区


    在这种情况下,我相信重写
    open
    close
    将不太容易出错,因为您可以安全地重用原始
    fread
    fseek
    等。这听起来确实是一种合理的方法。我的假设正确吗?所有函数,如
    fopen
    fclose
    fgets
    fputs
    fread
    fwrite
    ,等等。。。所有这些函数都是库函数,它们在某种程度上使用了您提到的系统调用?像
    fseek
    ftell
    这样的函数呢?我是否应该拦截其他系统调用以确保一切正常?