关于文件的写入和输出操作的问题

慢慢成长的我 2014-04-22 07:29:44
我要把一个txt文件里面的很多个病毒特征以结构体的形式写入另外的一个文件,但是很多写不进去,也当然读不出来,但是特征码是确定的写入的不对读也不对怎么办才可以全部正确的写入文件,求大神指导码如下:TCHAR array[] = {
0x58, 0x35, 0x4F, 0x21, 0x50, 0x25, 0x40,
0x41, 0x50, 0x5B, 0x34, 0x5C, 0x50, 0x5A, 0x58, 0x35,
0x34, 0x28, 0x50, 0x5E, 0x29, 0x37, 0x43,
0x43, 0x29, 0x37, 0x7D, 0x24, 0x45, 0x49, 0x43, 0x41,
0x52, 0x2D, 0x53, 0x54, 0x41, 0x4E, 0x44,
0x41, 0x52, 0x44, 0x2D, 0x41, 0x4E, 0x54,
0x49, 0x56, 0x49, 0x52, 0x55, 0x53, 0x2D,
0x54, 0x45, 0x53, 0x54, 0x2D, 0x46, 0x49,
0x4C, 0x45, 0x21, 0x24, 0x48, 0x2B, 0x48, 0x2A
};

TCHAR array[] = {0x75, 0x1C, 0x80, 0xFE, 0x01, 0x75, 0x17, 0x1F, 0x58, 0x83};//EDV

TCHAR array[] = {0x00, 0x53, 0x51, 0x52, 0x06, 0x56, 0x57};//Stoned/Marijuana

TCHAR array[] = {0xA1, 0x49, 0x43, 0x68, 0x41, 0x4F, 0x53, 0x50, 0x52, 0x51, 0xE8};//Chaos

TCHAR array[] = {0x8E, 0xD0, 0x8C, 0xF0, 0xFF, 0xFB, 0xBB, 0x13, 0x04};//Korea

TCHAR array[] = {0x90, 0xEA, 0x59, 0xEC, 0x00, 0x90, 0x90};//Ghost

TCHAR array[] = {0xA1, 0xF5, 0x81, 0xA3, 0xF5, 0x7D, 0x8B, 0x36, 0xF9, 0x81};//Ping Pong Version B

TCHAR array[] = {0x5E, 0x81, 0xC6, 0x04, 0xB8, 0x01, 0x02};//Ghost Boot Version

TCHAR array[] = {0x24, 0x13, 0x55, 0xAA};//TYPO Boot

TCHAR array[] = {0xC3, 0x10, 0xE2, 0xF2, 0xC6, 0x06, 0xF3, 0x01, 0xFF, 0x90, 0xEB, 0x55};//DISK Killer

TCHAR array[] = {0xCD, 0x13, 0xB8, 0x02, 0xB9, 0x06, 0x27, 0xBA, 0x00, 0x01};//Israeli Boot/Swap

TCHAR array[] = {0xEB, 0x29, 0x90, 0x49, 0x34, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};//Ohio

TCHAR array[] = {0xEB, 0x34, 0x90, 0x48, 0x41, 0x4C, 0x20, 0x20};//Pentagon

TCHAR array[] = {0x8E, 0xC0, 0xBE, 0xC6, 0X7C, 0xBF, 0x00, 0x7E};//Den Zuk

TCHAR array[] = {0x59, 0x5B, 0x58, 0x07, 0x1F, 0xEA};//Ping Pong

TCHAR array[] = {0x8E, 0xD8, 0x8E, 0xD0, 0xBC, 0x00, 0xF0, 0xFB, 0xA0, 0x06};//Pakistani Brain

TCHAR array[] = {0xB4, 0x00, 0xCD, 0x13, 0x72, 0x0D, 0xB8, 0x01};//Yale/Alamda

TCHAR array[] = {0x20, 0x8L, 0xC8, 0x8E, 0xD8, 0x8E, 0xD0};//Pakistani/Ashar

TCHAR array[] = {0xA1, 0x4F, 0x07, 0x89, 0x07, 0x2E};//Dark Avenger

TCHAR array[] = {0xFF, 0x76, 0x06, 0x2E, 0x8F, 0x06, 0xB3, 0x12};//4096

