clang++에서의 상속 패턴
2025년 6월 25일
https://lief.re/blog/2021-04-08-profiling-cpp-code-with-frida-part2/?utm_source=chatgpt.com
개요 #
facebook 앱 분석 중 복잡한 함수 호출 패턴을 발견하여 정리하기 시작했다. 이 문서에는 분석 중 발견한 itanium abi 의 가상함수 호출에 대한 어셈 패턴을 정리하고자 한다.
itanium #
Android, iOS, unreal(android, ios, linux), unity(android, ios) 플랫폼은 LLVM을 사용하여 컴파일한다. 컴파일부터 링킹하는 과정까지 여러 도구(컴파일러, 어셈블러, 링커 등)가 필요한데 이걸 모아둔 툴체인의 일부가 LLVM이고 여기에서 사용되는 컴파일러가 clang이다.
clang은 기본적으로 itanium abi를 지원하지만, android와 ios는 플랫폼에 맞게 abi를 커스터마이징 하고있다. (objective-c 런타임, 예외처리 매커니즘 등)
기본 상속 #
기본 상속에서의 패턴이다. 상속을 받고나면 vtable이 생성되며
다중상속 #
한 클래스가 둘 이상의 클래스를 동시에 상속(인터페이스가 아님) 받을 수 있는 기능인데 이렇다보니 여러 문제가 생긴다.