[커널 20차] 26주차

2023.11.21 23:53

brw 조회 수:48

 

2023.11.04 (26주차) - 약 9명 참여

- ELF Format 에 대해 공부하면 도움이 될듯함

 (https://plas.tistory.com/43)

 

Q: offset + kaslr displacement -> addend + kaslr displacement 

대신에 offset -> addend 먼저 변경한후 그 이후에 kaslr displacement 를 해도 결과가 동일한지?

 

A: 동일하지 않다. offset과 addend 모두 kaslr displacement가 적용된 값이므로, offset에 해당하는 지점을 addned로 올바르게 변환하려면, 두 값이 모두 동일하게 displacement 되어 있어야 한다. 만약 하나의 값만 displacement 되어 있다면, 변환하고자(변환되는) 다른 값은 displacement가 적용되지 않았으므로, 의도하지 않은 공간으로 변환이 이루어진다.

 

*Elf64_relr 

// Relocation entry without explicit addend or info (relative relocations only). 

typedef Elf64_Xword Elf64_Relr; // offset/bitmap for relative relocations

 

          adr_l   x9, __relr_start

          adr_l   x10, __relr_end

 

 2:      cmp     x9, x10

          b.hs    7f

          ldr     x11, [x9], #8                   //x11 = x9; x9 += 8; relr_start는 8바이트 구조라서 

                                                          다음 엔트리를 가리키기 위해 +8 을 해줌. 상세구조는                             

                                                          확인필요

          tbnz    x11, #0, 3f                     // branch to handle bitmaps

          add     x13, x11, x23

          ldr     x12, [x13]                      // relocate address entry

          add     x12, x12, x23

          str     x12, [x13], #8                  // adjust to start of bitmap

          b       2b


 

Q. __relocate_kernel 심볼의 아래 두줄은 언제 쓰이는지 ? x11은 더 밑에 코드에서 TEMP처럼 쓰이는것 같음.

move_q x11 KIMAGE_VADDR 

add x11 x11 x23 

 

레거시코드이거나, 또는 미처 확인하지 못한 부분에서 사용될 가능성이 있음


 

Q: ldr     x8, =__primary_switched 에서 =의 역할은?

A:Literal Pool 이며,상수들이 담겨있는 메모리 특정영역(pool)을 의미

TODO

(damduc.tistory.com/336)

__primary_switch:

   0x0000000040f78310:  adrp    x1, 0x41fbb000      

   0x0000000040f78314:  bl      0x40f78248           ; __enable_mmu

   0x0000000040f78318:  bl      0x40f782c8           ; __relocate_kernel

   0x0000000040f7831c:  ldr     x8, 0x40f78338       ; =__primary_switched

   0x0000000040f78320:  adrp    x0, 0x40200000       ; __PHYS_OFFSET

   0x0000000040f78324:  br      x8

   ...

   0x0000000040f78338:  .inst   0x114b0330      

   0x0000000040f78338:  .inst   0xffff8000

__primary_switched:

   0xffff8000114b0330 <+0>:     adrp    x4, 0xffff800011a70000

   0xffff8000114b0334 <+4>:     add     sp, x4, #0x4, lsl #12

   0xffff8000114b0338 <+8>:     adrp    x5, 0xffff800011a83000 <envp_init+104>

0x40f78338 주소에 해당하는 상수값 0xffff_8000_114b_0330(가상주소영역)을 x8에 저장해준다.

가상주소영역을 사용하기 위해 =_ (literal pool)을 쓰는것으로 추측.



 

rOic5mGoFyDqXNMl9nVWZdHxR-jl0V2L8mHVtL7B

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 626
248 [커널 19차] 103 주차 new Min 2024.04.28 4
247 [커널 20차] 48주차 무한질주 2024.04.25 22
246 [커널 19차] 102 주차 Min 2024.04.20 37
245 [커널 19차] 101 주차 Min 2024.04.13 63
244 [커널 19차] 100 주차 Min 2024.04.13 16
243 [커널 19차] 99 주차 Min 2024.03.30 82
242 [커널 19차] 98 주차 Min 2024.03.23 55
241 [커널 19차] 97 주차 Min 2024.03.16 50
240 [커널 19차] 96 주차 Min 2024.03.14 32
239 [커널 19차] 95 주차 [2] Min 2024.03.03 111
238 [커널 20차] 32주차 brw 2023.12.16 386
237 [커널 20차] 29주차 brw 2023.11.27 161
236 [커널 20차] 27주차 brw 2023.11.21 86
» [커널 20차] 26주차 brw 2023.11.21 48
234 [커널 20차] 28주차 이민찬 2023.11.19 64
233 [커널 20차] 25주차 이민찬 2023.10.30 120
232 [커널 20차] 24주차 이민찬 2023.10.22 738
231 [커널 20차] 23주차 이민찬 2023.10.14 81
230 [커널 20차] 22주차 이민찬 2023.10.08 76
229 [커널 20차] 21주차 이민찬 2023.09.23 116
XE Login