在MATLAB中隐藏代码行

时间:2016-12-01 14:23:56

标签: matlab

我想知道如果有可能以及如何在MATLAB中隐藏一行代码或整行代码。例如:

if a=b
   x=y+1; x=x^2;
end

隐藏了x = x ^ 2,但仍然运行该过程。我的意思是:

if a=b
       x=y+1; 
end

2 个答案:

答案 0 :(得分:6)

(脸上带着邪恶的笑容)

如果您真的想要与这样的人混淆,那么您将会想要继续operator overloading route。跟我一起旅行,你几乎肯定会在试图和别人开玩笑的时候开枪自杀!

(对疯子的笑声闪电迸发)

我之前在其他几个问题(herehere)中讨论了这个问题。基本上,您可以更改MATLAB数据类型的内置运算符的默认行为。在这种情况下,我们将更改plus运算符对类double的变量(默认变量类型)的工作方式。在MATLAB path上创建一个名为@double的文件夹,然后创建一个名为plus.m的文件,并将以下代码放入其中:

function C = plus(A, B)

  C = builtin('plus', A, B);

  if strcmp(inputname(1), 'y')
    C = C.^2;
  end

end

现在,亲自试试......

>> y=1;   % Initialize y
>> x=y+1
x =
     4    % Wait a minute...
>> x=1+1
x =
     2    % OK
>> x=1+y
x =
     2    % OK
>> x=y+1
x =
     4    % What?!
>> x=y+2;
x = 
     9    % No!!
>> y=3;
>> x=y+1
x =
    16    % Oh noes! I've been hax0red!!11!1!

工作原理:

新的plus函数会影响内置函数,因此在对双精度执行加法时会调用它。它首先调用内置plus来使用builtin函数进行实际添加。这是必要的,因为如果你在这里写C=A+B;它会再次调用假plus并导致无限递归。然后,它使用inputname函数来检查函数的第一个输入的变量名是什么。如果是'y',我们会在返回之前对结果进行平方。

玩得开心!!!

...并记得在完成后删除它。 ;)

答案 1 :(得分:5)

if a==b
    x = y+1;
    for ind = 1
        x = x^2;
    end
end

有点古怪,但你可以崩溃像loop/endfor循环这样的while块。只需单击编辑器中的-符号:

enter image description here

因此,对于两条或更少的线条,这对您没有帮助,但是如果您想要隐藏,例如40行,它明显缩短了。

另一种选择是简单地将其放入一百个左右的空间并使其混淆:

if a==b
    x = y+1;                                                                                                                                          x = x^2;
end

感谢excaza编写x=x^2;的最混淆方式:

eval(cast((sscanf('240,122,240,188,100,118', '%d,')./2)', 'like', ''))