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);
所有这些都在主要功能中运行。 问题是在执行代码时,而不是将第一个文件附加到第二个文件,它会覆盖第一个文件,而执行时只执行第二个文件。
我真的希望你能帮助我:)。
答案 0 :(得分:1)
您的代码不正确,因为这样做
unsigned long buffer[size];
你写sizeof(buffer)
sizeof(unsigned long)
次太大了。所以第一个文件可以附加到第二个文件,但也会附加很多垃圾。
您应该声明:
unsigned char buffer[size];
所以sizeof(buffer)
会产生正确的结果。
另外,请检查fopen
语句的返回值。
操作系统可能会忽略在另一个操作系统末尾附加可执行文件。第一个可执行标头包含程序段的逻辑大小。它不会读取超出该文件的文件(好吧,它可以通过大量的黑客攻击来完成,它被称为病毒),这解释了更新的文件运行就像没有附加任何内容一样。
可以想象在两个文件上运行反汇编程序,修改起始点+添加一个包装器来调用两个起始点,然后重新组装到另一个可执行文件。
执行一个程序的最简单方法,然后是另一个程序,只需在脚本(bash,.bat,无论如何)或C system
调用中调用它们。
system("path_to_file1");
system("path_to_file2");