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
没有效果,就你显示的来源而言。
我正在学习逆向工程,我有以下片段,我试图理解它:
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
没有效果,就你显示的来源而言。