위키득계정 ↗
기술

Coccinelle

Coccinelle기술
주요 대상
C 소스 코드
규칙 언어
SmPL
대표 실행 명령
Spatch
주요 기능
코드 패턴 탐색과 소스 변환
Coccinelle은 C 코드에서 원하는 구조를 찾고 소스를 변환하는 도구다. SmPL이라는 의미 패치 언어로 일치 조건과 변경을 정의하며 API 변경에 따른 코드 수정이나 시스템 코드의 버그 탐색에 활용된다.

의미 패치로 변경 표현

원하는 일치 조건과 변환을 SmPL로 작성해 소스에 적용한다. 문자열을 일괄 치환하는 것보다 프로그램 구조를 고려한 변환을 표현하는 데 초점을 둔다. 기존 코드의 스타일을 유지하는 소스 간 변환과 리팩터링에 활용할 수 있다.

API 변경에 대응하기

라이브러리의 API가 바뀌면 사용하는 코드도 함께 바뀌어야 한다. 함수 이름을 바꾸거나 문맥에 맞는 인수를 추가하고 자료 구조를 재구성하는 작업을 규칙으로 표현한다. 처음에는 Linux 코드의 이런 연쇄 변경을 다루는 용도로 개발됐다.

탐색과 수정의 연결

원하는 형태를 찾는 기능을 시스템 코드의 버그 탐색과 수정에도 사용할 수 있다. Spatch에 의미 패치와 대상 소스를 전달해 변환 결과를 얻는 흐름이다. 규칙에 맞는 코드를 찾는 것과 수정이 의도대로 동작하는지 검증하는 것은 별도의 단계다.

관련 문서

Semgrep / Clang / GCC