我需要弄清楚这个被混淆的C++代码(由其他人编写)是做什么的。我已经知道了几乎所有的事情,除了一个棘手的部分:
bool part1(char *flag)
{
int *t = (int *) memfrob(flag, 8);
unsigned int b[] = {3164519328, 2997125270};
for (int i = 0; i < 2; b[i] = ~b[i], ++i);
return !(0<:t:>-0<:b:>+1<:t:>-1<:b:>);
}
这个函数的return语句中发生了什么?我不知道这些冒号是什么意思。
我试着用谷歌搜索C++中的冒号运算符做了什么,但只找到了关于类构造函数和条件表达式的答案,这似乎与这个问题无关。
发布于 2021-07-10 13:15:05
代码使用了两个字母的alternative tokens,也称为“有向图”。具体来说,<:
是[
,:>
是]
。
因此,像0<:t:>
这样的语法就是0[t]
,而且由于数组下标可以与数组标识符交换,所以这只是t[0]
。
cppinsights.io是一个很好的工具,可以帮助消除代码的模糊。从链接中可以看出,代码只是对数组值进行了一些算术运算(在本例中,忽略static_cast
,这对于理解转换来说并不重要)。
https://stackoverflow.com/questions/68328017
复制相似问题