【发布时间】:2017-09-07 10:28:04
【问题描述】:
我在 IDA Pro 中查看了以下 C++ 代码:
__int64 __fastcall sub_14023B480(__int64 a1)
{
return *(_DWORD *)(a1 + 0x384) > 0 && !(*(_BYTE *)(a1 + 0xE8) & 8) && !(*(_DWORD *)(a1 + 0x290) & 0x800000);
}
a1 是一个实体。
0x384 指向一个健康值。
0xE8 和0x290 指向某种标志,但我怎么不能用 C# 写这样的检查:
if(!(a1 + 0xE8) & 8)
{
//Do something
}
由于在 C# 中,& 运算符返回 int 值。
【问题讨论】:
-
(… & 8) == 0? -
C#版本中
a1是什么类型?整数64?将类型后缀附加到数字文字以匹配表达式的其余部分。显示完整的代码,你得到什么编译器错误或运行时异常? “...int value...”:二元运算符&取整型,long/ulong都是这样。
标签: c# c++ reverse-engineering