[커널 17차 A조] 13주차

2020.11.21 21:42

주영 조회 수:101

2020년 11월 21일

 

linux version : mainline 5.9

 

head.S 종료

 

SYM_FUNC_START_LOCAL(__primary_switched)

.macro kernel_ventry, el, label, regsize = 64

http://jake.dothome.co.kr/arm64-vector/

TBNZ x0, #THREAD_SHIFT를 하는 이유:

관련 commit: 872d8327ce8982883b8237b2c320c8666f14e561

TPIDRRO_EL0, EL0 Read-Only Software Thread ID Register

스택 오버플로우 발생 시, 오버플로우 스택 생성

 

__primary_switched

X29에는 값이 없으므로 0으로 넣는다. (함수 콜을 한 적이 없으므로)

관련 커밋 60699ba18b69ff210ed0304bc23f6c9d11d27a72

 

__efistub_memset        = __pi_memset;

기존에는 memset을 사용하지 않고, 직접 반복문을 사용하는 식으로 BSS를 초기화했는데, 이제 memset을 사용한다.

 

TST X23, ~(MIN_KIMG_ALIGN - 1) - 상위 비트가 0이라면 kaslr_early_init()함수를 실행하지 않았다는 의미이다.

즉, primary_switched를 처음 실행한 것이이다.

 

CONFIG_RANDOMIZE_BASE이 설정되어 있고 Randomize가 되어 있지 않으면

 

kaslr_early_init으로 진입하여, KASLR을 위한 무작위 값을 x23에 update 한다.

 

HEAD.S 종료

 

자료

https://docs.google.com/presentation/d/1mg9ZJGTZOdFBgcrqNyp_-M_dReu5wP59esIury_U57Y/edit?usp=sharing

 

XE Login