Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

9365
557
421924


태그 : ARMv8 요약보기전체보기목록닫기

1 2 3 4 5 6 7 8 9

[Arm프로세서] AAPCS: Armv8: SP(스택 포인터) 레지스터의 세부 동작

SP는 스택 포인터(Stack Pointer) 레지스터라고 하는데, Armv8 아키텍처에서는 SP_ELn로 표기합니다.SP_ELn 레지스터와 익셉션 레벨6장에서는 SP은 프로세스의 스택 공간 내에서 업데이트된다고 했는데, Armv8 아키텍처에서 명시된 SP_ELn은 어떤 개념인지 조금 헷갈립니다. SP_ELn은 쉽게 풀어서 다음 표와 같이 설명할 수 있...

[Arm프로세서] AAPCS: Armv8: AAPCS와 관련된 레지스터와 어셈블리 명령어 분석

지금까지 AAPCS와 관련된 레지스터인 SP_ELn, X30 그리고 X0-X7 레지스터에 대해 알아봤습니다. 또한 서브 루틴을 호출할 때 실행되는 어셈블리 명령어를 소개했습니다. 이번 절에서는 어셈블리 명령어를 분석하면서 AAPCS와 관련된 레지스터가 어떻게 사용되는지 알아보겠습니다. 배운 내용을 복습하는 차원으로 AAPCS와 연관된 레지스터의...

[리눅스커널][Arm64] 유저 공간(EL0)에서 시스템 콜 번호는 어떻게 지정할까?

이번에는 64비트 기반 리눅스 커널에서 구동되는 라즈비안에서 시스템 콜 번호를 확인해 보겠습니다.이를 위해 바이너리 유틸리티를 활용해 libc 라이브러리를 어셈블리 명령어로 분석할 필요가 있습니다.root@raspberrypi:/usr# find . -name libc.a./lib/aarch64-linux-gnu/libc.aroot@raspberrypi...

[Arm프로세서] AAPCS: Armv8: 브랜치와 복귀 명령어 - bl

Arm 스팩 문서를 보면서 BL 명령어에 대해 알아봅시다.C6.2.33 BLBranch with Link branches to a PC-relative offset, setting the register X30 to PC+4. It provides a hint that this is a subroutine call.[출처] DDI0487Fc_armv8_...

[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - ldp

Armv7 아키텍처에서 push 명령어를 실행한 후 함수가 종료되기 직전에 반드시 실행되는 명령어가 pop입니다. 마찬가지로 Armv8 아키텍처에서 stp 명령어를 사용해 스택에 레지스터를 푸시한 후, 함수를 종료하기 직전에 실행되는 명령어는 ldp입니다. Arm 스팩 문서에서 ldp 명령어 분석하기이번에도 Arm 스팩 문서를 보면서 ldp 명...

[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - sub

sub는 지정된 상수만큼 감소시키는 연산을 수행하는 명령어인데, stp 명령어 전 후로 'sub sp, sp, #16'와 같이 SP 레지스터의 값을 감소시키는 명령어를 볼 수 있습니다. 이 동작은 Armv7 아키텍처에서 배운 내용과 같으며, 다음과 같이 해석할 수 있습니다.    “함수 내에 선언된 지역 변수를 사용하기 위해 스택 공간...

[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - stp

SP 레지스터가 변경될 때 실행되는 명령어는 stp와 ltp입니다. 먼저 명령어의 정의를 소개하고, 예제 코드를 분석하면서 명령어의 동작 원리에 대해 알아봅시다.Armv7 아키텍처에서 SP 레지스터가 변경되면서 프로세스의 스택 공간에 레지스터를 푸시하는 명령어는 'push'입니다. Armv8 아키텍처에서는 push 대신에 stp 명령어를 사용해 push...

[Arm프로세서] AAPCS: Armv8: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어

arm 아키텍처의 세부 동작을 제대로 파악하려면, 해당 Arm 아키텍처에서 지원하는 어셈블리 명령어를 배워야 합니다. 이는 Armv8 아키텍처의 AAPCS64에도 마찬가지로 적용될 수 있습니다.이번 절에서는 Armv8 아키텍처의 AAPCS64와 연관된 명령어를 소개합니다.AAPCS와 연관된 명령어의 목록은 다음과 같습니다.표 7.4 Armv8 아키텍처에...

[Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인

이번 절에서는 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다.함수가 호출될 때의 세부 동작 원리 파악하기여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다.01 int add_func(int x, int y)02 {03    int result...

[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터

Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다.   * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다.   * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 &...
1 2 3 4 5 6 7 8 9