Access Violation 错误

zhangshuhui 2006-11-03 08:28:51
我写了一个循环来进行rc4加密计算,计算一部分就报如下错误:

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
First-chance exception in rc4Test.exe: 0xC0000005: Access Violation.

是甚么原因呢
...全文
626 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuozhuwu 2006-11-06
  • 打赏
  • 举报
回复
也有可能是数组越界
zhangshuhui 2006-11-06
  • 打赏
  • 举报
回复
指针访问非法? 请说得详细一些。
zhangshuhui 2006-11-03
  • 打赏
  • 举报
回复
rc4函数:


void rc4::rc4_setup( struct rc4_state *s, unsigned char *key, int length )
{
int i, j, k, *m, a;

s->x = 0;
s->y = 0;
m = s->m;

for( i = 0; i < 256; i++ )
{
m[i] = i;
}

j = k = 0;

for( i = 0; i < 256; i++ )
{
a = m[i];
j = (unsigned char) ( j + a + key[k] );
m[i] = m[j];
m[j] = a;
if( ++k >= length )
k = 0;
}
}

void rc4::rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{
int i, x, y, *m, a, b;

x = s->x;
y = s->y;
m = s->m;

for( i = 0; i < length; i++ )
{
x = (unsigned char) ( x + 1 );
a = m[x];
y = (unsigned char) ( y + a );
m[x] = b = m[y];
m[y] = a;
data[i] ^= m[(unsigned char) ( a + b )];
}

s->x = x;
s->y = y;
}


/*primary function */
unsigned char *rc4::rc4Encryption(unsigned char *data, unsigned char *keys, int keyLength)
{

struct rc4_state s;
unsigned char buffer[32];
int tempLength;

int k;
unsigned char *outputString;

int dataLength = 32;

memset(buffer, 0, 32);

memcpy( buffer, data, dataLength );
rc4_setup( &s, &keys[0], keyLength );
rc4_crypt( &s, buffer, dataLength );

tempLength = strlen((char *)buffer);

outputString = (unsigned char*)new char[tempLength+1];
if(outputString!= NULL)
{
for(k=0; k<32; k++)
{
*(outputString + k) = buffer[k];
}
}
return outputString;
}
zhangshuhui 2006-11-03
  • 打赏
  • 举报
回复
这个是主函数:

int main(int argc, char* argv[])
{

unsigned char data[32]= {0x31,0x31,0x28,0xBF,0x4E,0x5E,0x4E,0x75,0x8A,0x41,0x64,0x00,0x4E,0x56,0xFF,0xFA,
0x01,0x08,0x2E,0x2E,0x00,0xB6,0xD0,0x68,0x3E,0x80,0x2F,0x0C,0xA9,0xFE,0x64,0x53};

unsigned char output[32]= {0x17,0x35,0x96,0xA8,0xE1,0x50,0xFB,0xE7,0xEA,0x23,0xC8,0x33,0x6B,0xD0,0xA2,0xC4,
0x31,0x1F,0xAD,0xFE,0xE1,0xD0,0xF3,0xC4,0x7F,0x40,0x42,0xE3,0xD4,0xD7,0xD6,0xF5};

int length = 5;
unsigned char keys[5] = {0x01,0x00,0x07,0x00,0x00};

int judgement;
unsigned char *outputStream;
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int m = 0;
int n = 0;

for(i =0 ; i< 255; i++)
{
for(j =0 ; j< 255; j++)
{
for(k =0 ; k< 255; k++)
{
for(l =0 ; l< 255; l++)
{
for(m =0 ; m< 255; m++)
{
for(n=0; n<5; n++)
{
printf("%02x",keys[n]);

}
outputStream = rc4object.rc4Encryption(data, keys, length);
judgement = strcmp((char *)output, (char *)outputStream);
cout<<judgement;
if(!judgement)
printf("found!");
keys[4] ++;
cout<<endl;

}
keys[3] ++;
}
keys[2] ++;
}
keys[1] ++;
}
keys[0] ++;
}

printf( "\n\n" );
delete outputStream;

return 0;

}
goodluckyxl 2006-11-03
  • 打赏
  • 举报
回复
一般是内存访问错
报处访问异常
龙凤呈祥焱 2006-11-03
  • 打赏
  • 举报
回复
访问违规.一般都是指针惹的祸.
huangyangman 2006-11-03
  • 打赏
  • 举报
回复
代码贴上来吧
swimmer2000 2006-11-03
  • 打赏
  • 举报
回复
指针访问非法.

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