armv8-a (9) 썸네일형 리스트형 [50% 할인쿠폰] 신입 개발자를 위한 Armv8-A 아키텍처 Overview (Arm 강의) 2025년 1월 초에 '신입 개발자를 위한 Armv8-A Architecture Overview (저자 직강)' 강의를 publish 했습니다.이 강의에 대해 관심 있는 분들을 위해, 아래와 같이 50% 할인 쿠폰을 공유드립니다. - 쿠폰: 19084-c1c99330c953- 강의 링크: https://inf.run/6AN4d(위 링크로 통해 접속해주시길 부탁드립니다) 이번에 'Armv8-A 아키텍처 Overview' 강의를 제작한 이유를 말씀드리면요: 이미 기존에 인프런에 Arm 아키텍처에 대한 60시간 이상 분량의 강의를 제작했습니다. 60시간 이상의 강의는 처음 Arm 아키텍처를 배우려는 분이 소화하려면 3개월 이상의 시간이 소요됩니다. 하지만 현실적으로 취업 준비생 분들과 주니어 개발자 분들은 1.. [Arm][AAPCS] 스택 오버플로우가 발생하는 이유 스택 오버플로우가 발생하는 이유는 '프로세스 스택의 범위를 벗어나 스택을 사용'하기 때문입니다. 스택 오버플로우를 유발하는 직접적인 원인은 다음과 같이 분류할 수 있습니다. 너무 많은 함수를 호출 조건없이 재귀함수를 호출 큰 사이즈의 배열을 지역 변수로 잡음 첫 번째로, 너무 많은 함수가 호출되면 스택 오버플로우가 일어날 수 있습니다. 함수를 호출하면 함수를 호출하기 직전의 스택 주소와 링크 레지스터의 값을 스택에 푸시하는데, 이 과정에서 프로세스의 스택을 사용합니다. 그런데 함수를 더 많이 호출할수록 이예 비례해 프로세스의 스택을 사용하는데, 너무 많은 함수가 호출되면 스택 오버플로우가 유발될 수 있습니다. 두 번째로, 스택 오버플로우가 일어나는 가장 흔한 패턴은 종료 조건 없이 재귀함수(.. [Arm][AAPCS] 스택 오염 문제는 어떻게 디버깅할까 스택 오염이나 스택 오버플로우와 같은 문제를 만나면 그 원인을 어떻게 분석할까요? 사실 이런 유형의 문제를 분석하는 정형화된 방법은 없지만 문제를 분석하는 가장 대표적인 패턴은 다음과 같습니다. 프로세스가 실행될 때 가장 먼저 호출된 함수가 어느 스택 주소를 사용했는지 파악한다. 스택 데이터를 분석하면서 어떤 함수 호출 흐름으로 함수가 호출됐는지 점검한다. 가장 마지막에 호출된 함수가 어떻게 실행됐는지 파악한다.이와 같은 단계를 거치면서 프로세스의 스택에 저장된 데이터를 분석하면, 어느 함수까지 정상적으로 호출되다가 어느 함수에서 문제가 생겼는지 파악할 수 있습니다. 스택 오염이나 스택 오버플로우가 생기면 GDB와 같은 디버깅 프로그램은 함수가 호출된 실행 흐름을 제대로 출력해주지 못합니다. .. [Arm][AAPCS] 스택 오염이 발생한 후에는 시스템은 어떻게 동작할까 스택 오염이 발생한 후에는 시스템은 어떻게 동작할까요? Arm 프로세서가 스택 오염을 바로 감지하고 익셉션을 유발하면 좋겠지만, 스택에 저장된 데이터가 오염되는 패턴을 예측할 수 없으니 어떻게 오동작할지 예상하기 어렵습니다. 가장 대표적인 증상은 'Invalid branch'인데, 스택에 저장된 링크 레지스터의 값이 오염됐으므로, 오염된 값으로 프로그램 카운터를 브랜치하다가 메모리 어보트 익셉션이 유발됩니다. 소프트웨어 개발자들이 사용하는 용어로 '크래시가 발생'하게 됩니다. 그림 8.1에서 스택 오염으로 오동작하는 상황을 어셈블리 명령어와 함께 설명하겠습니다.01 NSR:C0BDB698|E92D4800 schedule: push {r11,r14} ... 02 NSR:C0BDB718|E24BD00.. [Arm][AAPCS] 스택 오염(Stack Corruption)이란 스택에 저장된 레지스터나 변수의 값이 예상치 않은 값으로 변경되는 현상을 스택 오염이라고 합니다. 스택 오염이 발생하는 단계를 설명하기 전에 정상적인 과정으로 스택에 저장된 데이터를 저장하고 로딩하는 단계를 알아보겠습니다. 함수를 호출할 때는 일반적으로 다음과 같은 동작을 수행합니다. 링크 레지스터의 값을 스택 공간에 저장 함수에 위치한 어셈블리 명령어 실행 스택에 저장된 링크 레지스터의 값을 읽어 PC에 다시 로딩 만약 스택 공간에 저장된 링크 레지스터 값이 예상 밖의 다른 값으로 바뀌면 어떻게 동작할까요? 바뀐 다른 값(주소)을 PC에 로딩하게 되며, 정상적으로 서브 루틴으로 분기하는 대신 이상한 주소로 점프를 하게 됩니다. 스택 오염이 발생하는 단계을 세분화하면 다음과 같습니다. .. [Arm][AAPCS] 스택 오염이나 스택 오버플로우 현상을 만나면 개발자들은 왜 당황해할까? 실전 프로젝트에서 어떤 기능을 구현하는데 50%정도의 노력과 리소스가 들면, 대부분 최소 50% 이상은 버그를 수정하는데 시간을 할애합니다. 이 과정에서 수 많은 버그를 만나는데 잡기 쉬운 버그가 있고 분석을 시작하기 조차 어려운 버그도 있습니다. 처음 겪었을 때 가장 당황하는 버그가 스택 이슈(스택 오버플로우/스택 오염)로 인한 크래시입니다. 주요 증상은 아래와 같습니다. 갑자기 이상한 주소로 프로그램 카운터가 점프를 한다.지역 변수의 값이 이상한 쓰레기 값으로 바뀐다.갑자기 크래시나 폴트가 발생해 실행하던 프로그램이 멈춘다.이런 증상은 대부분 스택이 오염됐을 때 생기는 증상인데 AAPCS의 동작 원리를 모른채, 이런 현상을 겪으면 어디부터 분석을 시작해야 할 지 모릅니다. 그 이유는 무엇일까요? “바.. [Arm프로세서] 트러스트존(TrustZone): 논 시큐어 월드와 시큐어 월드란 트러스트 존의 개념을 이해하려면 먼저 논시큐어 월드와 시큐어 월드의 개념을 알아야 합니다. 논 시큐어 월드란논 시큐어 월드는 무엇일까요? 일반적인 운영체제 커널이나 애플리케이션이 동작하는 실행 환경입니다. [중요] 여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다. 보안 관점으로 논 시큐어 월드는 보안 수준이 낮아 해커의 공격을 당할 수 있는 실행 환경으로 볼 수 있습니다. 예를 들어 여러분이 사용하는 운영체제의 커널이나 애플리케이션은 논 시큐어 월드에서 실행됩니다. 그런데 여기까지 내용을 읽으면 논 시큐어 월드에서 실행되는 것이 구체적으로 무엇인지 감지 오지 않습니다. 이해를 돕기 위해 다음과 같은 예제 코드를 소개합니다. #include int main() { printf("h.. [Arm프로세서] 트러스트존(TrustZone)의 유래 트러스트존의 유래를 소개하려면 먼저 시스템의 공격을 방지하기 위한 시스템의 설계 과정에 대해 언급할 필요가 있습니다. 2000년 초부터 다양한 소프트웨어 기술들이 소개되고 발전되는데, 이에 비례해 해킹 기술이 업그레이드됩니다. 해커들이 다양한 소프트웨어 기법을 활용해 시스템을 공격하면서 해킹의 공격 루트가 다양해집니다. 애플리케이션에서 디바이스 드라이버 그리고 네트워트 패킷이나 서버를 통해 시스템을 침입하는 경로가 늘어난 것입니다. 많은 IT 업체들이 해킹으로 피해를 보면서 보안 수준이 높은 시스템 아키텍처의 필요성을 절감합니다. 그래서 IT업체들은 중요한 데이터를 암호화해서 저장하거나 해커의 공격으로 보호 받을 수 있게 시스템을 설계하게 됩니다. 고육지책으로 보안과 관련된 기능(Feature)를 .. 이전 1 2 다음