TCHAR array[] = {0xB4, 0x51, 0xE8, 39, FD, 8E, C3, 26, 8B};//V2000

TCHAR array[] = {26, 89, 1E, 92, 00, FB, C3, 50, 53, 51, 52, 06};//1559

TCHAR array[] = {8B, D8, 53, B8, 20, 12, CD, 2F, 26, 8A, 1D, B8};//512

TCHAR array[] = {56, 07, 45, 07, 21, 07, 1D, 49, 27, 6D, 20, 73, 6F, 20, 6D, 75, 63};//Joker

TCHAR array[] = {5B, FF, B7, 21, 02, C3, 61, 3A};//Lehigh

TCHAR array[] = {2E, FF, 0E, 1F, 00, EB, 12, 2E, C7, 06, 1F};//Jerusalem Version A

TCHAR array[] = {BE, 10, 07, 03, F7, 2E, 8B};//Jerusalem Version B

TCHAR array[] = {12, 2E, C7, 06, 1F, 00, 01, 00, 50, 51, 56, B9};//Jerusalem Version B(old string)

TCHAR array[] = {3D, 00, 2E, 8C, 06, 41, 8C, C0, 05};//Jerusalem Version B(string 2)

TCHAR array[] = {E9, 92, 00, 00, 00, 00, 00, 00, 00, 00, 00, 01};//Jerusalem Version B-2

TCHAR array[] = {C8, F7, E1, EE, E7, 00, 01};//Sundav

TCHAR array[] = {B8, 01, 43, 8E, 5E, 0E, 8B, 56, 06, 2E};//Vacsina

TCHAR array[] = {26, C7, 06, FC, 03, F3, A4, 26, C6, 06};//Fu Manchu Version A

TCHAR array[] = {73, 55, 52, 49, 56, 00, 31};//April First Version C

TCHAR array[] = {73, 55, 52, 49, 56, 00, 32};//Jerusalem Version D

TCHAR array[] = {73, 55, 52, 49, 56, 00, 33};//Jerusalem Version E

TCHAR array[] = {8A, 94, 03, 01, 8D, BC, 29, 01, 8D, 8C, EA, 06};//Datacrime-2

TCHAR array[] = {2E, 8A, 07, 32, C2, D0, CA, 2E};//Datacrime||-b

TCHAR array[] = {91, 77, 91, 7A, A4, B7, 57, 00, 56, 00, 00, 00};//2730

TCHAR array[] = {35, CD, 21, 8B, F3, 8C, C7};//Yankee Doodle

TCHAR array[] = {14, 8B, 4D, 16, 8B, C1, 8A, CD};//3066/2930 Traceback

TCHAR array[] = {33, 06, 14, 00, 31, 04, 46, 46, E2, F2};//3551/Syslock

TCHAR array[] = {19, CD, 21, 26, A2, 49, 02, B4, 47, 04, 01, 50};//405

TCHAR array[] = {36, 03, 01, 33, C9, 33, C0, CA};//Sylvia/Holland

TCHAR array[] = {31, 30, 30, 2C, 36, 32, 2C, 33, 32, 00};//ADIS Information Troian

TCHAR array[] = {A4, 81, EC, 00, 04, 06, BF, BA, 00, 57, CB};//Perfume

TCHAR array[] = {12, 75, 0E, 2E, 8B, 0E, 03, 01};//Solano

TCHAR array[] = {8A, 0E, 95, 00, 81, E1, FE, 00, BA, 9E};//Taiwan

TCHAR array[] = {3E, 01, 1D, F2, 77, D1, BA, 00};//Oropax

TCHAR array[] = {81, B8, FE, FF, 8E, D8, 2D, CC};//Virus-90

TCHAR array[] = {42, E8, EF, E3, 8F, CA, 03, 1E};//AIDS

TCHAR array[] = {5E, 1E, 06, 8C, C0, 48, 8E, C0, 26};//Devil'Dance

TCHAR array[] = {1F, BA, 1F, 03, B9, FF, FF, B4};//AmstrAL

TCHAR array[] = {72, 04, 50, EB, 07, 90, B4, 4C};//Do-Nothing

