2018/09

    void __init paging_init() - 커널 페이지 초기화 하기

    [분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) 커널용 페이지 테이블 초기화 하는 함수입니다. 전체적인 내용을 분석 후 각 주요 함수에 대해 아래에 연속적으로 분석해 보도록 하겠습니다. 123456789101112131415161718192021222324252627282930void __init paging_init(void){ phys_addr_t pgd_phys = early_pgtable_alloc(); pgd_t *pgdp = pgd_set_fixmap(pgd_phys); map_kernel(pgdp); map_mem(pgdp); /* * We want to reuse the original swapper_pg_..

    [커널분석] arm64_memblock_init()

    리눅스 커널 분석은 4.16 버전을 기준으로 하였습니다. memblock은 리눅스 커널 부트업 단계에서 사용되는 메모리 할당자입니다. memblock은 메모리를 3가지 타입으로 나누어 관리하고 있는데요, 각각 memory, reserved, physmem 타입입니다. 먼저 memblock 자료구조에 대해 확인해보시죠. memblock은 3개의 type을 위한 memblock_type 구조체를 가지고 있고, 각 타입에는 region이란 영역을 관리하기 위해 memblock_region 구조체 포인터를 가지고 있습니다. memory, reserved 영역은 총 128개의 region을 가질 수 있으며 모두 사용하게 되면 2배로 크기가 늘어나 설정되어 집니다.[include/linux/memblock.h]12..

    [ELF] Symbol Resolution

    [ELF] Symbol Resolution

    ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 지난 글에 이어 이번 글에서는 Symbol Resolution 에 대해 알아보겠습니다. [이전 글] 2018/08/27 - [Linux/Debugging & Testing] - [ELF] ELF Header 2018/08/29 - [Linux/Debugging & Testing] - [ELF] Segment와 Program Header 2018/09/07 - [Linux/Debugging & Testing] - [ELF] Sections and the Section header table 2018/09/09 - [L..

    [ELF] Stripping an ELF object

    [ELF] Stripping an ELF object

    ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 지난 글에 이어 이번 글에서는 Stripping ELF 에 대해 알아보겠습니다. [이전 글]2018/08/27 - [Linux/Debugging & Testing] - [ELF] ELF Header2018/08/29 - [Linux/Debugging & Testing] - [ELF] Segment와 Program Header2018/09/07 - [Linux/Debugging & Testing] - [ELF] Sections and the Section header table Strip (?)ELF 파일을 Strip..

    [ARMv8] aarch64 프로세서 상태 레지스터(PSTATE)

    [ARMv8] aarch64 프로세서 상태 레지스터(PSTATE)

    PSTATE는 프로세서 상태 레지스터입니다. 이 레지스터를 이용해 프로세서의 상태를 알수도 있고 설정할 수도 있습니다. 아래 그림은 ARM Developer 페이지에서 가져온 그림입니다. PSTATE field를 정의해 놓았습니다. (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/BABICCBC.html) PSTATE의 각 비트가 하나 씩 어떤 행위를 하는지 정리해보겠습니다. N(Negative Condition Flag) : 연산의 결과 값이 음수인 경우 설정되는 비트 Z(Zero Condition Flag) : 연산의 결과 값이 0인 경우 설정되는 비트C(Carry Condition Flag) : 캐리 발생 시 설정되는 비트..

    [커널분석] parse_early_param()

    parse_early_param() 함수는 커널 부트업 타임에 사용하는 early parameter를 파싱해 오는 함수로 boot command line을 파싱해오는 역할을 합니다. parse_early_param()init/main.c1234567891011121314/* Arch code calls this early on, or if not, just before other parsing. */void __init parse_early_param(void){ static int done __initdata; static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata; if (done) return; /* All fall through to do_early_par..