피드로 돌아가기![C로 장난치기, &((int*)-8)[3] 편](/_next/image?url=https%3A%2F%2Ftsewlmecqtvqphyhezcm.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fthumbnails%2F070ca9d4-0bb7-47c9-a9fd-5580de0eda5e.webp%3F&w=3840&q=75)
GeekNewsBackend
원문 읽기
C로 장난치기, &((int*)-8)[3] 편
C 언어의 언어적 허점을 이용한 비정형 코드 패턴 및 컴파일러 파싱 분석
AI 요약
Context
C 언어 표준 명세와 실제 컴파일러(GCC, TCC 등)의 파싱 동작 간 간극을 탐구. 표준 문법을 벗어난 기괴한 코드 패턴이 어떻게 실행 가능한 바이너리로 변환되는지 분석하는 기술적 유희 중심의 내용.
Technical Solution
- Forward Declaration의 극단적 활용을 통한 컴파일 시간 오류 억제 및 main 함수 선언 구조 설계
- 연산자 우선순위(Operator Precedence)의 맹점을 이용한 논리 연산자 및 함수 호출 결합
- Computed goto 패턴을 적용하여 함수 호출 오버헤드를 제거한 무조건 점프 기반의 제어 흐름 구성
- Union 배열과 Pointer Casting을 조합하여 타입 시스템을 우회하는 산술 연산 로직 구현
- K&R 문법과 현대 GCC 컴파일러의 Parameter Declaration 처리 방식 차이를 이용한 문법적 예외 도출
실천 포인트
1. 컴파일러마다 상이한 비표준 문법 처리 방식을 확인하여 코드 이식성 검토
2. 연산자 우선순위의 모호성을 제거하기 위해 명시적인 괄호 사용 습관화
3. 최신 컴파일러 버전에서 K&R 스타일의 구식 선언 방식이 거부되는지 확인