• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言 解压华为固件的实例代码

C语言 解压华为固件的实例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了华为c语言编程规范,华为c语言笔试题,华为c语言面试题,华为5c语言设置,华为c语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

#define MAXLEN 10240

void usage();
int main(int argc,char *argv[])
{
    int count,packetLength,dataLength,olddataLength,datasum,line,remainder,*Length;
    char *FILENAME,*OUTNAME;
    char int2char[10];
    unsigned char buffer[MAXLEN];
    FILE *INFILE,*OUTFILE;

    //获取输入的参数
    if(argc == 1)
        FILENAME="UPDATE.APP";
    else
        FILENAME=argv[1];

    //用二进制打开输入文件
    if((INFILE = fopen(FILENAME, "rb")) == NULL) usage();

    //创建文件夹并进入目录
    mkdir("output");
    chdir("output");

    //跳过92空字节
    fseek(INFILE, 92, 0);

    for(count=1;INFILE != NULL;count++)
    {
        //判断是否为华为固件索引头
        fread(buffer, 4, 1, INFILE);
        if(buffer[0] != 0x55) break;
        if(buffer[1] != 0XAA) break;
        if(buffer[2] != 0x5A) break;
        if(buffer[3] != 0xA5) break;

        //获取头文件长度
        fread(buffer, 4, 1, INFILE);
        Length = (int *)buffer;
        packetLength=*Length;

        //跳过16字节
        fseek(INFILE, 16, 1);

        //获取内容长度
        fread(buffer, 4, 1, INFILE);
        Length = (int *) buffer;
        dataLength=*Length;

        //把整数和字符串连接并复制给文件名
        itoa(count, int2char, 10);
        OUTNAME=strcat(int2char, ".img");

        //跳到头文件末尾
        fseek(INFILE, packetLength-28, 1);

        //创建文件
        if((OUTFILE = fopen(OUTNAME, "wb")) == NULL)
        {
            printf("Unrecognised file format. Wrong identifier.\n");
            return -1;
        } else printf("Extracted output/%s\n",OUTNAME);

        //把内容数据分成多个部分
        datasum=dataLength/MAXLEN;

        for(line=0;line <= datasum;line++)
        {
            //获取内容数据
            if(datasum == line)
                fread(buffer, dataLength % MAXLEN, 1, INFILE);
            else
            fread(buffer, MAXLEN, 1, INFILE);

            //输出文件
            if(datasum == line)
                fwrite(buffer, dataLength % MAXLEN, 1, OUTFILE);
            else
            fwrite(buffer, MAXLEN, 1, OUTFILE);
        }

        //关闭输出文件
        fclose(OUTFILE);

        //指针取整,4的倍数
        remainder = 4 - (ftell(INFILE) % 4);
        if (remainder < 4)
        {
            //进行填充剩余的字节
            fseek(INFILE, remainder, 1);
        }
    }
    //关闭输入文件
    fclose(INFILE);
    return 0;
}

void usage()
{
    //帮助函数
    printf("uasge: unpack_update.exe [UPDATE.APP|UPDATA.APP]\n");
    exit(0);
}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言 解压华为固件的实例代码

相关文章

  • 2017-05-28C语言实现求定积分的方法
  • 2017-05-28讲解C语言编程中指针赋值的入门实例
  • 2017-05-28C++构造函数深度学习
  • 2017-05-28c++中数字与字符串之间的转换方法(推荐)
  • 2017-08-30c语言strcmp函数实现
  • 2017-05-28深入C/C++浮点数在内存中的存储方式详解
  • 2017-05-28C++中的按位与&、按位与或|、按位异或^运算符详解
  • 2017-05-28类成员函数的重载、覆盖与隐藏之间的区别总结
  • 2017-05-28深入理解C++中public、protected及private用法
  • 2017-05-28C++利用stringstream进行数据类型转换实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++软件添加dump调试打印日志(推荐)
    • 初中毕业能学会编程吗?
    • C中实现矩阵乘法的一种高效的方法
    • C/C++ 中堆和栈及静态数据区详解
    • C++ 实例之九宫格广度优先遍历
    • C语言数组指针(指向数组的指针)详解
    • C语言安全编码数组记法的一致性
    • QString和char以及string之间的赋值详解
    • 详解散列表算法与其相关的C语言实现
    • c++面试题字符串拷贝函数示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有