c++filt 명령으로 맹글링되기 전의 C++/JAVA 심볼명 보기

NOTE
맹글링(mangling)이란 C++, JAVA와 같은 객체지향 언어에서 함수명을 클래스명과 인자 타입으로 변경하는 것을 말한다.
class Config {
public : 
    int OptionCheck(char *flag);
    int LineParse(char *line);
};

위와 같은 클래스가 존재할 때 각각의 멤버 메소드는

Config::OptionCheck(char*)  ==>  _ZN6Config11OptionCheckEPc
Config::LineParse(char*)  ==>  _ZN6Config9LineParseEPc

와 같이 클래스명, 함수명, 인자 타입을 이용하여 컴파일러 내부적으로 심볼명이 변경된다. 이러한 데에는 메소드 오버로딩, 가상함수 등을 지원하기 위한 목적을 가지고 있다.

이를 위해 맹글링된 심볼명, 맹글링 된 심볼명을 이용해 원본(디맹글링된) 함수명을 알고싶으면 다음과 같이 사용하면 된다.

  • c++filt {de-mangling symbold_name}: 맹글링 된 심볼명을 이용해 디맹글링 함수명을 얻는다.
  • nm {binary_file} | grep _ZN: 바이너리 파일의 맹글링 된 심볼명들을 확인한다.

'빌드&테스트도구 > 기타' 카테고리의 다른 글

readelf - ELF파일 정보 보기  (0) 2020.09.23
nm - 심볼 테이블 확인  (0) 2020.09.22
gprof - 프로파일 정보 확인  (0) 2020.09.21

+ Recent posts