Linux

    [커널분석] Architecture 별 분석을 위한 설정 (ctags & cscope)

    리눅스 커널 분석 시 많이 사용하는 툴로 ctags와 cscope를 많이 사용합니다. 하지만 분석 시 다양한 architecture에 따라 동일 네이밍의 함수나 매크로 등으로 인해 분석하기 쉽지 않은데요. 쉽게, 해결할 수 있는 방법을 알려드립니다. 리눅스 커널에서 스크립트 형태로 tags와 cscope란 옵션을 제공하고 있습니다.만약 arm64를 기반으로 분석한다고 하면 아래와 같이 설정해 주세요. $ make tags ARCH=arm64 $ make cscope ARCH=arm64 내부적으로 script를 작성해 놓았기 때문에 해당 Architecture에 해당하는 코드만 분석할 수 있습니다.

    void __init early_fixmap_init(void) (작성중...)

    [주의] - 코드 분석 시 잘못된 부분도 있을 수 있으므로, 참고만 부탁드립니다. [분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) [사전 지식]fixmap영역은 컴파일 타임에 가상 주소공간이 이미 결정된 매핑 메모리 영역입니다. 따라서 매핑된 메모리 영역을 사용하기 위해서 fixmap영역을 초기화 해줄 필요가 있습니다. 리눅스 커널은 pgd, pud, pmd, pte를 이용하여 페이징 기법을 제공하고 있습니다. pgd와 pud, pmd, pte 중 무엇을 사용하느냐에 따라 단계별 페이징으로 나뉠 수 있습니다. pgd -> pte을 사용하는 2단계 페이징, pgd -> pmd -> pte를 이용한 3단계 페이징, 4가지 모..

    [gdb] The GNU Debugger : 3. Stack 정보 분석하기

    스택은 현재 프로세스가 실행 중인 코드가 어디인지 확인할 수 있기에 매우 중요한 정보라고 할 수 있습니다. gdb에서는 종료되지 않은 함수를 하나의 frame이라고 합니다. 각 프레임은 스택에 쌓여있는 함수, 아직 종료되지 않은 함수라고 보시면 됩니다. 각 프레임은 Caller와 Callee의 관계를 구성하게 되죠. 이번 예제는 아래 코드를 사용하겠습니다. #include #include void func4(int a, int b) { printf("sum : %d\n", a + b); } void func3(int a, int b) { return func4(a, b); } void func2(int a, int b) { return func3(a, b); } void func1(int a, int b..

    [gdb] The GNU Debugger : 2. 중단점 설정하기

    중단점 설정은 gdb에서 매우 중요한 기능입니다. 여기서는 간단한 명령어 설명을 한 후 다음에서 중단점을 사용해 분석하는 방법에 대해 설명드리겠습니다. 중단점 (Break Point) 설정하기 (break / b)중단점은 함수이름이나 코드 라인번호 등을 통해 설정할 수 있습니다. 여러분들이 중단점을 설정 후 프로그램을 실행하면 해당 위치가 만약 수행된다면 자동적으로 해당 지점에서 실행이 중단됩니다. 이 시점의 모든 정보를 여러분들이 확인할 수 있습니다. 이 중단점에서 즉 해당 상태에서 변수나 스택구조, 어셈블리 등 다양한 정보를 얻을수도 있고 여러 동작을 조작할 수도있습니다. (gdb) b sumBreakpoint 1 at 0x400570: file example1.c, line 6. 위의 예제 코드에서..

    [gdb] The GNU Debugger : 1. Introduction

    [gdb] The GNU Debugger : 1. Introduction

    Introduction좋은 디버거는 문제를 해결하고, 프로그램을 좀 더 쉽게 개발하고 리버싱을 하는 등 다양한 방안에서 개발자에게 도움을 주는 도구 입니다. 많은 플랫폼에서 그에 맞춰 좋은 디버거들이 존재하고 개발자들은 자신에게 맞는 디버거를 사용하고 있습니다. 그 중 GDB(The GNU Debugger)는 많은 플랫폼, x86, x86-64, arm, aarch64, mips, SPARC등 다양한 아키텍처 에서 동작하는 UNIX 시스템에서 사용할 수 있는 디버거입니다. C / C++ 로 작성된 프로그램에서 사용할 수 있습니다. 처음 GDB를 공부하시는 분들이 많이 어려워 하시는게 언제 GDB를 사용해야 하는지 입니다. 디버거는 여러분들이 작성하는 프로그램에서 발생하는 문제를 해결하는데 매우 도움을 주..

    [ps] ps로 thread 정보 확인하기

    ps를 이용해 thread 정보를 확인하고자 아래 옵션을 사용한다. -L : threads 정보를 보여주는 옵션이다. 123456$ ps -eLf.....seungha+ 2929 1 2929 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --loginseungha+ 2929 1 2930 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --loginseungha+ 2929 1 3042 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login.....Colored by Color Scriptercs 위 처럼 출..