TCHAR array[] = {8B, 11, 79, 3D, 0A, 00, 72, DE};//Lisbon

TCHAR array[] = {99, FE, 26, A1, 5A, 00, 2E, 89};//Typo COM

TCHAR array[] = {80, FC, 6C, 74, EA, 80, FC, 58, 74, E5};//DBASE

TCHAR array[] = {31, 34, 31, 24, 46, 4C};//1701/1791/Version B

TCHAR array[] = {31, 34, 31, 24, 46, 4C, 77, F8};//1701/1704 Version C

TCHAR array[] = {56, BD, B4, 30, 05, CD, 21};//1280/Datacrime

TCHAR array[] = {EB, 00, B4, 0E, CD, 21, B4};//1168 Datacrime

TCHAR array[] = {EB, 2B, 90, 5A, 45, CD, 60, 2E};//1536/Zer Bug

TCHAR array[] = {8B, FE, 83, C7, 1F, 90, 8B, DE, 83, C6, 1F, 90};//Vienna Version B

TCHAR array[] = {8B, FE, 81, C7, 1F, 00, 8B, DE, 81, C6, 1F, 00};//Vienna Version A

TCHAR array[] = {A3, 03, 00, 03, D8, 43, 8E, C3, 33, F6, 33, FF};//Saratoga/Icelandic

TCHAR array[] = {2E, 8E, 1E, 6D, 02, B9, 00, 30, BE, 00, 00};//Icelabdic Version B

TCHAR array[] = {8F, 06, 18, 05, 26, 8F, 06, 1F};//Alabama

TCHAR array[] = {24, 2E, 8F, 06, 3B, 03, 90, 2E, 8E, 06};//Icelandic-3

TCHAR array[] = {43, 81, 3F, 45, 58, 75, F1, B8, 00, 43};//MIXI/Icelandic

TCHAR array[] = {0A, 95, 4C, B3, 93, 47, E1, 60, B4};//Vcomm

TCHAR array[] = {48, EB, D8, 1C, D3, 95, 13, 93, 1B, D3, 97};//ItaVir

文件读和写的代码函数如下:
void Virus::WriteCodeFile(char * content, char * FilePath, char *Name, int num)
{
VrCode vrcode;
// vrcode.Size = strlen(content);
// FILE *fp=NULL;
// fp = fopen(FilePath, "rb");
//
// if(fp == NULL)
// {
// cout << "file open filed!";
// }
// vrcode.Code = new char[vrcode.Size+1];
// strcpy(vrcode.code, content);
// vrcode.code[vrcode.Size+1] = '\0';

// ofstream fout(FilePath);
// cout.rdbuf(fout.rdbuf());
//
// fout << vrcode.Size << vrcode.code;

ofstream file1;
file1.open(FilePath,ios::binary|ios::out|ios::app);
vrcode.Code = content;
vrcode.Name = Name;

// file1 << vrcode.Code << ":" << vrcode.Name << "\r\n";
file1.write(content, num);
file1 << " ";
file1.write(Name, strlen(Name));
file1 << "\r\n";
// file1.close();

}

// char * Virus::ReadCodeFile(char *FilePath)
// {
// VrCode vrcode;
// vrcode.Size = strlen(content);

// ifstream file1;
// file1.open(FilePath,ios::binary|ios::out|ios::app);
// while(!file1.eof())
// {
// file1 >> vrcode.Size;
// vrcode.code = new char[vrcode.Size];
// file1 >> vrcode.code;
// }
//
//
// return vrcode.Code;


//}

