Stack Protector (Canary) System Map CONFIG_STACKPROTECTOR_STRONG

▲ 높은 주소 (High Memory)
Return Address (RIP / LR)
호출자 복귀 주소
Saved Frame Pointer (RBP / x29)
이전 스택 프레임 베이스
🛡️ Stack Canary (난수)
무결성 감시 가드 값
Local Buffers & Variables
지역 배열 (char buf[64])
▼ 낮은 주소 (Low Memory / SP)
● 정상 프롤로그 & 에필로그 검증 메커니즘
함수 진입 시(Prologue) CPU 전용 레지스터에서 난수 카나리 값을 읽어 리턴 주소 직전에 배치함. 함수 종료 시(Epilogue) 저장된 값과 원본 레지스터 값을 비교하여 변조가 없으면 정상 반환함.
; x86_64 Function Epilogue Check movq -0x8(%rbp), %rax xorq %gs:0x28, %rax ; 카나리 일치 검증 je .L_return ; 일치 시 정상 반환 call __stack_chk_fail ; 불일치 시 패닉 호출

x86_64 아키텍처

• 카나리 출처: %gs:40 (Per-CPU)
• 프레임 포인터: %rbp
• 리턴 주소: 스택에 직접 저장

ARM64 (aarch64)

• 카나리 출처: __stack_chk_guard
• 프레임 포인터: x29 (FP)
• 리턴 주소: x30 (LR) 레지스터/스택