无法正确读取 C 中的 .exe 文件

标签 c

我试图用这个 C 应用程序打印出 PE 文件的原始数据:

int main(int argc, char *argv[])
    {
    if (argc != 2) 
    {printf("Syntax: <file>\n"); 
    return 0;
    }
    FILE *f = fopen(argv[1], "rb");
    if (f == NULL)
    {
        printf("Open file failed.\n");
        return 0; 
    }
    fseek(f, 0, SEEK_END);
    long fsize = ftell(f);
    fseek(f, 0, SEEK_SET);
    unsigned char *string = (unsigned char*)malloc(fsize + 1);
    fread(string, fsize, 1, f);
    fclose(f);
    string[fsize] = 0;
    printf("File content:\n ");  
    printf("%s", string); 
    return 0;}

我用 MinGw gcc 编译了它:

foo.c -o foo.exe -m32

如果我将文本文件传递给 foo.exe,它会打印出该文件的内容,但如果我尝试打印出 .exe 的原始数据,它只会给我前 3 个字节:MZE。 我以为是和fseek()有关,可能找不到合适的EOF,但是我用winapi ReadFile读取文件后,结果一样。我知道这很可能是一个愚蠢的错误,那么如何打印出整个文件呢?

最佳答案

有很多可能性。其中之一是 %s 格式是针对字符串的。字符串是非 0 字符的序列,后跟一个 0 字符。

二进制文件可以在任何位置有一个 0 字符,可能在位置 4,有效地在第 3 个字符之后切割字符串。

关于无法正确读取 C 中的 .exe 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33763629/

相关文章:

c++ - 为有经验的 C 程序员理解 C++ 语法

c - epoll_wait之后如何更新epoll事件?

char数组写入文件

c - unsigned long long 的二进制表示

c - 在 C 中用等效的 HTML 实体替换字符/符号

c - 为什么我在创建着色器类型 35663 时遇到运行时错误

c - c中带有百分比字符的奇怪格式说明符

c - 为什么 int (*ptr)[10] 类型的指针需要数组的地址而不仅仅是数组本身

c - MPI 意外输出

c - 如何将读取 ADC 值转换为 float ?