gpt4 book ai didi

linux - 具有文件功能的 LD_PRELOAD

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:58 27 4
gpt4 key购买 nike

我有一种相当特殊的文件格式可以使用:每行都以其内容的校验和开头,后跟换行符。

看起来像这样:

[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。没有什么。那么它是怎样工作的?或者 - 我必须拦截哪些函数来处理对该文件的每个读取或写入操作并相应地处理它们?

最佳答案

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

可能的实现:

zlibc 打开:

  1. 解压你想打开的文件到一些临时文件
  2. 打开这个临时文件而不是你的

zlibc 关闭:

  1. 压缩临时文件
  2. 覆盖原始文件

在这种情况下,您不需要覆盖读/写/等,因为您可以使用原始的。

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

  1. 打开,用 strip 化校验和复制你的文件。 关闭计算校验和并覆盖原始文件
  2. readwrite 能够跳过/计算校验和。

广告 2。来自 What is the difference between read() and fread()? :

fread() is part of the C library, and provides buffered reads. It is usually implemented by calling read() in order to fill its buffer

在这种情况下,我相信重写 openclose 会更不容易出错,因为您可以安全地重用原始的 read, write, fread, fseek

关于linux - 具有文件功能的 LD_PRELOAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com