この投稿からFS:[0x28]、スタックカナリアであることが示されています。この関数でGCCを使用して同じコードを生成しています。
void foo () {
    char a[500] = {};
    printf("%s", a);
}
具体的には、このアセンブリを取得しています。
    0x000006b5      64488b042528.  mov rax, qword fs:[0x28]                ; [0x28:8]=0x1978 ; '(' ; "x\x19"
    0x000006be      488945f8       mov qword [local_8h], rax
...stuff...
    0x00000700      488b45f8       mov rax, qword [local_8h]
    0x00000704      644833042528.  xor rax, qword fs:[0x28]
    0x0000070d      7405           je 0x714
    0x0000070f      e85cfeffff     call sym.imp.__stack_chk_fail           ; void __stack_chk_fail(void)
    ; CODE XREF from 0x0000070d (sym.foo)
    0x00000714      c9             leave
    0x00000715      c3             ret
の値を設定することはfs:[0x28]何ですか?カーネル、またはGCCがコードをスローしていますか?カーネルでコードを表示したり、設定するバイナリにコンパイルしたりできますfs:[0x28]か?カナリアは再生成されますか-起動時、またはプロセススポーンですか?これはどこに文書化されていますか?