我正在尝试使用某些代码并尝试使其正常工作,但似乎我错过了一些东西......
所以有人可以告诉我,我错过了什么或做错了什么?节目休息时间
*(sData->pFileBuffer+i) ^=*(sData->pKey+j);
以下是完整代码: 我在visual studio 2012中编译,如果它与它有关...
#include <iostream>
using namespace std;
/*
struct StubData{
char * pFileBuffer;
long long FileSize;
char * pKey;
long KeySize;
};*/
class StubData{
public:
char *pFileBuffer;
long long FileSize;
char *pKey;
long KeySize;
StubData(){}
};
void Decrypt(StubData * sData){
int i=0,j=0;
for(i;i<sData->FileSize;i++){
*(sData->pFileBuffer+i) ^=*(sData->pKey+j);
j++;
if (j>=sData->KeySize)j=0;
}
}
void Encrypt(StubData * sData){
int i,j;
sData->pKey="mysecretpassword";
sData->KeySize=strlen(sData->pKey);
j=0;
printf("[*]Encoding\n");
for(i=0;i<sData->FileSize;i++)
{
*(sData->pFileBuffer+i) ^=*(sData->pKey+j);
j++;
if (j>=sData->KeySize)j=0;
}
}
void main(){
//StubData S;
StubData *S = (StubData *)malloc(sizeof(StubData));
new (S) StubData;
S->pFileBuffer="MARKO";
S->FileSize=strlen(S->pFileBuffer);
Encrypt(S);
cout<<"\nenc\n"<<S->pFileBuffer;
Decrypt(S);
cout<<"\ndec\n"<<S->pFileBuffer;
}
答案 0 :(得分:0)
您将字符串字符分配给S->pFileBuffer
S->pFileBuffer="MARKO";
这些字符串文字是不可变的(通常编译为.rodata
)。如果你想要一个可变的字符串,你应该在某处分配它。
您可以执行类似
的操作char str[] = "MARKO"; //be careful, if this goes out of scope before S, then S has a dangling pointer
S->pFileBuffer=str;
这不是很像C ++。但是你的其余代码看起来并不像C ++ - 就像其中一样。