2011. 5. 3. 11:45


어제 함수 호출 규약에 대해서 잠시 정리하면서 아마 필자가 Name Decoration이라는 단어가 나왔을 것이다.
함수 호출규약 : http://ffun.tistory.com/entry/Calling-Convention-호출-규약

어제 나온김에 정리하려 했지만 시발 존나 귀찮아서 오늘 한다.

일단 Name Mangling 또는 Name Decoration이라고 불리는 이 현상이 무엇인가 인터넷을 시발 존나 빠르게 한번 뒤져본다.
위키백과에 시발 영어로 뭐라 존나존나 떠들어 놨는데, 난 영어 까막눈이라 잘 모르것고 대충 인터넷 찾아보면 C++의 3가지 특징 중 하나인 다형성 때문에 생기는 함수들의 이름이 어떤 특정한 규칙을 갖고 바뀌는 현상이 생기는데 이걸 갖고 이름 맹글링, 또는 이름 장식 이라고 한다.


존나 쉽네. 그냥 이름 바뀌는 현상이다. 그럼 이런 현상이 구체적으로 어떻게 일어나냐?
어제 블로깅 했던 호출규약에 따라 이름이 바뀌는 규칙이 달라진다.

시발 이거 호출 규약마다 다 테스트 해볼라면 존나 헤깔리니까 대충 5가지 패턴으로 한다.
1. C 형식
2. C 형식의 __cdecl
3. C 형식의 __stdcall
4. C 형식의 __fastcall
5. C++ 형식


결과 도출 방법 - 해당 Dll 파일의 정보를 빼 내 오는 방법.
참고로 필자의 컴파일러는 Embarcadero 사의 C++ Builder 2010이다. Embarcardero에서 제공하는 impdef 유틸리티를 사용하여 dll 파일 내부의 정보를 def 파일로 추출한다.

저렇게 해서 def 파일을 뽑았다. 그래서 그 파일을 에디터로 까보면..

보이냐? 결과는 저렇다.
아 시발.. 내가 지금 테스트를 제대로 한건지 아닌지도 모르것네 ㅋㅋ
만약 내가 테스트를 잘못한거라면 지적 바란다. 대신 지적하는 새끼는 충분한 지식이 있는 상태로 지적해야 할 것이다.

여튼 내가 제대로 테스트를 한건지 아닌건지 몰라 참조 사이트 하나 올려준다.
Name Mangling(Name Decoration) 참고 : http://blog.naver.com/readdie?Redirect=Log&logNo=70093589476

시발 존나 정리 잘해놨더라.. 보기 좋게 그림과 설명이 적절했으면 더 좋았을껄...



Posted by 뿌직