본문 바로가기

전체 글

(502)
[RISC-V] 익셉션(Exception)의 기본 동작 원리 (RISC-V 강의) RISC-V 아키텍처에서 익셉션(Exception)의 기본 동작 원리를 설명하는 콘텐츠입니다. 익셉션이 유발되면 익셉션의 종류 별로 정의된 주소로 프로그램 카운터로 분기합니다. 관련 강의 영상:  #RISC-V #Exception #익셉션 #risc-v
[RISC-V] 익셉션(Exception)의 종류 (RISC-V 강의) RISC-V 아키텍처에서 익셉션(Exception)의 동작 방식을 분석하기 앞서서, 익셉션의 종류를 파악할 필요가 있습니다. 이번 컨텐츠에서는 RISC-V 아키텍처에서 익셉션의 종류를 설명합니다.  관련 영상:  #RISC-V#Exception#익셉션#risc-v
[Arm][AAPCS] 스택 오버플로우가 발생하는 이유 스택 오버플로우가 발생하는 이유는 '프로세스 스택의 범위를 벗어나 스택을 사용'하기 때문입니다. 스택 오버플로우를 유발하는 직접적인 원인은 다음과 같이 분류할 수 있습니다.   너무 많은 함수를 호출  조건없이 재귀함수를 호출  큰 사이즈의 배열을 지역 변수로 잡음 첫 번째로, 너무 많은 함수가 호출되면 스택 오버플로우가 일어날 수 있습니다. 함수를 호출하면 함수를 호출하기 직전의 스택 주소와 링크 레지스터의 값을 스택에 푸시하는데, 이 과정에서 프로세스의 스택을 사용합니다. 그런데 함수를 더 많이 호출할수록 이예 비례해 프로세스의 스택을 사용하는데, 너무 많은 함수가 호출되면 스택 오버플로우가 유발될 수 있습니다. 두 번째로, 스택 오버플로우가 일어나는 가장 흔한 패턴은 종료 조건 없이 재귀함수(..
[Arm][AAPCS] 스택 오버플로우란 프로세스에게 부여된 스택의 경계선을 넘어서서 스택에 데이터를 저장하거나 로딩하는 동작을 '스택 오버플로우'라고 하며, 그 결과 시스템은 대부분 오동작합니다.  이번에는 다음 그림을 보면서 스택 오버플로우가 무엇인지 자세히 알아봅시다. 그림 8.2 스택 오버플로우가 발생하는 상황 프로세스에게 할당된 스택 공간의 범위는 0xFFFFFF8008058000--0xFFFFFF800805C000이며, SP 레지스터의 범위는 0xFFFFFF8008058000--0xFFFFFF800805C000 구간입니다. 프로세스의 스택은 높은 주소에서 낮은 주소 방향으로 사용되는데 그림 8.2의 박스 왼쪽에 보이는 화살표 방향은 함수가 호출되는 실행 흐름을 나타냅니다. 화살표의 아랫 부분에서 윗 부분을 눈으로 따라가 보면 __ha..
[Arm][AAPCS] 프로세스의 스택 사이즈를 점검하는게 중요 이에 못지 않게 점검해야 할 중요한 정보는 프로세스의 스택 사이즈입니다. 여러분이 작성한 코드가 실행되는 운영체제나 RTOS마다 프로세스에게 할당하는 스택 사이즈도 약간의 차이가 있기 때문입니다. 예를 들어 부트로더로 사용되는 LK(Little Kernel)은 4096(0x1000) 바이트만큼 프로세스의 스택을 설정하고, 범용 운영체제로 분류되는 리눅스 커널은 프로세스의 스택 사이즈를 0x2000(32비트 기준)로 설정합니다. 프로세스의 스택 사이즈를 상대적으로 크게 할당하는 운영체제에서 개발자는 지역 변수로 배열의 크기를 별 생각 없이 크게 잡습니다. 크게 잡아도 별 문제가 일어나지 않기 때문입니다. 그런데 같은 코드를 프로세스에게 작은 사이즈의 스택을 할당하는 RTOS에 적용하면 문제가 될 수 있습니..
[Arm][AAPCS] 스택 오염 문제는 어떻게 디버깅할까 스택 오염이나 스택 오버플로우와 같은 문제를 만나면 그 원인을 어떻게 분석할까요? 사실 이런 유형의 문제를 분석하는 정형화된 방법은 없지만 문제를 분석하는 가장 대표적인 패턴은 다음과 같습니다.  프로세스가 실행될 때 가장 먼저 호출된 함수가 어느 스택 주소를 사용했는지 파악한다.  스택 데이터를 분석하면서 어떤 함수 호출 흐름으로 함수가 호출됐는지 점검한다.  가장 마지막에 호출된 함수가 어떻게 실행됐는지 파악한다.이와 같은 단계를 거치면서 프로세스의 스택에 저장된 데이터를 분석하면, 어느 함수까지 정상적으로 호출되다가 어느 함수에서 문제가 생겼는지 파악할 수 있습니다. 스택 오염이나 스택 오버플로우가 생기면 GDB와 같은 디버깅 프로그램은 함수가 호출된 실행 흐름을 제대로 출력해주지 못합니다. ..
[Arm 아키텍처] DSB 배리어(Barrier) (Arm 강의) Arm 아키텍처에서 제공하는 배리어 중에서 DSB 배리어도 중요합니다. DSB 는 DMB와 ISB의 기능을 합쳐 놓은 배리어입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있어요.
[Arm 프로세서] ISB 배리어 (Arm 강의) Arm 아키텍처에서 제공하는 배리어에서 ISB 배리어도 많이 사용됩니다. ISB 배리어를 사용하면 메모리에 접근하는 STR, LDR 명령어 이외의 다른 명령어 간의 순서를 보장합니다. 더 자세한 내용은 아래 강의에서 확인할 수 있어요.