나는 Rust Unstable 책을 읽고 있었는데 새로운 기능을 보았습니다.emit-stack-sizes
,
Rustc 플래그는
-Z emit-stack-sizes
LLVM이 스택 크기 메타데이터를 내보내도록 합니다.
그것은 계속해서 말한다
참고: 이 LLVM 기능은 LLVM 8.0부터 ELF 개체 형식만 지원합니다.다른 개체 형식(예: macOS 및 Windows)을 사용하는 대상에 이 플래그를 사용하면 해당 플래그가 무시됩니다.
사용하는 것으로 보이는 LLVM 기능은 EmitStackSizeSection
옵션입니다. 스택 크기를 아는 목적은 무엇입니까? 이 도구를 사용하시나요? 이것이 ELF의 공식 기능인가요? 그렇다면 커널이 이를 사용합니까? 이것은 문서화 된 것 같습니다.stack_sizes
및 섹션 .rel.stack_sizes
아래의 ELF 메타데이터.rela.stack_sizes
답변1
여기에 설명되어 있습니다.원본 RFC,"[eRFC] 추가됨 -Z emit-stack-sizes
"
궁극적인 목표는컴파일 타임에 스택 오버플로가 없음을 증명하기 위해 스택 사용량에 대한 전체 프로그램 분석을 활성화합니다.이 속성은 MMU/MPU가 부족하고 스택 오버플로로 인해 메모리가 손상될 수 있는 시스템에서 중요합니다. 스택 오버플로 보호 기능이 있는 시스템에서는 이러한 증명을 사용하여 런타임 검사(예: 스택 탐색 또는 MPU)를 옵트아웃할 수 있습니다.
그리고 더 나아가 이 점에 있어서블로그 항목,"분석 도구를 사용하여 정적 스택 구현". 이를 수행하는 도구는 여기에서 사용할 수 있습니다(녹 포함).