스택 오염이나 스택 오버플로우와 같은 문제를 만나면 그 원인을 어떻게 분석할까요? 사실 이런 유형의 문제를 분석하는 정형화된 방법은 없지만 문제를 분석하는 가장 대표적인 패턴은 다음과 같습니다.
프로세스가 실행될 때 가장 먼저 호출된 함수가 어느 스택 주소를 사용했는지 파악한다.
스택 데이터를 분석하면서 어떤 함수 호출 흐름으로 함수가 호출됐는지 점검한다.
가장 마지막에 호출된 함수가 어떻게 실행됐는지 파악한다.
이와 같은 단계를 거치면서 프로세스의 스택에 저장된 데이터를 분석하면, 어느 함수까지 정상적으로 호출되다가 어느 함수에서 문제가 생겼는지 파악할 수 있습니다.
스택 오염이나 스택 오버플로우가 생기면 GDB와 같은 디버깅 프로그램은 함수가 호출된 실행 흐름을 제대로 출력해주지 못합니다. AAPCS의 원칙에 따라 GDB 프로그램이 구현돼 있는데, 스택 오염이나 스택 오버플로우가 발생한 상황에서는 GDB도 콜 스택을 표현하지 못합니다.
결국 개발자들이 프로세스의 스택 공간에 저장된 데이터를 하나 하나 보면서 함수의 호출 흐름을 파악해야 합니다.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 11장: AAPCS(함수 호출 규약)' 카테고리의 다른 글
[Arm][AAPCS] 스택 오버플로우란 (0) | 2025.01.09 |
---|---|
[Arm][AAPCS] 프로세스의 스택 사이즈를 점검하는게 중요 (0) | 2025.01.09 |
[Arm][AAPCS] 스택 오염이 발생한 후에는 시스템은 어떻게 동작할까 (0) | 2025.01.07 |
[Arm][AAPCS] 스택 오염(Stack Corruption)이란 (0) | 2025.01.06 |
[Arm][AAPCS] 스택 오염이나 스택 오버플로우 현상을 만나면 개발자들은 왜 당황해할까? (0) | 2025.01.04 |