[커널 20차] 26주차
2023.11.21 23:53
2023.11.04 (26주차) - 약 9명 참여
- ELF Format 에 대해 공부하면 도움이 될듯함
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
__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)을 쓰는것으로 추측.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 스터디 정리 노트 공간입니다. | woos | 2016.05.14 | 626 |
248 | [커널 19차] 103 주차 | 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 | 743 |
231 | [커널 20차] 23주차 | 이민찬 | 2023.10.14 | 81 |
230 | [커널 20차] 22주차 | 이민찬 | 2023.10.08 | 76 |
229 | [커널 20차] 21주차 | 이민찬 | 2023.09.23 | 116 |
.