프로그래밍에 관련된 가이드 문서를 읽던 중...

"LLVM에서 llvm-nm 툴을 이용하여 C++의 Mangled Name을 Demangled 할수 있다" 라는 말을 접하게 되었다.

하지만 아무리 읽어보아도 Mangled Name이 어떤 의미를 갖는지 잘 이해가 가지 않았다.

알아본 결과...

 

Mangled Name은 C와 C++ Linking 과정의 차이에서 알아볼 수 있었다.

  • C는 Overloading을 지원하지 않는 언어이다. 따라서 함수를 단순히 '함수의 이름(Symbol)으로 구분'하여 Linking을 한다.
  • C++은 Overloading을 지원하는 언어이다. 단순히 함수의 이름만으로 어떤 함수를 호출할지 '정확히 구분'할 수 없다. 함수의 이름과 더불어, Parameter의 종류, 개수의 정보도 포함시켜야 Linking시에 Linker가 적당한 함수를 묶어 준다. 이러한 Linkage(링크 규칙)를 'Mangled Name'이라고 부른다.

 

아직 탐험해보지 못한 신비한 세계가 많이 남아있는듯 하다. 

참조: http://blog.naver.com/supsup5642/60156876656