缓冲区溢出实验


缓冲区溢出实验
资源截图
代码片段和文件信息
#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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)