Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 是否可以拦截matlab save()字节流

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

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

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

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

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

回答:

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



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 19:43


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