通过翻转位来引入错误

时间:2011-08-29 14:45:48

标签: c code-injection bit

我在C中有一个字符数组,我希望通过翻转一些位来引入错误。

如何翻转位并引入错误?

2 个答案:

答案 0 :(得分:2)

您可以使用xor运算符翻转位:

x = x ^ mask;
x ^= mask; // Same functionality as above.

例如,如果mask1,则翻转最低有效位。您可以通过对1:mask = 1 << k;进行位移来创建任何所需的掩码,其中k是要移位的位数。

答案 1 :(得分:1)

要分发错误,请使用随机数生成器。如果出于测试目的,rand() / srand()就足够了。

要翻转一下,您可以使用位移位和按位xor运算符。

unsigned char flip(unsigned char c, int bit) {
    return c ^ (1 << bit);
}

您还可以使用除(1 << bit)以外的位掩码来翻转多个位,该位掩码只有一位:

unsigned char flip(unsigned char c, unsigned char mask) {
    return c ^ (1 << mask);
}

// flip bits 0 and 3 (00001001 = 0x09)
flip(c, 0x09);