本文共 2273 字,大约阅读时间需要 7 分钟。
原文地址: 首先,P文件为了保护知识产权设计的一种加密文件,是不能查看的。
P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用,即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调用速度。
P文件可以用来作保密代码之用,如果你给别人一个M文件,别人可以打开来看到你所有的代码和算法。如果你的代码不想被别人看到,那可以给他P文件。
1.首先,将当前工作目录切换到.p文件所在的目录,然后就可以在左侧的工作空间窗口看见该目录所包含的所有文件了,当然包括.p文件啦~
2.由于.p文件是.m文件的预解析版本(不能查看、编辑),显然.p文件同.m文件一样都是一个函数体,只不过此时该函数是一个黑盒子罢了。举例如test.p文件便意味着存在一个已经编好的函数test(如何实现我们不知道),为调用这个函数test,我们需要知道它的参数形式 此时在命令窗口下键入help test,即可查看到test函数的参数 然后我们就可以调用啦
在Matlab中,我们经常把语句或函数写在一个M文件里,便于模块化和代码重用,比如,写一个test.m的文件(即自定义一个test函数):
% ———————-% test.ma = 1;b = 2;% ———————-
% ———————-% test2.mfunction a = test2(b)a = b * 2;% ———————-
以上的内容我想大部份人都知道是怎么一回事了,以下说一说P代码文件。
便会在相应test.m的文件夹里产生了test.p。如果这时在Command Window里输入:
P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用,即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调用速度。
如Matlab的当前目录(Current Directory)有test.m文件,作预解析后,又有test.p文件。因为P文件的调用优先级比M文件要高,所以当你调用test时,会作优先选择而调用了test.p。
% ———————-% test.ma = 3;b = 4;% ———————-
>> testWarning: P-file C:\Program Files\MATLAB71\work\test.p is older than M-file C:\Program Files\MATLAB71\work\test.m.C:\Program Files\MATLAB71\work\test.p may be obsolete and may need to be regenerated.Type "help pcode" for information about generating P-files from M-files.
会出现一个Warning,警告你所调用的P文件比同名的M文件要旧,即表示M文件已被修改了。尽管如此,调用的还是旧的P文件,即得出a = 1和 b = 2。
P文件可以用来作保密代码之用,如果你给别人一个M文件,别人可以打开来看到你所有的代码和算法。如果你的代码不想被别人看到,那可以给他P文件。
----------------------------------------------------------------------------
生成p文件的方法很简单,在command wondow里面用 mcc -B pcode file.m命令转化为pcode文件,据说是不会被反编译的。
补充一下,p文件也不一定是绝对安全的,p文件是由AES算法加密的,AES的密钥又被RSA算法加密,p文件在执行时很有可能是被解密后执行,这么说来RSA的私钥很有可能也藏在matlab的某处。 另外,可以通过一些非常规手段获取一些p文件中的语句, 不过,总体上来说p文件的可靠性还是比较高的。 转载地址:http://iqdxi.baihongyu.com/