Хорошо, я разобрался с проблемой, и я пишу здесь, чтобы любой, у кого такая же проблема, знал, что случилось.Разговор дешевый, я покажу вам код (а затем объясню):
char *ulMVBuffer = (char *)MapViewOfFile(phFile, FILE_MAP_ALL_ACCESS, 0, dwFileMapStart, 0);
if (ulMVBuffer == NULL)
{
printf("ulMVBuffer = NULL\n");
}
int iViewDelta = offset - dwFileMapStart;
unsigned int mask = myrand(xork);
for(int i = 0; i < buffsize; i++)
{
unsigned int c = ulMVBuffer[iViewDelta + i] ^ mask;
ulMVBuffer[iViewDelta + i] = c;
}
Итак, вам нужно отобразить память с помощью указателя на символ, а затем, когда вы используете оператор XOR, вот так:
unsigned int c = ulMVBuffer[iViewDelta + i] ^ mask;
Вы получаете XOR, который будет применен к группе из 4 байтов, а не только к 1 байту, потому что - насколько я понял, играя вокруг - XOR между символом (1 байт) иunsigned int (4 байта) заставляет оператора выбрать еще 3 байта из памяти и использовать его для побитовой операции.Это не работало, используя указатель на unsigned int, потому что, я думаю, он сохранял байты в памяти другим способом (может быть, ОС или зависит от машины?), И поэтому вы могли XOR только 1 байт каждые 4, а не группыиз 4 байтов все вместе.
Если кто-то лучше понимает это или хочет добавить больше к этому решению, я буду более чем рад прочитать его!