🚀 2026 스타트업 컨퍼런스

컴파일러 엔지니어 내부 메모 유출: 당신의 코드가 '제멋대로' 링킹되는 진짜 이유

컴파일러 엔지니어 내부 메모 유출: 당신의 코드가 '제멋대로' 링킹되는 진짜 이유

박준혁·2026년 1월 5일·3

컴파일러가 코드를 제멋대로 링킹하는 이유와 LLVM 이슈를 통해 본 엔지니어링의 본질. 편리함 뒤에 숨겨진 컴파일러의 코드 주입과 생존을 위한 집요함을 다룹니다.

솔직히 말해서, 형이 오늘 좀 취했다.

안주 하나 더 시켜봐라.

너네 개발 시작할 때 국비 학원이나 학교에서 뭐라고 배웠냐?

"우리가 코드를 짜면 컴파일러가 그걸 그대로 기계어로 번역해 줍니다."

개소리다.

현업에서 구르다 보면 알게 된다.

컴파일러는 번역가가 아니다.

제멋대로 내 코드에 양념 치고, 안 시킨 반찬 강제로 끼워 파는 악덕 식당 주인이다.

오늘 해커뉴스(Hacker News)에서 재미있는 글을 하나 봤다.

제목이 'LLVM 도움 요청'인데, 내용이 아주 가관이다.

글쓴이는 지금 새로운 프로그래밍 언어를 만들고 있단다.

꿈도 크지.

근데 자기만의 런타임(Runtime)을 만들려고 C 런타임(CRT)을 완전히 걷어내고 싶어 한다.

문제는 여기서 터진다.

LLVM이 말을 안 듣는다.

분명히 .ll 파일(LLVM의 중간 언어)에는 아무것도 없는데, 막상 .lib 라이브러리로 만들려고 하면 에러가 터진다.

_fltused라는 심볼이 중복 정의되었다는 거다.

글쓴이는 억울하다.

"내가 정의한 _fltused 말고는 넣은 적이 없는데?"

Clang, MinGW, LLVM 온갖 플래그를 다 써봐도 소용없다.

이 컴파일러 자식들이 끈질기게 CRT를 링크해 버리니까.

머리 터지겠지?

나도 SI 파견 나갔을 때 이런 경험 있었다.

분명히 내가 짠 로직은 깔끔한데, 빌드만 하면 알 수 없는 라이브러리가 튀어나와서 전체를 망가뜨리는 상황.

여기서 중요한 건 '클린 코드' 타령이 아니다.

도구가 어떻게 동작하는지 바닥까지 까보는 '집요함'이다.

댓글에 달린 고인물들의 답변을 봐라.

이게 진짜 엔지니어링이다.

"LLVM 문서 믿지 마라. 그냥 CRT 파일들을 물리적으로 삭제해 버려라. 그리고 누가 비명을 지르는지(에러 내는지) 호출 스택을 확인해라."

이거 봐라. 얼마나 무식하고 확실하냐?

더러운 해결책(Dirty Solution) 같지만, 이게 생존 기술이다.

또 다른 고인물의 분석이 진짜 소름 돋는다.

이 사람 말로는 .ll 파일, 즉 중간 단계 코드를 백날 들여다봐야 소용없단다.

왜냐?

컴파일러가 오브젝트 파일(.o 또는 .obj)을 만들 때 몰래 코드를 주입하기 때문이다.

네가 코드 안에서 부동소수점 연산을 조금이라도 썼다?

그럼 컴파일러는 "아, 얘 이거 필요하겠네" 하고 _fltused_ftol 같은 함수를 몰래 끼워 넣는다.

MSVC 라이브러리 같은 경우엔 '보안 쿠키(Security Cookie)' 같은 것도 슬쩍 넣는다.

이건 소스 코드에도 없고, 중간 언어 파일에도 안 보인다.

그냥 바이너리 생성 단계에서 납치당하는 거다.

이게 무서운 거다.

프레임워크나 컴파일러가 해주는 '마법'을 맹신하면 안 되는 이유가 여기 있다.

내가 야놀자 레거시 청산할 때도 그랬다.

ORM이 자동으로 생성하는 쿼리 믿고 있다가 DB CPU 100% 찍고 서비스 터진 적 한두 번이 아니다.

편리함 뒤에는 항상 대가가 따른다.

그래서 해결책이 뭐냐고?

그냥 컴파일러한테 징징대지 말고, 수동으로 링크(Manual Linking) 하란다.

.o 파일까지만 컴파일하고, 링커(Linker)를 직접 호출해서 네 입맛대로 조립하라는 거지.

자동화된 빌드 시스템 뒤에 숨지 말고, 직접 링커 옵션 까보라는 소리다.

형이 항상 말하지?

개발은 '재능'이 아니라 '깡'이다.

안 되면 될 때까지 파고들고, 문서를 넘어서 기계어까지 까보는 놈이 이기는 거다.

명문대 나온 주니어들이 "이건 컴파일러 버그 같은데요?" 하고 손 놓고 있을 때.

우리는 헥사 에디터 켜고 바이너리 뜯어봐야 한다.

그게 연봉 1,800만원에서 시작해서 여기까지 살아남은 내 생존 방식이다.

오늘 집에 가서 objdumpnm 명령어네로 네가 짠 코드 심볼 한번 덤프 떠봐라.

네가 모르는 손님들이 잔뜩 와서 술판 벌리고 있을지도 모른다.

자, 막잔 하고 일어나자.

내일 배포 준비해야지.

박준혁
박준혁그로스 엔지니어링 리드

지방대 철학과, 국비지원 출신. 첫 연봉 1,800만 원에서 시작해 유니콘 기업 리드가 되기까지. 코딩 재능은 없지만 생존 본능은 있습니다.

박준혁님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!