如何正确地逐字节复制可执行文件

时间:2017-10-12 18:25:29

标签: copy byte fopen filestream fwrite

我最近一直试图了解更多关于通过字节复制文件的信息,但我遇到了麻烦。检查原始notepad.exe中针对notepad2.exe的字节时,即使fread和frwite大小在读写之间保持一致,我也会得到不同的结果。

typedef unsigned char BYTE;
FILE* file;
FILE* ofile;

file = fopen("notepad.exe", "rb");

fseek(file, 0, SEEK_END);
long fSize = ftell(file);
rewind(file);

BYTE* ret = new BYTE[fSize];

fread(ret, 1, fSize, file);

fclose(file);

ofile = fopen("notepad2.exe", "w");
fwrite(ret, 1, fSize, ofile);

fclose(ofile);

我可能在错误的假设下它甚至可以这样工作,我对使用较低级别的内存操作相当新。非常感谢帮助人员。

1 个答案:

答案 0 :(得分:1)

下载免费的十六进制编辑器并直观地查看这两个文件'那里的字节。这样可以更容易地查看出错的地方。

显然你有一些额外的字节(可能有很多00个值),但......是复制文件字节的前面还是后面?

  • 检查Fsize的值,ret的长度(fwrite之前检查),
    是否与预期金额相符?

  • 而不是:ofile = fopen("notepad2.exe", "w");
    尝试设置为:
    ofile = fopen("notepad2.exe", "wb");

  • 使用whilefor循环读取来自ret的每个字节和 / 相同的值附加到磁盘文件(notepad2.exe)中的字节。