如何解决在Mac OS Mojave中,带有“ perl -pi -e”的二进制修补程序无法按预期工作
我想用perl修补二进制文件。该命令今天不起作用,但是过去我经常使用它。
以下命令在Mac Os X上不起作用:
perl -pi -e 's|\xA0\x37\x96\x30\xDE\x90|\xA7\x70\x92\x30\xD5\x9B|' /file.bin
如果我使用
perl -MO=Deparse -pi -e 's|\xA0\x37\x96\x30\xDE\x90|\xA7\x70\x92\x30\xD5\x9B|' /file.bin
结果是:
BEGIN { $^I = ""; }
LINE: while (defined($_ = <ARGV>)) {
s/\xA0\x37\x96\x30\xDE\x90/\247p\2220\325\233/;
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
为什么替换部分被这样修改?
我检查了1000次语法是否正确;为什么它不能按预期工作?
解决方法
它没有被修改。
"\xA7\x70\x92\x30\xD5\x9B"
和
"\247p\2220\325\233"
等效。
$ perl -e'CORE::say "\xA7\x70\x92\x30\xD5\x9B" eq "\247p\2220\325\233" ? "same" : "diff"'
same
- 247 8 = A7 16
-
p
的ASCII编码为70 16 - 222 8 = 92 16
-
0
的ASCII编码为30 16 - 325 8 = D5 16
- 233 8 = 9B 16
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。