Go 어셈블리 버그: 두 가지 경우의 프레임 포인터 충돌

2025-01-04

이 게시글에서는 프레임 포인터를 덮어쓴 잘못된 어셈블리 코드로 인해 발생한 두 가지 Go 크래시를 분석합니다. 하나의 버그는 go-metro 라이브러리 내에서 프레임 포인터 레지스터(AMD64의 BP)를 덮어썼고, 다른 버그는 Apache Arrow의 ARM64 어셈블리에서 프레임 포인터를 스택에 잘못 저장했습니다. 저자는 레지스터와 스택의 수동 조작을 피하기 위해 Avo와 같은 어셈블리 생성기를 사용할 것을 권장합니다. 이 글에서는 ABI와 호출 규칙을 자세히 설명하고, 유사한 문제를 방지하는 방법에 대한 통찰력을 제공하며, Go 어셈블리 가이드라인을 이해하고 준수하는 중요성을 강조합니다.

더 보기