Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

pcode

创建对代码内容进行了模糊处理的可执行文件

说明

示例

pcode(item) 对搜索路径中 .m 文件或文件夹中的代码进行混淆处理,并生成扩展名为 .p 的 P 代码文件。例如,如果 item 是名为 mytest.m.m 文件,则生成的文件是 mytest.p。如果 item 是一个文件夹,则该文件夹中的所有脚本或函数文件都经过混淆处理并保存在当前文件夹中。在执行中 P 代码文件优先于对应的 .m 文件,即使已对 .m 文件进行了修改也是如此。

注意

安全注意事项:pcode 函数以专有的经过混淆处理的代码格式生成 MATLAB® 程序文件。请考虑结合多种方法来保护敏感代码或数据。有关详细信息,请参阅保护源代码的安全考虑事项

示例

pcode(item,"-R2022a") 使用更复杂的混淆处理算法来创建 P 代码文件。以这种方式进行混淆处理的文件只能在 MATLAB R2022a 及更高版本中运行。

pcode(item,"-R2007b") 使用默认传统算法来创建 P 代码文件。

示例

pcode(item1,item2,...,itemN) 基于以逗号分隔的列表中指定的每个 .m 文件或文件夹创建 P 代码文件。

示例

pcode(___,"-inplace") 在与输入相同的文件夹中创建 P 代码文件。在上述语法中的任何输入参数组合后指定 "-inplace"

如果源文件位于包或类文件夹中,则 pcode 创建相同的包或类结构体以容纳生成的 P 代码文件。

示例

全部折叠

将函数文件转换为 P 代码文件。

在当前文件夹中名为 myfunc.m 的文件中,定义一个返回三次多项式平方根的函数。

function y = myfunc(x)
y = sqrt(x.^3 + x.^2 + x + 1);
end

myfunc.m 创建 P 代码文件。

pcode myfunc

确认在您调用 myfunc 时 MATLAB 会使用该 P 代码文件。

a = myfunc(3);
which myfunc
c:\myMATLABfiles\myfunc.p

在当前文件夹中名为 myfunc.m 的文件中,定义一个返回三次多项式平方根的函数。

function y = myfunc(x)
y = sqrt(x.^3 + x.^2 + x + 1);
end

使用更复杂的混淆处理算法从 myfunc.m 创建 P 代码文件。以这种方式进行混淆处理的文件只能在 MATLAB R2022a 及更高版本中运行。

pcode myfunc -R2022a

确认在您调用 myfunc 时 MATLAB 会使用该 P 代码文件。

a = myfunc(3);
which myfunc
c:\myMATLABfiles\myfunc.p

sparfun 文件夹中的所选文件转换为 P 代码文件。

创建临时文件夹并定义 .m 文件的现有路径。

tmp = tempname;
mkdir(tmp)
cd(tmp)
filename = fullfile(matlabroot,"toolbox","matlab","sparfun","spr*.m");

创建 P 代码文件。

pcode(filename)
dir(tmp)
.            ..           sprand.p     sprandn.p    sprandsym.p  sprank.p     

临时文件夹现在包含已编码的 P 代码文件。

基于作为类的一部分的输入文件生成 P 代码文件。(您可以将相同的过程应用于包中的文件。)本示例使用现有的 MATLAB 示例类。

classfolder 定义为包含 .m 文件的现有类文件夹。

classfolder = fullfile(docroot,"techdoc","matlab_oop", ...
    "examples","@BankAccount")
dir(classfolder)
classfolder =

C:\Program Files\MATLAB\R2019a\help\techdoc\matlab_oop\examples\@BankAccount


.              ..             BankAccount.m  

创建临时文件夹。该文件夹此时不包含类结构体。

tmp = tempname;
mkdir(tmp)
cd(tmp)
dir(tmp)
.            .. 

为路径 classfolder 中的每个 .m 文件创建一个 P 代码文件。由于输入文件为类的一部分,MATLAB 创建文件夹结构以便输出文件属于相同的类。

pcode(classfolder)
dir(tmp)
.             ..            @BankAccount 

P 代码文件位于相同的文件夹结构中。

dir("@BankAccount")
.              ..             BankAccount.p  

在与输入文件相同的文件夹中生成 P 代码文件。

将多个 .m 文件复制到临时文件夹。

filename = fullfile(matlabroot,"toolbox","matlab","sparfun","spr*.m");
tmp = tempname;
mkdir(tmp)
copyfile(filename,tmp)
dir(tmp)
.            ..           sprand.m     sprandn.m    sprandsym.m  sprank.m 

在与原始 .m 文件相同的文件夹中创建 P 代码文件。

pcode(tmp,"-inplace")
dir(tmp)
.            sprand.m     sprandn.m    sprandsym.m  sprank.m     
..           sprand.p     sprandn.p    sprandsym.p  sprank.p  

输入参数

全部折叠

要进行混淆处理的 .m 文件或文件夹,指定为字符向量或字符串标量。

  • 没有文件扩展名且不是文件夹名称的输入参数必须为 MATLAB 路径上或当前文件夹中的函数。

  • 使用通配符 * 时,pcode 会忽略所有不带 .m 扩展名的文件。

  • pcode 函数不支持实时脚本或函数 (.mlx)。

  • 如果 item 位于包或类文件夹中,则 pcode 创建相同的包或类结构体以容纳生成的 P 代码文件。

要进行混淆处理的 .m 文件或文件夹的列表,指定为以逗号分隔的字符向量或字符串标量列表。该列表可以同时包括文件和文件夹。

详细信息

全部折叠

从相关文件创建 P 代码文件

除了您的程序之外,您还可以对您的程序所依赖的其他函数和脚本进行混淆处理。要确定运行程序所需的文件,请使用 matlab.codetools.requiredFilesAndProducts 函数。

模糊处理代码

P 代码文件是经过混淆处理的只执行形式的 MATLAB 代码。您无法在 MATLAB 编辑器或实时编辑器中打开 P 代码文件。

版本历史记录

在 R2006a 之前推出

全部展开