一个用于操作ips补丁的python包
ips-util的Python项目详细描述
#ips util
summary
这是一个python包,用于操作以国际修补系统(ips)格式编码的二进制修补程序,如[此处](http://fileformats.archiveeam.org/wiki/ips_u(binary_u patch_u format))和[此处](http://old.smwiki.net/wiki/ips_file_u format)所述。IPS是一种格式,在历史上被广泛用于为经典游戏机分发ROM黑客;据我所知,尽管它有已知的局限性,但目前仍是一种标准格式,使用它的工具仍然很有用。
通过分析[lunar ips]提供的gui(https://fusoya.eludevisibility.org/lips/)和类似的工具,我创建它主要是为了帮助编写生成rom hack和输出ips补丁的python脚本。因此它可能不像其他节目那样功能齐全…但考虑到ips格式是多么简陋,我不确定这样一个工具到底能有多“功能齐全”。
我提供了一套测试来验证ips util是否尽我所能地处理ips格式的已知缺陷,但可能还有一些边缘情况我还没有想到。我也没有花太多心思来优化从源和目标文件创建补丁…基于有限的测试,结果看起来相当不错,但我知道[flips](https://github.com/alcaro/flips),例如,仍然有一些优化我还没有实现。我不太担心,我们生活在一个2KB和3KB补丁之间的差异对任何人都不再那么重要的世界。
BR/>创建一个补丁,使用现有的源和目标二进制文件:
BASH
和IPSSUTIL创建“超级马里奥世界.SMC”“超级马里奥世界[137357OH4XY3V4R] .SMC”-O 1337×P47 CH .IPS
` BR/> BR/>将补丁应用到二进制文件:
BR/> ` BASH
GT;ips_util apply 1337_p47ch.ips“super mario world.smc”-o w00t.smc
`````
>注意,在这两种情况下,如果输出文件没有使用“-o”标志指定,则结果将被写入stdout,以用于当前Linux孩子们所遇到的任何复杂的“bash”骗局。
您还可以转储修补程序的内容、预览修补程序或调试修补程序创建脚本:
``bash
>;ips_util trace 1337_p47ch.ips
````
(不过,目前,像[ips peek]这样一个合适的可视化工具(https://github.com/vector-man/ips-peek)可能在各个方面都更好。)
byteorder='little'))max out some stat
修补程序。添加rle_u记录(0x5678,b'\xea',0x10)觰nop out a buck code
with open('gavroche.ips','w+b')作为f:
f.write(patch.encode())
`````
or:
```python
from ips_util import patch
patch=patch.load('gavroche.ips')
with open('some_data.smc','rb)作为f在:
with open with open('some_patched_data.smc',“w+b”)作为f_out:
f_out.write(patch.apply(f_in.read())
````
所以就做什么吧,我不在乎。
summary
这是一个python包,用于操作以国际修补系统(ips)格式编码的二进制修补程序,如[此处](http://fileformats.archiveeam.org/wiki/ips_u(binary_u patch_u format))和[此处](http://old.smwiki.net/wiki/ips_file_u format)所述。IPS是一种格式,在历史上被广泛用于为经典游戏机分发ROM黑客;据我所知,尽管它有已知的局限性,但目前仍是一种标准格式,使用它的工具仍然很有用。
通过分析[lunar ips]提供的gui(https://fusoya.eludevisibility.org/lips/)和类似的工具,我创建它主要是为了帮助编写生成rom hack和输出ips补丁的python脚本。因此它可能不像其他节目那样功能齐全…但考虑到ips格式是多么简陋,我不确定这样一个工具到底能有多“功能齐全”。
我提供了一套测试来验证ips util是否尽我所能地处理ips格式的已知缺陷,但可能还有一些边缘情况我还没有想到。我也没有花太多心思来优化从源和目标文件创建补丁…基于有限的测试,结果看起来相当不错,但我知道[flips](https://github.com/alcaro/flips),例如,仍然有一些优化我还没有实现。我不太担心,我们生活在一个2KB和3KB补丁之间的差异对任何人都不再那么重要的世界。
BR/>创建一个补丁,使用现有的源和目标二进制文件:
BASH
和IPSSUTIL创建“超级马里奥世界.SMC”“超级马里奥世界[137357OH4XY3V4R] .SMC”-O 1337×P47 CH .IPS
` BR/> BR/>将补丁应用到二进制文件:
BR/> ` BASH
GT;ips_util apply 1337_p47ch.ips“super mario world.smc”-o w00t.smc
`````
>注意,在这两种情况下,如果输出文件没有使用“-o”标志指定,则结果将被写入stdout,以用于当前Linux孩子们所遇到的任何复杂的“bash”骗局。
您还可以转储修补程序的内容、预览修补程序或调试修补程序创建脚本:
``bash
>;ips_util trace 1337_p47ch.ips
````
(不过,目前,像[ips peek]这样一个合适的可视化工具(https://github.com/vector-man/ips-peek)可能在各个方面都更好。)
byteorder='little'))max out some stat
修补程序。添加rle_u记录(0x5678,b'\xea',0x10)觰nop out a buck code
with open('gavroche.ips','w+b')作为f:
f.write(patch.encode())
`````
or:
```python
from ips_util import patch
with open('some_data.smc','rb)作为f在:
with open with open('some_patched_data.smc',“w+b”)作为f_out:
f_out.write(patch.apply(f_in.read())
````
所以就做什么吧,我不在乎。