我用 linux 5.10 和 qemu 5.2.93 测试堆栈溢出。它也无法检测堆栈上的溢出。这是我的示例
#include <stdio.h>
int main(int argc, char** argv)
{
volatile char pad[10];
char s[10];
for(int i=0; i<atoi(argv[1]); i++)
{
s[i] = i;
}
return 0;
}
我用 clang-13 编译它
clang -target aarch64-linux -march=armv8+memtag -fuse-ld=lld stack.c -o stack -fsanitize=memtag -static
我用一个简单的文件系统运行 qemu
qemu-system-aarch64 -machine virt,mte=on -cpu max -kernel ./linux/arch/arm64/boot/Image -nographic -append "console=ttyAMA0" -m 1024 -initrd ./filesystem.cpio.gz -net nic -monitor /dev/null
和
./stack 17
没有任何事情发生。
或者任何人都可以告诉我如何在 fvp 监视器上运行它。我还使用了启用 MTE 的内核,fvp 版本 11.8.37。我启用了 fvp mte -C cluster0.memory_tagging_support_level=2
。毕竟,上面的堆栈溢出程序也没有发生任何事情。