|
发表于 2009-12-20 12:27:44
|
显示全部楼层
http://hi.baidu.com/ccjdwxw/blog ... b16485a0ec9ca2.html
一、Winhex的使用
用Winhex打开要修改的文件,显示如下界面:
任何一个存储在计算机上的文件都可以认为是由最基本的0和1组成的,Winhex便是将这些文件以二进制形式打开。不过显示的时候是十六进制,一位十六进制相当于四位二进制,两位十六进制相当于八位二进制即一个字节,每个字节即对应一个地址。
左边那一列是行标,上边那一行是列标,行标和列标便组成了地址。如6BFA3003这个地址,其行标便是6BFA3000,列标为3。
想要修改数值,直接键盘输入即可。
一个基本常识:对于有多位的十六进制数值而言,存储方式是低位在前,高位在后。如6e731f这么个值,存储方式便是1f 73 6e。
既然显示十六进制,那么自然存在一个十六进制和日常使用的十进制转化的问题。通常可以靠Windows的计算器来完成,点击Winhex工具栏的图标即可打开。在计算器的查看菜单里选择“科学型”,便有进制转换的功能。
其实Winhex自带的数据解释器也可以实现进制转换。(看不到数据解释器的,单击视图——显示——数据解释器)把光标定在某一地址,数据解释器里便能显示对应的十进制数值。在数据解释器里输入十进制值然后按回车,则那个地址的数值就会被改写成对应的十六进制。在“选项——数据解释器”里还能对数据解释器的显示内容作设置,比如翻译无符号数、浮点数等,这个有兴趣的自己试试。
地址定位
靠行标和列标来定位地址显然是愚蠢废力的。Winhex的工具栏上有个图标,点击显示如下界面:
此时直接在“新位置”里输入地址便可完成定位。
也可以定位相对地址。比如此时位置在某ATK首地址,要往上移1000h到达MOV首地址,那么在“新位置”里输入1000,“相对于”选择“当前位置(P)(返回至)”就行了。
同理,到了MOV首地址后又要往下移960h到达一方地址,则可以在“新位置”里输入960,“相对于”选择“当前位置(C)”。
“位置”菜单里还有个很实用的功能:标记位置和转到标记,快捷键分别是Ctri+I和Ctrl+K。这个功能就不用多解释了吧,我是经常用的。
定义选块
定义选块主要是用来导出特定数据或缩小搜索范围,定义完成之后可以在“位置”菜单里快速定位到选块头和选块尾。
这个操作很简单。在选块头右键点击,选择“选块开始”,选块尾右键点击,选择“选块结尾”就完成了。
搜索
这个也很直观。搜索——查找十六进制数值,输入要查找的串即可,注意中间不要有空格。可以定义向上向下还是全面搜索,之前如果定义了选块可以选择仅在选块中搜索。其它几个选项建议不要动。找到后如果不是自己想找的目标,可以按F3继续搜索。
数据导出和导入
这个其实就是备份和还原的问题了。不过现在已经没有做txt补丁的必要了,备份成txt这一步骤也就多余了。
导出:首先把要备份的数据定义成选块,然后在选块中任意位置右键点击,选择“编辑——复制区块——置入新文件”即可。
导入:把备份数据定义选位,(如果是全文件那就直接Ctrl+A),然后右键右击,选择“编辑——复制区块——十六进制数值”;再定位到要还原的数据的首地址,右键点击,选择“编辑——剪贴版数据——写入”即可。注意是“写入”不是“粘贴”。
文件扩容
改MOT、BGM的时候有可能需要在文件尾扩容,方法便是在文件尾右键点击,选择“编辑——粘贴零字节”,输入想扩容的大小即可。
不过那个2G多的linkdata.bin用这种办法扩容很耗时间。可以换个方法,点击“文件”菜单,新建一个合适大小(一般是所需扩容大小+1)的文件,然后把这个文件的数据复制后写入整个文件的尾地址,这也达到了扩容目的,而且处理速度很快。
基本上需要用到的Winhex操作就这么些。最后,改完了别忘记保存。 |
|