【发布时间】:2023-03-24 00:07:01
【问题描述】:
我不喜欢这么多嵌套的 if,这就是为什么我想要与该条件相反的 if (section_header[i].Characteristics & IMAGE_SCN_MEM_WRITE)。那会是什么?我试过if (section_header[i].Characteristics & ~IMAGE_SCN_MEM_WRITE) continue,但不是正确的。
for (WORD i = 0; i < nt_headers->FileHeader.NumberOfSections; ++i)
{
if (functions[i] >= section_header[i].VirtualAddress && functions[i] < section_header[i].VirtualAddress + section_header[i].Misc.VirtualSize)
{
if (section_header[i].Characteristics & IMAGE_SCN_MEM_WRITE)
{
... next
}
}
}
【问题讨论】:
-
if(!(section_header[i].Characteristics & IMAGE_SCN_MEM_WRITE))? -
if ((section_header[i].Characteristics & IMAGE_SCN_MEM_WRITE) == 0)? -
如果
IMAGE_SCN_MEM_WRITE只是一位,您可以使用if (~section_header[i].Characteristics & IMAGE_SCN_MEM_WRITE),但它的可读性较差。 -
您似乎正在寻找不存在的按位 NAND。但是
~(a & b)(~a | ~b)如果你愿意的话。 -
@nop:好的,现在你知道你可以了。我还是说不要。
!(value & MASK)或(value & MASK) == 0中的任何一个都更具惯用性和可读性,并且所有三个都可能编译为完全相同的代码:godbolt.org/z/cna43vfGa
标签: c++ bitwise-operators bitwise-and