【发布时间】:2021-06-18 19:04:04
【问题描述】:
我正在学习逆向工程,并且我正在尝试理解以下 sn-p:
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?它被评估为布尔值吗?如果是这样,| 如何处理布尔值?
或者我完全错过了这里的重点?
【问题讨论】:
-
在 C 中,
<的结果是int(0 或 1) -
如果您计算出这些位(并假设二进制补码表示),那只是编写
var = (var < 0) ? -1 : 1的另一种方式。它可能是一种合法的编译器优化(以避免分支),但它不是人们通常会为此编写的代码。 -
@M.M - 谢谢,我至少可以根据这些信息进行逻辑分析
-
@dxiv - 当我最初阅读它时,我认为可能使用了 C 三元语法 |而不是 ?,因为这是我能够以对我有意义的方式解析它的唯一方法,所以很高兴知道,谢谢!
-
这没有多大意义。你可以删除它和下面的
if测试。
标签: c++ c reverse-engineering