Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11206
629
98793


태그 : 시스템호출 요약보기전체보기목록닫기

1 2

[리눅스커널][시스템콜] strace로 시스템콜 디버깅하기

리눅스에서는 시스템콜 디버깅을 위한 strace라는 훌륭한 툴을 제공합니다.유저 프로그램이 실행할 때 어떤 시스템콜을 실행했는지 확인할 수 있습니다. strace 이란 툴은 리눅스에서 제공하는 강력한 시스템 트레이싱 기능입니다. 물론 라즈베리파이에서도 기본으로 설치되어 있어 바로 사용할 수 있습니다.strace는 다음 기능을 제공합니다.1. glibc(...

[리눅스커널][시스템콜] ftrace로 시스템 콜 인자 디버깅하기

ftrace는 시스템 콜 디버깅을 위한 이벤트를 제공합니다.sys_enter, sys_exit 이라는 ftrace 이벤트를 쓰면 시스템 콜 동작을 확인할 수 있습니다.위 이벤트를 키면 다음과 같은 시스템 콜 디버깅 정보를 출력합니다.1> 시스템 콜 번호2> 시스템 콜이 실행와 종료 시각3> 시스템 콜 핸들러 함수로 전달된 인자sys_en...

[리눅스커널] 시스템 콜/디버깅: ftrace 시스템 콜 이벤트 소개하기

시스템 콜 관련 코드를 분석하다 보면 다음과 같은 의문이 생길 수 있습니다.  평소 시스템 콜은 얼마나 자주 발생할까? 시스템 콜 번호는 어떻게 확인할 수 있을까?ftrace 메시지를 보면 이런 궁금증을 해소할 수 있습니다. ftrace에서는 시스템 콜 동작을 트레이싱하는 다음과 같은 이벤트를 제공합니다. sys_enter sys_exi...

[리눅스커널][시스템콜] 전처리 코드에서 시스템콜 핸들러 확인하기

이렇게 시스템 콜 핸들러 함수는 커널에서 제공하는 매크로 함수로 구현이 됐습니다. 이번에는 전처리 코드에서 시스템 콜 핸들러 구현부를 찾는 방법을 소개합니다. 먼저 커널 소스에서 sys_read() 시스템 콜 핸들러 함수를 찾는 방법을 알아볼까요?  다음 명령어를 입력해봅시다. root@raspberrypi:/home/pi/r...

[리눅스커널] 시스템 콜: ret_fast_syscall 레이블 복귀 과정 알아보기

시스템 콜 실행 완료 후 무슨 일을 할까?시스템 콜을 수행하면 시스템 콜 핸들러를 통해 가상 파일시스템이나 커널 프로세스 함수를 실행합니다. 이후 시스템 콜 종류에 따라 시스템 콜 핸들러 하부 루틴을 수행하고 유저 공간 복귀합니다. 이번 절에서는 이 과정에서 실행하는 ret_fast_syscall 레이블 처리 과정에 대해 살펴보겠습니다. ret...

[라즈베리파이] 시스템 콜 - 매개 변수 점검(시스템 콜 핸들러)

리눅스 커널 시스템 콜 핸들러 인터페이스 함수를 열어 보면 수 많은 예외 처리 코드를 볼 수 있습니다. 유저 모드에서 시스템 콜을 호출할 때 잘못된 인자(스트링 갯수, 메모리 주소)를 전달할 수 있기 때문입니다. 먼저 write() 이라는 리눅스 시스템 저수준 함수를 살펴보겠습니다.write() 함수를 호출할 때는 다음 6번 째 줄 코드와 같이...

[라즈베리파이] 시스템 콜 - 시스템 콜 핸들러는 어떤 동작을 할까?

유저 공간에서 시스템 콜을 발생하면 커널 공간으로 모드가 스위칭된 다음 vector_swi 이란 소프트웨어 인터럽트 벡터를 실행하는 부분까지 살펴봤습니다. vector_swi 레이블에서 시스템 콜 테이블에 접근해서 시스템 콜 핸들러를 호출합니다.시스템 콜 핸들러에서는 어떤 동작을 수행할까요?시스템 콜 핸들러는 시스템 콜 종류에 따른 처리를 합니다. 가상...

[리눅스커널] 시스템 콜: 커널 공간에서 시스템 콜 테이블 확인하기

이전 소절에서 알아본 시스템 콜 동작은 다음과 같이 정리할 수 있습니다.     "유저 공간에서 전달된 시스템 콜 번호로 시스템 콜 테이블에 저장된 시스템 콜 핸들러      함수로 분기된다."그런데 위 문장에서 '시스템 콜 테이블' 은 리눅스 커널 어느 코드일까요?    ...

[라즈베리파이] 시스템 콜 - 소프트웨어 인터럽트 벡터(vector_swi) 코드 분석

커널 공간에서 시스템 콜 실행 출발점은 vector_swi 레이블입니다. svc 명령어를 실행하면 소프트웨어 인터럽트 벡터인 vector_swi 레이블으로 브랜치하기 때문입니다. vector_swi 레이블 어셈블리 코드 분석으로 ARM 리눅스 커널에서 시스템 콜이 어떻게 동작하는지 살펴봅시다.vector_swi 레이블 어셈블리 코드는 다음과 같습니다.1...

[라즈베리파이] 시스템 콜 - 커널 모드에서 시스템 콜을 어떻게 실행할까?

이번 절에서는 커널 공간에서 시스템 콜을 어떻게 실행하는지 살펴보겠습니다.다음 그림 전체 흐름도에서 검은색으로 표시된 부분을 눈여겨봅시다.위 그림에서 검은색으로 된 부분입니다. 유저 공간에서 소프트웨어 인터럽트를 유발했으니 소프트웨어 인터럽트 벡터인 vector_swi 레이블이 실행합니다. 유저 공간에서 “svc 0x0” 이란 명령어를 실행하면 vect...
1 2