У меня есть функция, которая выполняет простое битовое шифрование XOR. Это выглядит так:
void maskData(char* data, int length)
{
for(int i = 0; i < length; i++)
{
int j = i % 4;
cout << bitset<8>(data[i]) << endl << bitset<8>(this->maskingKey[j]) << endl;
data[i] ^= this->maskingKey[j];
}
}
Выходные данные приложения:
01010100
01001011
Тогда он умирает. Я приложил gdb
к нему и выяснили, что SIGSEGV-Exception поднят.
01010100
01001011
Program received signal SIGSEGV, Segmentation fault.
0x00000000004100ea in WebSocketLayer::WebSocketFrame::maskData (
this=0x7fffffffe190, data=0x423621 "This is a test", length=14)
at ../BoostTransport/WebSocketLayer.h:130
130 data[i] ^= this->maskingKey[j];
Я действительно не уверен, почему это происходит, мне кажется, все в порядке.
Редактировать: Больше кода:
void setData(char* data, int length)
{
this->maskData(data, length);
// ... ...
}
wf.setData("This is a test", strlen("This is a test"));
Цикл непосредственно терпит неудачу в первом запуске, что означает i
а также j
0
держу пари data
указывает на постоянную. Вы не можете изменить константу, вот что делает их константами. Так что-нибудь сопоставимое с maskData("hello", 5);
незаконно Это также незаконно:
char *j = "This is a test";
maskData(j, strlen(j));
Вот, j
указывает на постоянную. Вы не можете изменить константу.
Других решений пока нет …