C/C++ 中的变量赋值中的表达式如何按位运算?

How do bitwise operations work on expressions within variable assignments in C/C++?

我正在学习逆向工程,我有以下片段,我试图理解它:

var = strcmp("C:\Windows\System32\svchost.exe", pe.szExeFile);
if (var)
  var = -(var < 0) | 1;
if (var)
{
  // additional code here
}

我想我明白这里发生的大部分事情,但我对 var = -(var < 0) | 1; 行。我对 C/C++ 只是非常模糊,所以我很难理解这一行的作用。

我知道它是按位 OR,但我不确定 -(var < 0) 是如何工作的。括号内的表达式是否计算为 1 或 0,然后应用负数和 OR?它被评估为布尔值吗?如果是这样,| 如何处理布尔值?

还是我完全忽略了这里的重点?

strcmp() returns 三种可能结果之一:

  • < 0
  • 0
  • > 0

假设常见的二进制补码,在第一个 if 之后变量 var 将是

  • -1 表示前者“< 0”
  • 0 为前者“=0”
  • +1为前者“>0”

然而,只有当 var 不为零时,第二个 if 才会被采用。

“神秘”的第一个if没有效果,就你显示的来源而言。