我对C语言还很陌生,请谅解我的无知。我想将一个完整的可执行文件读入缓冲区:
#include <stdlib.h>
FILE *file = fopen(argv[1], "rb");
long lSize;
fseek(file, 0, SEEK_END);
lSize = ftell(file);
fseek(file, 0, SEEK_SET);
char *buffer = (char*) malloc(sizeof(char)*lSize);
fread(buffer, 1, lSize, file);
该文件大小为6144字节(存储在lSize中),但我的缓冲区大小仅为4字节,因此缓冲区中只存储了MZ签名。
为什么在这种情况下malloc只分配4个字节?
编辑:可能是PE文件的MZ头中的第一个0终止了char缓冲区。然而,如果我将缓冲区设置为特定值,整个文件将被存储。如果我将缓冲区设置为int(= 4字节),则缓冲区不会被终止,但当然会更大(比char = 1字节大)。我只想逐字节地复制文件以及空字节。
编辑2:缓冲区当然包含了所有应该包含的内容,但如果我尝试使用fwrite将其写入新文件,则只写入了前四个\ 0(即4个字节)。我只是fwrite用错了。已修正此问题。对不起,问题描述不够清晰。