最近,我正在尝试在 x86_64 中测试 clang-8 的“影子调用堆栈”功能。但是当我运行“shadowed”程序时,即使它是一个“Hello_World”程序,它也会不断抛出分段错误。我的编译命令是“clang-8 -fsanitize=shadow-call-stack normal.c”。“normal.c”只是一个简单的 hello_world c 程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
main函数的汇编代码在这里:
0x0000000000401130 <+0>: mov (%rsp),%r10
0x0000000000401134 <+4>: xor %r11,%r11
0x0000000000401137 <+7>: addq $0x8,%gs:(%r11)
0x000000000040113c <+12>: mov %gs:(%r11),%r11
0x0000000000401140 <+16>: mov %r10,%gs:(%r11)
0x0000000000401144 <+20>: push %rbp
0x0000000000401145 <+21>: mov %rsp,%rbp
0x0000000000401148 <+24>: sub $0x20,%rsp
0x000000000040114c <+28>: movl $0x0,-0x4(%rbp)
0x0000000000401153 <+35>: mov %edi,-0x8(%rbp)
0x0000000000401156 <+38>: mov %rsi,-0x10(%rbp)
0x000000000040115a <+42>: movabs $0x402004,%rdi
0x0000000000401164 <+52>: mov $0x0,%al
0x0000000000401166 <+54>: callq 0x401030 …Run Code Online (Sandbox Code Playgroud)