在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