加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

将Matlab的M文件转为P文件和exe可执行文件达到加密效果

(2017-09-18 13:06:40)
标签:

it

分类: 经典文档及MATLAB问题处理
转载:将Matlab的M文件转为P文件和exe可执行文件达到加密效果

在matlab中如果你的代码很重要,需要加密,目前我查到了两种方法:一、生成p文件;二、生成.exe文件
matlab生成p文件的方法很简单,在command wondow里面用
pcode yourfile.m
命令可以将M文件转化为对应的pcode文件yourfile.p,据说是不会被反编译的。
一、生成p文件
P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用, 即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又 因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调 用速度。
如Matlab的当前目录(Current Directory)有test.m文件,其中a=1,b=2,作预解析后,又有test.p文件。因为P文件的调用优先级比M文件要高,所以当你调用test时,会作优先选 择而调用了test.p。
可以修改test.m的代码为:
% ----------------------
% test.m
a = 3;
b = 4;
% ----------------------
再在Command Window里调用test:
>> test
Warning: 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文件。
pcode函数也可以应用在M函数文件。
p文件是加密文件,只能运行,不能还原成m文件的。

=================================================

如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:

 

一、生成独立可执行的程序(exe文件)步骤


1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS2010实现。

2、设置编译器。

在matlab命令行输入mbuild  –setup以及mex –setup,选择安装的c编译器(可能会选1也可能选0,这个要看你显示的是什么)。选择y  一直到done

3、调用编译器。

当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件,例如你的名字是im.m文件,那么fileaname就用im替换

 

二、脱离matlab运行可执行程序(换一个电脑运行exe)


     MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:

\toolbox\compiler\deploy\win64

文件名为MCRInstaller.exe。

步骤:

(一)先把这个安装在新电脑上

(二)然后配置环境

右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将路径C:\Program Files\MATLAB\MATLAB Compiler Runtime\v80\runtime\win64复制到里面就可以了。

 

三、运行exe,黑屏一闪


     基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:

方法一: 在命令窗口输入:

cd(prefdir) 

edit compopts.bat

在打开的文件最后添加以下语句:


A.VC环境下:

       set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup 


B.LCC环境下:

       set LINKFLAGS=%LINKFLAGS% -subsystemwindows 


C.Borland: 

       set LINKFLAGS=%LINKFLAGS% -aa

保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了


方法二:使用suppress工具:

下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppress.ini文件,用记事本打开,然后将其中“Name=test.exe”中text.exe的改为你生成的exe文件名。将suppress.exe(有个关盘和显示器的图标),改后的suppress.ini放到你生成的exe的同目录下。执行suppress.exe或者您自己生成的exe可以了。当然您可以自己修改suppress.exe的名字,改为您自己想要的名字。


方法三:使用mcc -e lesson1指令生成exe文件


总结:

方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。

方法二的缺点就是要同时存在您生成的exe以及supress.exe,必须在同一目录下。



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有