...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
慢慢成长的我 2014-04-25
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
#pragma warning(disable:4305 4309)
#include <stdio.h>
struct VIRUS {
    char Code[1024];
    char Name[128];
    int Size;
};
struct VIRUS vr[71];
struct VIRUS vs[71]={
{{
0x58, 0x35, 0x4F, 0x21, 0x50, 0x25, 0x40,
0x41, 0x50, 0x5B, 0x34, 0x5C, 0x50, 0x5A, 0x58, 0x35,
0x34, 0x28, 0x50, 0x5E, 0x29, 0x37, 0x43,
0x43, 0x29, 0x37, 0x7D, 0x24, 0x45, 0x49, 0x43, 0x41,
0x52, 0x2D, 0x53, 0x54, 0x41, 0x4E, 0x44,
0x41, 0x52, 0x44, 0x2D, 0x41, 0x4E, 0x54,
0x49, 0x56, 0x49, 0x52, 0x55, 0x53, 0x2D,
0x54, 0x45, 0x53, 0x54, 0x2D, 0x46, 0x49,
0x4C, 0x45, 0x21, 0x24, 0x48, 0x2B, 0x48, 0x2A
                                                                                                      },"Unknow"                         ,68},
{{0x75, 0x1C, 0x80, 0xFE, 0x01, 0x75, 0x17, 0x1F, 0x58, 0x83                                          },"EDV"                            ,10},
//... ...
{{0x0A, 0x95, 0x4C, 0xB3, 0x93, 0x47, 0xE1, 0x60, 0xB4                                                },"Vcomm"                          , 9},
{{0x48, 0xEB, 0xD8, 0x1C, 0xD3, 0x95, 0x13, 0x93, 0x1B, 0xD3, 0x97                                    },"ItaVir"                         ,11},
};
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
int main() {
    FILE *f;
    int i;

    f=fopen("virus.dat","wb");
    fwrite(&vs[0],71,sizeof(struct VIRUS),f);
    fclose(f);

    f=fopen("virus.dat","rb");
    fread(&vr[0],71,sizeof(struct VIRUS),f);
    fclose(f);

    for (i=0;i<71;i++) {
        HexDump(vr[i].Code,vr[i].Size,(int)vr[i].Code);
        printf("%02d Name=%s\n",i,vr[i].Name);
    }

    return 0;
}
//004170b0 - 58 35 4f 21 50 25 40 41 50 5b 34 5c 50 5a 58 35  X5O.P%@AP[4\PZX5
//004170c0 - 34 28 50 5e 29 37 43 43 29 37 7d 24 45 49 43 41  4(P^)7CC)7}$EICA
//004170d0 - 52 2d 53 54 41 4e 44 41 52 44 2d 41 4e 54 49 56  R-STANDARD-ANTIV
//004170e0 - 49 52 55 53 2d 54 45 53 54 2d 46 49 4c 45 21 24  IRUS-TEST-FILE.$
//004170f0 - 48 2b 48 2a                                      H+H*
//00 Name=Unknow
//00417534 - 75 1c 80 fe 01 75 17 1f 58 83                    u....u..X.
//01 Name=EDV
//... ...
//0042a844 - 0a 95 4c b3 93 47 e1 60 b4                       ..L..G.`.
//69 Name=Vcomm
//0042acc8 - 48 eb d8 1c d3 95 13 93 1b d3 97                 H..........
//70 Name=ItaVir
//
老师我怎么用记事本打不开那个运行后得到的数据文件呢?运行的结果也不太懂啊
赵4老师 2014-04-25
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
后来的字节码前面咋没0x了呢? 摒弃iofstream 使用FILE * 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
wxyb 2014-04-23
  • 打赏
  • 举报
回复
顶一下吧 !
白开水__学者 2014-04-23
  • 打赏
  • 举报
