免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5148 | 回复: 7
打印 上一主题 下一主题

如何修改一个二进制文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-07 17:15 |只看该作者 |倒序浏览
[要求]
如何把二进制文件中A开始偏移0x10开始的四个字节修改为0x12345678

[文件A]
修改前:
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

修改后:
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0010 78 56 34 12 00 00 00 00 00 00 00 00 00 00 00 00


[已经做的工作]
#!/usr/bin/env perl

$OFFSET = 16; # offset in file, in bytes
$VALUE = 0x12345678;

open(FH, "+<A") || die "can't update somewhere: $!";
binmode(FH);

seek(FH, $OFFSET , 0);

print FH $VALUE; #要修改的也就是这个地方了

close FH;

输出:
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0010 30 78 31 32 33 34 35 36 37 38 00 00 00 00 00 00

如果把那句print语句修改为print FH pack("H8",$VALUE);
那输出就变为:
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0010 01 12 34 56 00 00 00 00 00 00 00 00 00 00 00 00

请问如何修改才能达到我的要求呢?谢谢了!

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [报告]
发表于 2008-10-07 22:01 |只看该作者
pack("L",$VALUE);

论坛徽章:
0
3 [报告]
发表于 2008-11-24 11:42 |只看该作者

回复 #2 ynchnluiti 的帖子

可以详细点吗,知道要修改内容的偏移量,能否用函数实现,正则在大文件下太慢。
谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2008-11-24 11:43 |只看该作者
seek 和 readline/print 不能混用。
用 sysread 和 syswrite 吧。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2008-11-24 13:37 |只看该作者
原帖由 nelfking 于 2008-11-24 11:42 发表
可以详细点吗,知道要修改内容的偏移量,能否用函数实现,正则在大文件下太慢。
谢谢

你是要获得已知内容的偏移量,还是要修改已知偏移量的内容?如果是前者只能读出内容来判断。
如果是后者不需要正则,直接使用sysseek定位文件偏移量。

论坛徽章:
0
6 [报告]
发表于 2008-11-26 17:49 |只看该作者

回复 #5 ynchnluiti 的帖子

不好意思,最近在忙另一个任务,现在才来请教
我用的windows操作系统,用syseek,sysread会不会有问题?
我的问题是一个很大的16进制文件,
在偏移量2AA5处是000000,我想修改成FF0000,除了用正则表达式有没有更好的方法?
如果一行行扫描的话,感觉效率低下

论坛徽章:
0
7 [报告]
发表于 2008-11-27 09:57 |只看该作者
谢谢,可以有人来帮忙回答下吗?

论坛徽章:
0
8 [报告]
发表于 2008-11-27 14:32 |只看该作者

回复 #7 nelfking 的帖子

自己解决
最笨的办法(正则表达式)...

[ 本帖最后由 nelfking 于 2008-11-27 14:33 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP