Macos Mac M1`cp`ing二进制文件覆盖另一个会导致崩溃

Macos Mac M1`cp`ing二进制文件覆盖另一个会导致崩溃,macos,binary,apple-m1,Macos,Binary,Apple M1,最近,我观察到一个问题,在我的M1上复制一个二进制文件到另一个二进制文件后,没有先删除它。经过一些实验(点击后),我想出了一个可复制的方法,在最新11.3版本的Big Sur上,在苹果的新硬件上点击这个问题 当一个不同的二进制文件至少运行一次后,在另一个二进制文件上复制另一个二进制文件时,就会出现此问题。不确定是什么导致了这个问题,但它非常复杂,可能会导致一些安全问题 例如,这会产生以下错误: ./binaryA #输出A >/二进制b #产出B >双星 >/二进制b 死亡人数:9人 安装程序

最近,我观察到一个问题,在我的M1上复制一个二进制文件到另一个二进制文件后,没有先删除它。经过一些实验(点击后),我想出了一个可复制的方法,在最新11.3版本的Big Sur上,在苹果的新硬件上点击这个问题

当一个不同的二进制文件至少运行一次后,在另一个二进制文件上复制另一个二进制文件时,就会出现此问题。不确定是什么导致了这个问题,但它非常复杂,可能会导致一些安全问题

例如,这会产生以下错误:

./binaryA
#输出A
>/二进制b
#产出B
>双星
>/二进制b
死亡人数:9人
安装程序 为了重现上述行为,我们可以创建两个简单的C文件,其内容如下:

//binaryA.c
#包括
int main(){
printf(“你好,世界!”);
}
//binaryB.c
#包括
const char s[]=“你好,世界123!”;//为了清晰起见,使尺寸不同
int main(){
printf(“%s”,s);
}
现在,您可以运行以下命令并获得描述的错误(必须先运行程序,然后才能再现问题,因此必须运行下面的程序):

>gcc-o binaryA binaryA.c
>gcc-obinarybbinaryb.c
>/比纳里亚
你好,世界!
>/二进制b
你好,世界123!
>双星
>/二进制b
死亡人数:9人
如您所见,
binaryB
binary不再工作。无论出于何种目的,这两个二进制文件都是相等的,但一个运行,另一个不运行。两个二进制文件的
diff
不返回任何内容

我想这是某种签名问题?但这不应该是因为两个二进制文件都没有签名


有人对这种行为有理论依据吗?还是说它是一个bug?此外,如果它是一个bug,我甚至会将其归档到哪里?

每当您更新签名文件时,您都需要创建一个新文件

具体来说,代码签名信息(代码目录散列)挂起在内核内的vnode上,修改缓存后面的文件将导致问题。您需要一个新的vnode,这意味着一个新文件,即一个新的inode。WWDC 2019第703次会议记录了所有关于公证的信息-见幻灯片65

这是因为ARM M1处理器上的Big Sur要求所有代码都经过有效签名(如果只是临时的),否则操作系统将不会执行它,而是在启动时终止它