C语言将二进制文件写入内存malloc fopen fseek fread

///20221118malloc获取文件大小,并读取内存中
///
void Funcation3()
{
    //保存读入到内存中的结果
    //创建一个buffer,用来将打开的文件放入申请的内存中
    char* buffer;
    //这里保存文件长度
    long file_size = 0;
    //打开文件
    FILE* fp;//创建一个FILE类型的指针用来获取文件
    fp = fopen("notepad-32bit.exe", "rb");
    if (fp == NULL)//如果获取不正常,那么异常退出
    {
        printf("open file faild\n");
        return exit(1);
    }
    printf("当前文件指针所指位置:%x\n", fp);
    //获取文件大小,这里需要使用fseek用来移动文件指针,ftell是获取文件指针相对于文件头的偏移,所以可以通过ftell的内容获取
    //文件大小,当文件指针指向了文件尾,那么ftell的结果就是整个文件大小。
    //当前指向为程序末尾
    fseek(fp, 0, SEEK_END);
    file_size = ftell(fp);
    printf("文件大小(字节):%d\n", file_size);
    //申请内存空间,在堆中
    buffer = (char*)malloc(sizeof(char)*file_size);
    //申请空间必须进行验证
    if (buffer == NULL)
    {
        printf("申请失败\n");
    }
    //初始化申请的内存空间
    memset(buffer, 0, sizeof(char)* file_size);
    //将文件读入内存中(就是将读取的文件拷贝到内存中)
    //此时需要将文件的指针指向文件头进行读取
    fseek(fp, 0, SEEK_SET);
    fread(buffer, sizeof(char), file_size, fp);
    printf("打印buffer中的内容:%s\n", buffer);
    printf("打印buffer此时的内存地址:%x\n", &buffer);
    fclose(fp);
    free(buffer);
    buffer = NULL;
}

 

posted @ 2022-11-19 16:20  逆向菜狗  阅读(253)  评论(0编辑  收藏  举报