最近,我一直在观察在将一个二进制文件复制到另一个二进制文件上而没有先在我的 M1 上删除它后发生的问题。经过一些实验(在遇到这个问题之后),我想出了一种可重现的方法,可以在最新的 11.3 版 Big Sur 的 Apple 新硬件上解决这个问题。
当在至少运行一次后将不同的二进制文件复制到另一个二进制文件时,就会出现此问题。不确定是什么导致了这个问题,但它非常令人困惑,并且可能会导致一些安全问题。
例如,这会产生错误:
> ./binaryA
# output A
> ./binaryB
# output B
> cp binaryA binaryB
> ./binaryB
Killed: 9
Run Code Online (Sandbox Code Playgroud)
为了重现上述行为,我们可以创建两个简单的 C 文件,其中包含以下内容:
// binaryA.c
#include<stdio.h>
int main() {
printf("Hello world!");
}
Run Code Online (Sandbox Code Playgroud)
// binaryB.c
#include<stdio.h>
const char s[] = "Hello world 123!"; // to make sizes differ for clarity
int main() {
printf("%s", s);
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以运行以下命令并获取描述的错误(必须运行程序才能重现问题,因此运行以下程序是必要的):
> gcc -o binaryA binaryA.c
> gcc -o binaryB …Run Code Online (Sandbox Code Playgroud)