2016-09-28 3 views
1

다형성 클래스 인 VC++에서 개체의 this 포인터 (vtable을 가리킴) 위에 RTTI 정보를 가리키는 추가 포인터가 있습니다."this"포인터에서 gcc의 C++ 객체의 RTTI 정보를 확인하는 방법은 무엇입니까?

GCC의 컴파일 된 코드를 알고 싶습니다. 객체가 RTTI 정보와 관련된 추가 정보를 저장하고 C++ 코드를 방문하는 방법이 있습니까? 아니면 고정 오프셋/위치를 통해 gdb를 방문 할 수 있습니까?

감사합니다.

+0

[typeid를보세요.] (http://en.cppreference.com/w/cpp/language/typeid) – user4581301

답변

1

다형성을위한 C++ 객체 레이아웃은 구현에 따라 다릅니다. 예 :

는 저자에 따르면, 모두 구현은 단지 VTABLE 앞에 위치하는 RTTI 포인터를 사용합니다.

둘 다 vtable의 첫 번째 요소로 RTTI 포인터가있는 Bjarne Stroustrup ("디자인 및 진화의 C++"참조)이 고려한 원래의 메모리 레이아웃과 다릅니다. 왜 그들이이 단순한 생각에서 벗어 났는지는 내게 명확하지 않습니다. 아마도 이는 호환성 문제로 인한 것이므로 RTTI는 in 1998으로 만 소개되었습니다. Visual C++의 경우 약간의 특허 고려 사항이있을 수 있습니다. 그 당시 Microsoft's patent은 자체 vtable 레이아웃을 보호했습니다.

이 모든 것은 휴대 할 수 없으므로 코드를 분석하거나 디버깅 코드를 작성하려는 경우에만 유용합니다. 휴대용 소프트웨어를 작성하려면 type_infotypeid()으로 제한하십시오.

관련 문제