回复
路过看看....
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
上帖代码中第22行省略的内容对应:
{{0x00,0x53,0x51,0x52,0x06,0x56,0x57},"Stoned/Marijuana",7},
{{0xA1,0x49,0x43,0x68,0x41,0x4F,0x53,0x50,0x52,0x51,0xE8},"Chaos",11},
{{0x8E,0xD0,0x8C,0xF0,0xFF,0xFB,0xBB,0x13,0x04},"Korea",9},
{{0x90,0xEA,0x59,0xEC,0x00,0x90,0x90},"Ghost",7},
{{0xA1,0xF5,0x81,0xA3,0xF5,0x7D,0x8B,0x36,0xF9,0x81},"PingPongVersionB",10},
{{0x5E,0x81,0xC6,0x04,0xB8,0x01,0x02},"GhostBootVersion",7},
{{0x24,0x13,0x55,0xAA},"TYPOBoot",4},
{{0xC3,0x10,0xE2,0xF2,0xC6,0x06,0xF3,0x01,0xFF,0x90,0xEB,0x55},"DISKKiller",12},
{{0xCD,0x13,0xB8,0x02,0xB9,0x06,0x27,0xBA,0x00,0x01},"IsraeliBoot/Swap",10},
{{0xEB,0x29,0x90,0x49,0x34,0x12,0x00,0x01,0x00,0x00,0x00,0x00},"Ohio",12},
{{0xEB,0x34,0x90,0x48,0x41,0x4C,0x20,0x20},"Pentagon",8},
{{0x8E,0xC0,0xBE,0xC6,0X7C,0xBF,0x00,0x7E},"DenZuk",8},
{{0x59,0x5B,0x58,0x07,0x1F,0xEA},"PingPong",6},
{{0x8E,0xD8,0x8E,0xD0,0xBC,0x00,0xF0,0xFB,0xA0,0x06},"PakistaniBrain",10},
{{0xB4,0x00,0xCD,0x13,0x72,0x0D,0xB8,0x01},"Yale/Alamda",8},
{{0x20,0x8L,0xC8,0x8E,0xD8,0x8E,0xD0},"Pakistani/Ashar",7},
{{0xA1,0x4F,0x07,0x89,0x07,0x2E},"DarkAvenger",6},
{{0xFF,0x76,0x06,0x2E,0x8F,0x06,0xB3,0x12},"4096",8},
{{0xB4,0x51,0xE8,0x39,0xFD,0x8E,0xC3,0x26,0x8B},"V2000",9},
{{0x26,0x89,0x1E,0x92,0x00,0xFB,0xC3,0x50,0x53,0x51,0x52,0x06},"1559",12},
{{0x8B,0xD8,0x53,0xB8,0x20,0x12,0xCD,0x2F,0x26,0x8A,0x1D,0xB8},"512",12},
{{0x56,0x07,0x45,0x07,0x21,0x07,0x1D,0x49,0x27,0x6D,0x20,0x73,0x6F,0x20,0x6D,0x75,0x63},"Joker",17},
{{0x5B,0xFF,0xB7,0x21,0x02,0xC3,0x61,0x3A},"Lehigh",8},
{{0x2E,0xFF,0x0E,0x1F,0x00,0xEB,0x12,0x2E,0xC7,0x06,0x1F},"JerusalemVersionA",11},
{{0xBE,0x10,0x07,0x03,0xF7,0x2E,0x8B},"JerusalemVersionB",7},
{{0x12,0x2E,0xC7,0x06,0x1F,0x00,0x01,0x00,0x50,0x51,0x56,0xB9},"JerusalemVersionB(oldstring)",12},
{{0x3D,0x00,0x2E,0x8C,0x06,0x41,0x8C,0xC0,0x05},"JerusalemVersionB(string2)",9},
{{0xE9,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},"JerusalemVersionB-2",12},
{{0xC8,0xF7,0xE1,0xEE,0xE7,0x00,0x01},"Sundav",7},
{{0xB8,0x01,0x43,0x8E,0x5E,0x0E,0x8B,0x56,0x06,0x2E},"Vacsina",10},
{{0x26,0xC7,0x06,0xFC,0x03,0xF3,0xA4,0x26,0xC6,0x06},"FuManchuVersionA",10},
{{0x73,0x55,0x52,0x49,0x56,0x00,0x31},"AprilFirstVersionC",7},
{{0x73,0x55,0x52,0x49,0x56,0x00,0x32},"JerusalemVersionD",7},
{{0x73,0x55,0x52,0x49,0x56,0x00,0x33},"JerusalemVersionE",7},
{{0x8A,0x94,0x03,0x01,0x8D,0xBC,0x29,0x01,0x8D,0x8C,0xEA,0x06},"Datacrime-2",12},
{{0x2E,0x8A,0x07,0x32,0xC2,0xD0,0xCA,0x2E},"Datacrime||-b",8},
{{0x91,0x77,0x91,0x7A,0xA4,0xB7,0x57,0x00,0x56,0x00,0x00,0x00},"2730",12},
{{0x35,0xCD,0x21,0x8B,0xF3,0x8C,0xC7},"YankeeDoodle",7},
{{0x14,0x8B,0x4D,0x16,0x8B,0xC1,0x8A,0xCD},"3066/2930Traceback",8},
{{0x33,0x06,0x14,0x00,0x31,0x04,0x46,0x46,0xE2,0xF2},"3551/Syslock",10},
{{0x19,0xCD,0x21,0x26,0xA2,0x49,0x02,0xB4,0x47,0x04,0x01,0x50},"405",12},
{{0x36,0x03,0x01,0x33,0xC9,0x33,0xC0,0xCA},"Sylvia/Holland",8},
{{0x31,0x30,0x30,0x2C,0x36,0x32,0x2C,0x33,0x32,0x00},"ADISInformationTroian",10},
{{0xA4,0x81,0xEC,0x00,0x04,0x06,0xBF,0xBA,0x00,0x57,0xCB},"Perfume",11},
{{0x12,0x75,0x0E,0x2E,0x8B,0x0E,0x03,0x01},"Solano",8},
{{0x8A,0x0E,0x95,0x00,0x81,0xE1,0xFE,0x00,0xBA,0x9E},"Taiwan",10},
{{0x3E,0x01,0x1D,0xF2,0x77,0xD1,0xBA,0x00},"Oropax",8},
{{0x81,0xB8,0xFE,0xFF,0x8E,0xD8,0x2D,0xCC},"Virus-90",8},
{{0x42,0xE8,0xEF,0xE3,0x8F,0xCA,0x03,0x1E},"AIDS",8},
{{0x5E,0x1E,0x06,0x8C,0xC0,0x48,0x8E,0xC0,0x26},"Devil'Dance",9},
{{0x1F,0xBA,0x1F,0x03,0xB9,0xFF,0xFF,0xB4},"AmstrAL",8},
{{0x72,0x04,0x50,0xEB,0x07,0x90,0xB4,0x4C},"Do-Nothing",8},
{{0x8B,0x11,0x79,0x3D,0x0A,0x00,0x72,0xDE},"Lisbon",8},
{{0x99,0xFE,0x26,0xA1,0x5A,0x00,0x2E,0x89},"TypoCOM",8},
{{0x80,0xFC,0x6C,0x74,0xEA,0x80,0xFC,0x58,0x74,0xE5},"DBASE",10},
{{0x31,0x34,0x31,0x24,0x46,0x4C},"1701/1791/VersionB",6},
{{0x31,0x34,0x31,0x24,0x46,0x4C,0x77,0xF8},"1701/1704VersionC",8},
{{0x56,0xBD,0xB4,0x30,0x05,0xCD,0x21},"1280/Datacrime",7},
{{0xEB,0x00,0xB4,0x0E,0xCD,0x21,0xB4},"1168Datacrime",7},
{{0xEB,0x2B,0x90,0x5A,0x45,0xCD,0x60,0x2E},"1536/ZerBug",8},
{{0x8B,0xFE,0x83,0xC7,0x1F,0x90,0x8B,0xDE,0x83,0xC6,0x1F,0x90},"ViennaVersionB",12},
{{0x8B,0xFE,0x81,0xC7,0x1F,0x00,0x8B,0xDE,0x81,0xC6,0x1F,0x00},"ViennaVersionA",12},
{{0xA3,0x03,0x00,0x03,0xD8,0x43,0x8E,0xC3,0x33,0xF6,0x33,0xFF},"Saratoga/Icelandic",12},
{{0x2E,0x8E,0x1E,0x6D,0x02,0xB9,0x00,0x30,0xBE,0x00,0x00},"IcelabdicVersionB",11},
{{0x8F,0x06,0x18,0x05,0x26,0x8F,0x06,0x1F},"Alabama",8},
{{0x24,0x2E,0x8F,0x06,0x3B,0x03,0x90,0x2E,0x8E,0x06},"Icelandic-3",10},
{{0x43,0x81,0x3F,0x45,0x58,0x75,0xF1,0xB8,0x00,0x43},"MIXI/Icelandic",10},
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
#pragma warning(disable:4305 4309)
#include <stdio.h>
struct VIRUS {
    char Code[1024];
    char Name[128];
    int Size;
};
struct VIRUS vr[71];
struct VIRUS vs[71]={
{{
0x58, 0x35, 0x4F, 0x21, 0x50, 0x25, 0x40,
0x41, 0x50, 0x5B, 0x34, 0x5C, 0x50, 0x5A, 0x58, 0x35,
0x34, 0x28, 0x50, 0x5E, 0x29, 0x37, 0x43,
0x43, 0x29, 0x37, 0x7D, 0x24, 0x45, 0x49, 0x43, 0x41,
0x52, 0x2D, 0x53, 0x54, 0x41, 0x4E, 0x44,
0x41, 0x52, 0x44, 0x2D, 0x41, 0x4E, 0x54,
0x49, 0x56, 0x49, 0x52, 0x55, 0x53, 0x2D,
0x54, 0x45, 0x53, 0x54, 0x2D, 0x46, 0x49,
0x4C, 0x45, 0x21, 0x24, 0x48, 0x2B, 0x48, 0x2A
                                                                                                      },"Unknow"                         ,68},
{{0x75, 0x1C, 0x80, 0xFE, 0x01, 0x75, 0x17, 0x1F, 0x58, 0x83                                          },"EDV"                            ,10},
//... ...
{{0x0A, 0x95, 0x4C, 0xB3, 0x93, 0x47, 0xE1, 0x60, 0xB4                                                },"Vcomm"                          , 9},
{{0x48, 0xEB, 0xD8, 0x1C, 0xD3, 0x95, 0x13, 0x93, 0x1B, 0xD3, 0x97                                    },"ItaVir"                         ,11},
};
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
int main() {
    FILE *f;
    int i;

    f=fopen("virus.dat","wb");
    fwrite(&vs[0],71,sizeof(struct VIRUS),f);
    fclose(f);

    f=fopen("virus.dat","rb");
    fread(&vr[0],71,sizeof(struct VIRUS),f);
    fclose(f);

    for (i=0;i<71;i++) {
        HexDump(vr[i].Code,vr[i].Size,(int)vr[i].Code);
        printf("%02d Name=%s\n",i,vr[i].Name);
    }

    return 0;
}
//004170b0 - 58 35 4f 21 50 25 40 41 50 5b 34 5c 50 5a 58 35  X5O.P%@AP[4\PZX5
//004170c0 - 34 28 50 5e 29 37 43 43 29 37 7d 24 45 49 43 41  4(P^)7CC)7}$EICA
//004170d0 - 52 2d 53 54 41 4e 44 41 52 44 2d 41 4e 54 49 56  R-STANDARD-ANTIV
//004170e0 - 49 52 55 53 2d 54 45 53 54 2d 46 49 4c 45 21 24  IRUS-TEST-FILE.$
//004170f0 - 48 2b 48 2a                                      H+H*
//00 Name=Unknow
//00417534 - 75 1c 80 fe 01 75 17 1f 58 83                    u....u..X.
//01 Name=EDV
//... ...
//0042a844 - 0a 95 4c b3 93 47 e1 60 b4                       ..L..G.`.
//69 Name=Vcomm
//0042acc8 - 48 eb d8 1c d3 95 13 93 1b d3 97                 H..........
//70 Name=ItaVir
//
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
string是对象,不是一段内存,不适合放在struct中。 应改为: typedef struct VirusCode { char Code[1024]; char Name[1024]; int Size; } VrCode;
慢慢成长的我 2014-04-23
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
后来的字节码前面咋没0x了呢? 摒弃iofstream 使用FILE * 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
为什么要不用那个fstream,要用FILE呢?求解释,我先在改了代码码直接用FILE 文件写入的类容还是不对,实在不知道为什么,单步调试要写入的类容都写入结构体了,就是在文件显示写入的内容不对,求老师帮我改改代码。。。。 #include<iostream> #include<fstream> using namespace std; typedef struct VirusCode { string Code; string Name; int Size; }VrCode; void WriteCodeFile(char * content, char * FilePath, char *Name, int num) { VrCode vrcode; memset(&vrcode,0,sizeof(VrCode)); vrcode.Size=num; vrcode.Code = content; vrcode.Name = Name; FILE *file1=fopen(FilePath,"wb"); fwrite(&vrcode,sizeof(VrCode),1,file1); }

65,209

社区成员

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

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