Rust 这条奇怪的线是干什么的?

Rust 这条奇怪的线是干什么的?,rust,deobfuscation,Rust,Deobfuscation,已经对Rust编译器进行了新的测试。它验证是否可以编译奇怪的行: fn main() { let val = !((|(..):(_,_),__@_|__)((&*"\\",'@')/**/,{})=={&[..=..][..];})// ; assert!(!val); } 这条线到底是干什么的?让我们把它分解一下!首先,我重新设置了行的格式,以在某种程度上增加“可读性” 它以let val=开头,以//结尾。这是一个简单的let绑定,形式为let v

已经对Rust编译器进行了新的测试。它验证是否可以编译奇怪的行:

fn main() {
    let val = !((|(..):(_,_),__@_|__)((&*"\\",'@')/**/,{})=={&[..=..][..];})//
    ;
    assert!(!val);
}

这条线到底是干什么的?

让我们把它分解一下!首先,我重新设置了行的格式,以在某种程度上增加“可读性”

它以
let val=
开头,以
//结尾。这是一个简单的let绑定,形式为
let val=⟨v⟩;。让我们讨论一下
⟨v⟩是否:

  • 通过not运算符进行否定:
    !( ⟨_⟩ )
    
    • 通过
      ==
      ⟨lhs⟩ == ⟨rhs⟩
      
      • ⟨lhs⟩:闭包的函数调用
        (⟨关闭⟩ )( ⟨args⟩ )
        
        • ⟨关闭⟩:闭包定义
          |⟨第一参数⟩, ⟨第二参数⟩| ⟨身体⟩
          
          • ⟨第一参数⟩
            (..):(?,?)
            。此参数有一个类型注释
            (?,?)
            ,表示它是一个2元组。模式(通常,您会找到一个名称)是
            (..)
            ,这意味着:一个元组,但忽略它的所有元素
          • ⟨第二参数⟩
            。这是一种通常从匹配绑定中知道的模式:
            name@pattern
            。因此实际模式是
            (它不绑定任何内容),值通过
            @
            绑定到名称
            (两个下划线,这是一种有效标识符)
          • ⟨身体⟩
            \uuuuuu
            。这正是我们将第二个参数绑定到的标识符。因此闭包基本上等同于
            \uux,x
        • ⟨args⟩:两个参数的列表,中间有一个内联注释:
          ⟨第一个参数⟩/**/, ⟨第二个参数⟩
          
          • ⟨第一个参数⟩
            (&*“\\”,“@')
            。这只是一个2元组,其中第一个元素是一个包含反斜杠的字符串,第二个元素是char
            “@”
            。第一个元素的
            &*
            将取消
          • ⟨第二个参数⟩
            {}
            。这是一个类型为
            ()
            的空块。因此,作为第二个参数,传递一个单位
      • ⟨rhs⟩:内有一条语句的大括号块:
        {⟨stmt⟩; }。请注意,这是一条带有分号的语句。这意味着结果不是从块返回的。相反,块返回的
        ()
        ,与空块
        {}
        一样。
        • ⟨stmt⟩:索引表达式
          {&⟨收集⟩[⟨指数⟩] }
          • ⟨收集⟩
            [..=..]
            。这是一个包含一个元素的数组。元素为
            。=..
            ,其中范围的
            结尾是写入的
          • ⟨指数⟩
            。这又是
            满量程

总之:我们将调用闭包的结果与计算结果为
()
的带括号块进行比较。闭包基本上是
|,x | x
,我们传递给它的第二个参数是
{}
(计算结果为
()
),因此整个闭包调用表达式的计算结果为

这意味着整个过程相当于:

  • 让val=!(()=);
    ,这相当于:
  • 让val=!(true);
    ,相当于:
  • 让val=false;
值得一读的函数名有
zombiejesus
evil\u lincoln
let val = !(
    (
        |(..): (_, _), __@_| __
    )(
        (
            &*"\\", 
            '@'
        ) /**/, 
        {}
    )
    ==
    {
        &[..=..][..];
    }
)//
;