如何在 C 代码中动态更改/伪造“文件大小”
Posted
技术标签:
【中文标题】如何在 C 代码中动态更改/伪造“文件大小”【英文标题】:How to change/fake the 'file size' on the fly in C code 【发布时间】:2014-10-31 09:52:32 【问题描述】:我正在使用 FUSE 开发用户级文件系统,我的要求是:
当我为File A
发出读取指令时,我想叠加另一个文件(比如File B
)的内容并将File B
的内容呈现为File A
的内容。
我已经通过缓冲区修改实现了这一点,方法是在我的熔丝读取中捕获它并在内部读取File B
,并将缓冲区内容复制到传入的File A
缓冲区,而不是对File A
进行任何实际读取调用。因此,File A
调用返回并将 File B
的内容复制到其缓冲区中。
另外,File A
的大小与File B
相比更小。
当使用调试器检查时,File A
缓冲区内容看起来很好(包含整个 File B
内容),但是当它显示为 File A
时(比如Vi
),我只能看到那些字符作为File A
的大小,但由于File B
的大小更大,即使返回到File A
的缓冲区(复制的File B
数据)有更多要显示的内容,也不会显示整个数据。这是因为File A
的大小较小,当达到File A
的文件大小的字符数时,显示将终止。
我尝试查看struct stat
,但它是一个只读的东西,它显示File A
的大小比File B
更小。
struct stat stat1;
stat(fileA, &stat1);
所以,我的问题是我如何即时伪造/更改File A
的大小,以便它能够显示整个数据(因为File B
更大而叠加)。
【问题讨论】:
【参考方案1】:您将无法执行此操作,因为许多应用程序在读取文件之前请求文件大小,然后仅读取报告的数据量。
【讨论】:
以上是关于如何在 C 代码中动态更改/伪造“文件大小”的主要内容,如果未能解决你的问题,请参考以下文章