ARM

포스트: 173|조회수: 0|TERM
Items

Posts

173 posts

[ARMv7] 익셉션 벡터 처리 방식(vector_und 분석)

Guillermo Austin Kim|2020년 8월 14일

이번 포스트에서는 리눅스 커널에서 undefined instruction 익셉션을 처리하는 방식을 설명합니다. 리눅스 커널에서 undefined instruction 익셉션이 발생하면 ARM 프로세서는 프로그램 카운터를 0xFFFF0004 주소로 변경합니다.아래는 익셉션 벡터 테이블의 구현부인데 02번째 줄을 눈여겨봅시다. 01 NSR:FFFF0000|EA0003FF b 0xFFFF1004 ; vector_rst 02 NSR:FFFF0004|EA000465 b 0xFFFF11A0 ; vector_und03 NSR:FFFF0008|E59FFFF0 ldr pc,0xFFFF100004 NSR:FFFF000C|EA000443 b

[ARM] ARMv7: 익셉션 벡터 테이블의 구현 방식 코드 분석

Guillermo Austin Kim|2020년 8월 14일

이번 포스트에서는 ARM 아키텍처의 핵심 개념 중 하나인 익셉션 벡터의 구현 방식에 대해 살펴보겠습니다. ○ ARMv7(Aarch32) ○ ARMv8(Aarch64) ARM 아키텍처에서 정의하는 익셉션의 타입은 3가지로 분류할 수 있습니다. ○ 메모리 어보트(Memory Abort) ○ 인터럽트(Interrupt) ○ 소프트웨어 인터럽트 ARMv7 아키텍처의 익셉션 벡터 테이블 위와 같은 익셉션이 발생하면 익셉션 종류별로 지정된 주소로 프로그램 카운터가 변경됩니다.다음은 리눅스 커널(non-secure)에서의 익셉션 벡터 테이블을 나타냅니다. 오프셋 익셉션 종류--------------------------------------- 0x0

[ARM] ARM 아키텍처의 주요 개념: 어셈블리 명령어

Guillermo Austin Kim|2020년 8월 11일

이번 포스트에서는 ARM 아키텍처를 이루는 주요 개념에 대해서 설명하겠습니다.ARM 아키텍처를 배우려면 수 많은 세부 기능을 배워야 하는데 그 중 핵심을 요약하면 다음과 같습니다. ○ ARM 어셈블리 명령어 ○ 레지스터 세트 ○ 익셉션 ○ 함수 호출 규약 이 중에서 먼저 ARM 어셈블리 명령어에 대해서 살펴보겠습니다. ARM 프로세서에게 어셈블리 명령어란 우리가 외국인이 어떤 사람인지 잘 알려면 외국어를 배워야 합니다.외국어를 직접 말하면서 외국인와 대화를 해야 그 사람의 성격을 제대로 알 수 있습니다. 그렇다면 프로그래머 입장에서 ARM 프로세서가 어떤 동작을 하는 지 파악하려면 무엇을 배워야 할 까요?바로 ARM 어셈블리 명

[ARM][ARMv7] 리눅스 커널: ARM 모드를 설정하는 어셈블리 코드 분석

Guillermo Austin Kim|2020년 7월 22일

ARM 프로세서의 주요 용법을 배우기 위해 리눅스 커널만큼 좋은 리퍼런스 자료가 없는 것 같다.ARM 사의 개발자들이 리눅스 커널에 자신의 코드를 메인라인 시키기 때문이다. 이번에는 리눅스 커널에서 32비트 ARMv7 아키텍처에서 ARM의 모드를 읽어 제어하는 루틴을 살펴보자. 먼저 다음 코드를 보자. arch/arm/include/uapi/asm/ptrace.h #define USR_MODE 0x00000010#define SVC_MODE 0x00000013#define FIQ_MODE 0x00000011#define IRQ_MODE 0x00000012#define MON_MODE 0x00000016#define ABT_MODE 0x00000017#define HYP