用c将二进制文件追加到另一个文件

用c将二进制文件追加到另一个文件,c,file-io,binary,C,File Io,Binary,美国人民,, 我对c相当陌生,想给自己设定一个挑战: 将二进制文件(如.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); rew

美国人民,, 我对c相当陌生,想给自己设定一个挑战: 将二进制文件(如.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);  
所有这些都在主功能中运行。 问题是在执行代码时,它会覆盖第一个文件,而不是将第一个文件追加到第二个文件,并且在执行时只执行第二个文件


我真的希望你能帮我:)

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

unsigned long buffer[size];
您正在编写的
sizeof(buffer)
太大了。因此,第一个文件被附加到第二个文件,但也附加了大量垃圾

你应申报:

unsigned char buffer[size];
因此
sizeof(buffer)
产生正确的结果

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

编辑:我突然想到你想把两个可执行文件附加在一起。上面的(固定的)代码可以将2个二进制文件(数据文件)附加在一起,但对于可执行文件,它就是不起作用

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

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

要执行一个程序,然后执行另一个程序,最简单的方法就是在脚本(bash、.bat等)或C
system
调用中调用它们

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

@KeineLust我的目标是在执行其中一个文件时执行这两个文件。我认为只需将一个文件附加到另一个文件就可以了,但如果有人能找到一个更简单的解决方案,我很乐意接受:)@Mr.SoUndso,这样不行。不能将两个可执行文件附加在一起。这根本不起作用。如果你想一个接一个地执行,只需编写一个脚本。我听说有一种病毒(我自己也不想创建),它能够将自己附加到发现的任何.exe文件中,从而使删除它变得更困难。我是早期的病毒之一。病毒不会附加到exe。它修改exe以将自身插入段列表中。这意味着您必须了解MZ/Elf文件结构,否则它什么也不做/破坏可执行文件。