vim编辑hex文件
我在 Dell T5820 GPU异常排查 想尝试是否能够通过修订VBIOS的SSID,也就是VBIOS中标记GPU型号的修改来扰过 Dell Precision T5820 工作站 对GPU卡的限制(如果它确实只允许使用workstation graphics的话)
这就需要能够直接编辑hex十六进制文件,如果使用HexEdit这种工具虽然方便,但是在Linux平台,显然 vim 更为普遍。Linux中有一个系统工具 xxd 可以处理二进制文件,vim可以通过调用 xxd 来实现 修订AMD MI50 VBIOS的BAR size 这样的固件修改。
备注
修订SSID最好使用 Red BIOS Editor (RBE) 或者在 GOPUpd 处理完后再用 hexedit 修改
首先在终端用vim打开ROM文件:
以
-b 参数(Binary模式)打开ROM二进制文件vim -b v420_32gb.rom
备注
-b 参数(Binarymoshi)非常重要,可以防止vim尝试猜测字符编码或者在文件末尾自动添加换行符,避免破坏固件结构
转换成十六进制可视化:
进入vim后,输入如下命令
调用xxd转换标准十六进制
:%!xxd
此时文件会由乱码转换成标准的十六进制网格,左侧是偏移量(Offset),中间是十六进制数据,右侧是ASCII预览
编辑文件,建议使用
r替换单个字符, 不要使用i插入模式以免文件长度偏移破坏校验转换回二进制并保存
这一步非常关键,如果没有转换回去情况下保存,文件会损坏
转换回二进制并保存
:%!xxd -r
:wq
这里 -r 表示 reverse,将十六进制文本重新压回原始二进制流
警告
当使用vim调用xxd修改二进制的ROM文件,一定要确保修改前后ROM大小不变,谨防因为不小心按了回车导致字节数增加。