AI 요약
Fil-C는 함수 포인터의 잘못된 캐스팅이나 인자 타입 불일치 등 프로그램이 비정상적으로 동작하는 상황에서도 강력한 메모리 안전성을 확보하기 위해 설계되었습니다. 이 프로젝트는 일반적인 호출 상황에서 레지스터 기반의 인자 전달 방식을 사용하여 'Yolo-C'(표준 C)와 거의 대등한 효율성을 보여줍니다. 모든 호출 시 현재 Fil-C 스레드 포인터인 my_thread를 첫 번째 인자로 전달하며, 이를 통해 스레드 안전성과 메모리 검사 성능을 높였습니다. 만약 함수 시그니처가 다르거나 인자 개수가 부족할 경우, 시스템은 패닉(Panic)을 발생시키거나 정의된 GIMSO 의미론에 따라 안전하게 처리합니다. 결과적으로 Fil-C는 성능 저하를 최소화하면서도 C 언어의 고질적인 메모리 보안 취약점을 해결하려는 고도의 기술적 시도를 보여줍니다.
핵심 인사이트
- 레지스터 기반 최적화:
int x = 42,const char* y = "hello"와 같은 인자를 레지스터를 통해 전달하여 Yolo-C 수준의 최적화된 호출 속도를 구현함. my_thread포인터 활용: 모든 함수 호출 시 첫 번째 인자로 Fil-C 스레드 정보를 담은 포인터를 강제 전달하여 효율적인 상태 관리 및 보안 검사를 수행함.- GIMSO 의미론 준수: 최적화가 불가능하거나 위험한 상황에서는 일반 호출 규약으로 전환되며, 항상 엄격한 GIMSO(Generic ISO-standard Memory Safety Objects) 의미론을 따름.
주요 디테일
- 강력한 오류 대응: 함수 시그니처가 일치하지 않거나
va_list를 오용(Escape 등)할 경우 패닉을 발생시켜 메모리 파손을 사전에 차단함. - 포인터 범위 검증: 포인터 인자(
const char* y) 사용 시 해당 역량(Capability)의 범위(Bounds) 내에 있는지와 허용된 접근 방식인지를 즉시 검사함. - 3단계 최적화 구조: 일반 호출 규약(Generic), 레지스터 호출 규약(Register), 직접 호출 최적화(Direct call)의 단계별 접근을 통해 유연성과 성능을 조화시킴.
- 오버헤드 감소: 직접 호출 최적화를 적용하면 호출자가 피호출자의 시그니처 일치 여부를 매번 확인하지 않아도 되도록 설계되어 실행 속도가 향상됨.
향후 전망
- C 언어의 저수준 제어 능력과 메모리 안전 언어(Rust 등) 수준의 보안성을 동시에 확보함으로써, 기존 C 코드 베이스를 안전하게 마이그레이션하려는 시도에 큰 영향을 미칠 것으로 보입니다.
출처:hackernews
