我想知道如果有可能以及如何在MATLAB中隐藏一行代码或整行代码.例如:
if a=b
x=y+1; x=x^2;
end
Run Code Online (Sandbox Code Playgroud)
并且隐藏了x = x ^ 2,但仍然运行该过程.我的意思是:
if a=b
x=y+1;
end
Run Code Online (Sandbox Code Playgroud)
(脸上带着邪恶的笑容绞着手)
如果你真的想弄乱这样的人,那么你就会想要让运营商超载路线.和我一起踏上一段旅程,你几乎肯定会在尝试与别人开玩笑的时候拍自己的脚!
(一个疯子的笑声闪电般的闪电)
我之前(在这里和这里)已经在其他一些问题中讨论了这个问题.基本上,您可以更改MATLAB数据类型的内置运算符的默认行为.在这种情况下,我们将更改plus运算符对类double的变量(默认变量类型)的工作方式.@double在MATLAB路径上创建一个文件夹,然后创建一个名为的文件plus.m并将以下代码放入其中:
function C = plus(A, B)
C = builtin('plus', A, B);
if strcmp(inputname(1), 'y')
C = C.^2;
end
end
Run Code Online (Sandbox Code Playgroud)
现在,亲自试试......
>> 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!
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
新plus函数会影响内置函数,因此在对双精度执行加法时会调用它.它首先plus使用builtin函数调用内置函数进行实际添加.这是必要的,因为如果你在C=A+B;这里写的话,它会plus再次调用假冒并导致无限递归.然后,它使用该inputname函数来检查函数的第一个输入的变量名是什么.如果是'y',我们在返回之前对结果进行平方.
玩得开心!!!
......记得在你完成后删除它.;)
if a==b
x = y+1;
for ind = 1
x = x^2;
end
end
Run Code Online (Sandbox Code Playgroud)
有点古怪的方式,但你可以坍塌loop/end块for和while循环.只需单击-编辑器中的符号:
因此,对于两条或更少的线条,这对您没有帮助,但如果您想要隐藏例如40条线条,则会明显缩短它.
另一种选择是简单地将卡片放入大约一百个空间并使其混淆:
if a==b
x = y+1; x = x^2;
end
Run Code Online (Sandbox Code Playgroud)
感谢excaza最模糊的写作方式x=x^2;:
eval(cast((sscanf('240,122,240,188,100,118', '%d,')./2)', 'like', ''))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |