MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   是否可以拦截matlab save()字节流 (https://www.labfans.com/bbs/showthread.php?t=26227)

poster 2019-12-14 20:13

是否可以拦截matlab save()字节流
 
在matlab中,可以使用matlab save()调用将matlab对象甚至整个工作区写入文件。我想截取字节流并在将其转到文件之前对其进行后处理,这可能吗?或者,可以指定写入字节流的文件描述符,而不是通常作为参数进入save()调用的文件名。

请注意,我不是在寻找在matlab中写入文件的替代方法,我知道我可以fopen()文件并写入所需的内容,但是重点是我想(重新)使用对象序列化在内部保存调用,而不是再发明我自己的。

对于load()调用,当然会出现一个模拟问题,但在那种情况下,在字节流进入反序列化过程之前就对其进行了拦截,但我想是否有可能为save()方法使用,以解决load()问题。自然。

一些澄清:
[LIST=1][*]我不是在寻找一种序列化matlab数据的新方法,它已经存在,整个练习的重点是在save()调用中使用现有的序列化,因此1)我不需要开始更新序列化较新版本的matlab中用于新类型对象的代码,或者天堂禁止人们开始使用自定义OOP对象,并且2)我仍然可以轻松地使用现有代码来读取mat文件,例如scipy对mat文件的支持。
[*]流在进行后处理之前一定不能泄漏到文件或其他任何东西上,这是出于安全性的考虑,将流简单地写到文件中完全破坏了该目的。
[/LIST]并发症:
[LIST][*]看来在matlab的save函数中使用的功能不只是常规的顺序写入。检查库的对象代码似乎保存功能是使用实施matPutVariable (以前称为matPutArray ),该类型的给定变量写入mxArray*出到文件的类型MATFile*打开与matOpen 。这里的问题是matPutVariable描述中的以下文本:
[INDENT]如果MAT文件中不存在mxArray ,则函数会将其追加到末尾。如果文件中存在具有相同名称的mxArray ,则该函数通过重写文件将现有的mxArray替换为新的mxArray 。

[/INDENT]这意味着matPutVariable函数将必须在文件中进行查找,显然在使用管道时将无法进行查找,因此,在使用此现有的序列化功能时,无法使用管道来实现我们对字节流的处理。
[/LIST]
[B]回答:[/B]

在思考了几个月之后,我要说,不,这是不可能的。至少,并非没有不可移植的二进制/ ELF黑客攻击。



[url=https://stackoverflow.com/questions/4807035]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:22

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.