使用c

时间:2017-11-24 20:35:19

标签: c file-io binary

StackOverflow的人, 我很陌生,想为自己挑战: 将二进制文件(如.exe文件)添加到另一个文件,因此当第二个文件启动时,将执行bot文件。这是我试过的代码:

FILE* fp1;
    FILE* fp2;


    fp1 = fopen("path_to_file1","rb");
    fp2 = fopen("path_to_file2","ab");

    fseek(fp1,0, SEEK_END);
    int size = ftell(fp1);
    rewind(fp1);

    unsigned long buffer[size];





    fread(buffer,sizeof(buffer),1,fp1);

    fclose(fp1);


    fwrite(buffer,sizeof(buffer),1,fp2);

    fclose(fp2);  

所有这些都在主要功能中运行。 问题是在执行代码时,而不是将第一个文件附加到第二个文件,它会覆盖第一个文件,而执行时只执行第二个文件。

我真的希望你能帮助我:)。

1 个答案:

答案 0 :(得分:1)

您的代码不正确,因为这样做

unsigned long buffer[size];

你写sizeof(buffer) sizeof(unsigned long)次太大了。所以第一个文件可以附加到第二个文件,但也会附加很多垃圾。

您应该声明:

unsigned char buffer[size];

所以sizeof(buffer)会产生正确的结果。

另外,请检查fopen语句的返回值。

编辑:它只是打击了我想要将2个可执行文件附加在一起。上面(固定)代码可以将2个二进制文件(数据文件)附加在一起,但对于可执行文件,它只是不起作用。

操作系统可能会忽略在另一个操作系统末尾附加可执行文件。第一个可执行标头包含程序段的逻辑大小。它不会读取超出该文件的文件(好吧,它可以通过大量的黑客攻击来完成,它被称为病毒),这解释了更新的文件运行就像没有附加任何内容一样。

可以想象在两个文件上运行反汇编程序,修改起始点+添加一个包装器来调用两个起始点,然后重新组装到另一个可执行文件。

执行一个程序的最简单方法,然后是另一个程序,只需在脚本(bash,.bat,无论如何)或C system调用中调用它们。

system("path_to_file1");
system("path_to_file2");