에서 이 포스트 는 것을 알 수있다 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]
있습니까? 부팅시 카나리아가 재생성됩니까? 이것은 어디에 문서화되어 있습니까?