制作补丁与打补丁

diff补丁格式

在Uboot学习中,接触到了打补丁这个操作,首先来学习下diff的patch文件格式.

命令参数

diff

常使用的 patch 参数:

  • ”-u”:表示在比较结果中输出上下文中一些相同的行
  • “-r“:表示递归比较各个子目录下的文件
  • “-N“:将不存在的文件当作空文件
  • “-w“:忽略空格的比较
  • “-B“:忽略空行的比较

patch

常使用的 patch 参数:

  • "-p": 指定目录级别(从路径全称中除去几层目录)如,如果补丁文件包含路径名称 /curds/whey/src/blurfl/blurfl.c 那么:-p0 使用完整路径名,-p1 除去前导斜杠,留下 curds/whey/src/blurfl/blurfl.c,-p4 除去前导斜杠和前三个目录,留下blurfl/blurfl.c
  • "-d" :Directory 打补丁前,更改当前目录到指定目录
  • "-i" :PatchFile 指定补丁文件,而不是从标准输入中读取补丁信息
  • "-R" :逆向补丁,这个选项在防止打错补丁很有用处

制作补丁

使用命令 diff -urN oldFloder NewFloder > mypatch.diff, 其中oldFloder为原旧文件,NewFloder为新文件,生成补丁mypatch.diff

应用补丁

使用命令 patch -p1 < ../test.diff来应用补丁

卸载补丁

使用命令 patch -p1 -R < ../test.diff

 

补丁文件内容

  1. 第一行,首先指定文件目录路径个比对参数
  2. 第二行,---.....表示原来的文件
  3. 第三行,+++....表示新文件
  4. 第四行一般是被 @@...@@包含的内容,比如@@ -206,8 +206,8 @@: -206表示原来的第206行,8表示总共8行,+206表示这是从新文件的206行,总共也有8行
  5. 文件内容中-表示删除这一行,+表示新增这一行,无+-表示保持原来的

例子

  • 1. 在OldFloder存在文件test.txt
111111
222222
333333
444444
555555
  • 2. 在NewFloder存在文件test.txt
111111 add here
delete 222222 here
33 change 33
444444
555555
  • 3. 为OldFloder创建补丁 diff -urN OldFloder NewFloder > test.diff
  • 4. 查看下补丁的内容cat test.diff
diff -urN OldFloder/test.txt NewFloder/test.txt
--- OldFloder/test.txt  2018-09-20 21:15:40.576162357 +0800
+++ NewFloder/test.txt  2018-09-20 21:17:02.747161577 +0800
@@ -1,5 +1,5 @@
-111111
-222222
-333333
+111111 add here
+delete 222222 here
+33 change 33
 444444
 555555
  • 5. 应用补丁,patch -p1 < ../test.diff,命令前面的 -p1表示忽略路径中第1个父目录,我们这里是在OldFloder中应用的,所以是p
  • 6. 查看在OldFloder中的文件cat test.txt,可以发现已经应用成功
111111 add here
delete 222222 here
33 change 33
444444
555555
  • 7. 例子解析
diff -urN OldFloder/test.txt NewFloder/test.txt
--- OldFloder/test.txt  2018-09-20 21:15:40.576162357 +0800
+++ NewFloder/test.txt  2018-09-20 21:17:02.747161577 +0800
@@ -1,5 +1,5 @@
-111111
-222222
-333333
+111111 add here
+delete 222222 here
+33 change 33
 444444
 555555
  • @@ -1,5 +1,5 @@表示原来文件的第1行开始,总共有5行,新文件从第1行开始,总共有5行
  • -111111表示删除原文件这一行
  • -222222表示删除原文这一行
  • -333333表示删除原文这一行
  • 后面三个+++....表示新增这一行
  • 接下去的44444455555表示不更改
  • 这么减了三行,去除三行,然后再保留原来的两行444444555555,总共还是5行

转载:https://www.cnblogs.com/zongzi10010/p/9683617.html

一款不错的补丁制作工具 [+] 支持补丁模式:   - 文件偏移。   - 虚拟地址(VA)。   - 相对虚拟地址(RVA)。   [+] 支持32位 和 64位的 PE 文件(EXE,DLL)。   [+] 支持多文件偏移补丁。   [+] 支持多文件 S&R 补丁。   [+] 支持高级 S&R 补丁。   [+] 支持 Windows 检查。   [+] 支持附加文件(文件安装程序)。   [+] 支持注册表补丁。   [+] 支持修补后恢复原始文件日期和时间。   [+] 支持文件大小、CRC32、MD5 哈希值检查。   [+] 支持滚动文字与透明边缘。   [+] 支持 XM、V2M、MOD、IT、S3M、MTM、UMX、MID、SID、SPC、YM、FTC、FLC、SQT、PT1、PT2、PT3、PSG、PSC、PSM、YM、GTR、STP 和 ASC 模块。   [+] 支持 PNG、JPG、BMP 皮肤(SKN)。   [+] 支持大多数的字体,包括:TTF、FON、OTF、WOFF、FNT。   [+] 支持 Windows 光标和动态光标(CUR、ANI)。   [+] 支持 Windows 图标(ICO)。   [+] 支持注册表补丁中的占位符。   [+] 支持保存/加载项目。   [+] 支持目标文件自动检测(从文件路径或注册表)。   [+] 支持 UPX 或外部打包器与命令。   [+] 支持 NFO(补丁/加载器需要 NFO 运行)。   [+] 全功能皮肤生成器。   [+] 皮肤转换器。   加载器选项:   [+] 支持 32 位和 64 位的加载器。   [+] 支持特定 RVA 补丁(多字节)。   [+] 支持搜索和替换(多字节)。   [+] 注册表补丁。   [+] 支持特定路径目标自动检测(使用宏)。   从特定注册表项。   [+] 支持修补加载的 DLL 模块。   [+] 支持修补现有进程。   [+] 支持文件检查(CRC32、文件大小和 MD5)。   [+] 添加设置调试权限。   [+] 添加等待第一个窗口。   [+] 支持静默加载器。   [+] 定时加载器延迟(毫秒)和超时(秒)选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值