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 |