所以这是我的问题.我有一个二进制文件,我想编辑.当然可以使用十六进制编辑器编辑它,但是我需要编写一个程序来编辑这个特定的文件.说我知道一个我想要编辑的十六进制,我知道它的地址等等.假设它是一个16位的二进制文件,地址是00000000,它在第04行,它的值为02.我如何创建一个程序会改变该十六进制的值,只有那个十六进制点击一个按钮?
我找到了有关类似的东西的资源,但是我的生活中找不到有关确切问题的帮助.
任何帮助将不胜感激,请不要只告诉我答案,如果有一个,但尝试解释一下.
解决方法
我认为这是一个具体的例子最好的解释.以下是可执行文件的前32个字节,如Visual Studio的十六进制编辑器所示:
- 00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
- 00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
现在一个文件实际上只是一个线性的字节序列.您在十六进制编辑器中看到的行就在这里,使事情更容易阅读.当您要使用代码操作文件中的字节时,需要通过其基于0的位置来标识字节.在上述例子中,非零字节的位置如下:
- Position Value
- -------- ------
- 0 0x4D
- 1 0x5A
- 2 0x90
- 4 0x03
- 8 0x04
- 12 0xFF
- 13 0xFF
- 16 0xB8
- 24 0x40
在上面显示的十六进制编辑器表示中,左侧的数字表示相应行中第一个字节的位置.编辑器每行显示16个字节,因此每行增加16个(0x10).
如果您只想采取文件中的一个字节并更改其值,我看到的最有效的方法是使用FileStream打开文件,寻找适当的位置并覆盖该字节.例如,以下将将位置24处的0x40更改为0x04:
- using (var stream = new FileStream(path,FileMode.Open,FileAccess.ReadWrite)) {
- stream.Position = 24;
- stream.WriteByte(0x04);
- }