资源简介
缓冲区溢出实验
代码片段和文件信息
#include
#include
#include
#include
#include
#pragma comment(lib“ws2_32“)
#include
#define MAX_NUM 2
#define clear(p) ZeroMemory(p sizeof (p) );
//---------------------------------------------------------------------------
// 4bit binary to char 0-F
char Hex2Chr( unsigned char n )
{
n &= 0xF;
if ( n < 10 )
return ( char )( n + ‘0‘ );
else
return ( char )( n - 10 + ‘A‘ );
}
//---------------------------------------------------------------------------
// char 0-F to 4bit binary
unsigned char Chr2Hex( char c )
{
if ( c >= ‘a‘ && c <= ‘z‘ ) // it‘s toupper
c = c - ‘a‘ + ‘A‘;
if ( c >= ‘0‘ && c <= ‘9‘ )
return ( int )( c - ‘0‘ );
else if ( c >= ‘A‘ && c <= ‘F‘ )
return ( int )( c - ‘A‘ + 10 );
else
return -1;
}
//---------------------------------------------------------------------------
// base64 code table
// 0-63 : A-Z(25) a-z(51) 0-9(61) +(62) /(63)
char base2Chr( unsigned char n )
{
n &= 0x3F;
if ( n < 26 )
return ( char )( n + ‘A‘ );
else if ( n < 52 )
return ( char )( n - 26 + ‘a‘ );
else if ( n < 62 )
return ( char )( n - 52 + ‘0‘ );
else if ( n == 62 )
return ‘+‘;
else
return ‘/‘;
}
//---------------------------------------------------------------------------
unsigned char Chr2base( char c )
{
if ( c >= ‘A‘ && c <= ‘Z‘ )
return ( unsigned char )( c - ‘A‘ );
else if ( c >= ‘a‘ && c <= ‘z‘ )
return ( unsigned char )( c - ‘a‘ + 26 );
else if ( c >= ‘0‘ && c <= ‘9‘ )
return ( unsigned char )( c - ‘0‘ + 52 );
else if ( c == ‘+‘ )
return 62;
else if ( c == ‘/‘ )
return 63;
else
return 64; // 无效字符
}
//---------------------------------------------------------------------------
// aLen 为 aSrc 的大小, aDest 所指的缓冲区必须至少为 aLen 的 3 倍!!!
// 返回 aDest 的长度
int QPEncode( char * const aDest const unsigned char * aSrc int aLen )
{
char * p = aDest;
int i = 0;
while ( i++ < aLen )
{
*p++ = ‘=‘;
*p++ = Hex2Chr( *aSrc >> 4 );
*p++ = Hex2Chr( *aSrc++ );
}
*p = 0; // aDest is an ASCIIZ string
return ( p - aDest ); // exclude the end of zero
}
//---------------------------------------------------------------------------
// aDest 所指的缓冲区必须至少为 aSrc 长度的 1/3 !!!
// 返回 aDest 的长度
int QPDecode( unsigned char * const aDest const char * aSrc )
{
unsigned char * p = aDest;
int n = strlen( aSrc );
unsigned char ch cl;
while ( *aSrc ) // aSrc is an ASCIIZ string
{
if ( ( *aSrc == ‘=‘ ) && ( n - 2 > 0 ) )
{
ch = Chr2Hex( aSrc[1] );
cl = Chr2Hex( aSrc[2] );
if ( ( ch == ( unsigned char )-1 ) || ( cl == ( unsigned char )-1 ) )
*p++ = *aSrc++;
else
{
*p++ = ( ch << 4 ) | cl;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
....... 1425 2004-12-17 19:09 cn_xp(sp1).bmp
----------- --------- ---------- ----- ----
1425 1
评论
共有 条评论