[라즈베리파이] 시스템 콜 - 유저 공간 시스템 콜 발생 어셈블리 코드 분석
By Guillermo Austin Kim | 2018년 11월 18일 |
아키텍처별로 시스템 콜을 실행하는 동작은 다릅니다. 시스템 콜을 실행하는 동작은 어셈블리 코드로 구현되어 있습니다. 라즈베리파이가 탑재한 ARM(ARM32) 아키텍처에서는 시스템 콜은 다음과 같이 구현돼 있습니다.1. r0 ~ r5 레지스터에 시스템 콜로 전달할 인자 지정2. r7 레지스터에 시스템 콜 번호 저장3. "svc 0x00000000" 명령어 실행 GNU C 라이브러리 파일에서 실제 시스템 콜을 실행하는 어셈블리 코드를 봅시다. write() 함수에 대한 시스템 콜을 실행하는 코드를 소개합니다.00000020 <__libc_write>:1 20: e59fc060 ldr ip, [pc, #96] ; 88 <__libc_write+0x68>2 24: e79fc00c
[리눅스커널] 리눅스소개: 리눅스와 리눅스커널은 왜 배워야 할까?
By Guillermo Austin Kim | 2019년 7월 22일 |
이번 시간에는 리눅스를 왜 배워야 하는지 생각해보는 시간을 갖겠습니다. 저는 리눅스 세미나에서 다음 질문을 종종 받곤 합니다. 리눅스를 배워야 하는 이유가 무엇인가요? 특히 리눅스를 처음 접하는 분들이 많이 던지는 질문이었습니다. 이런 질문을 받고는 리눅스를 과연 왜 배워야 할까 곰곰히 생각해봤습니다. 여러 생각 끝에 내린 필자인 저는 다음과 같은 결론을 내리게 됐습니다. 여러분들이 소프트웨어 개발을 하려고 한다면 리눅스는 반드시 알아야 합니다. 이번에 먼저 리눅스를 왜 배워야 하는지 설명하는 시간을 갖겠습니다. 리눅스는 왜 배워야 할까? 요즘에 학부 과정에서 리눅스 시스템 프로그램을 배울 수 있습니다. 또한 대학원 프로젝트 과제도 리눅스 환경에서 수행하고 있습니다. 이번에는
[리눅스커널][디버깅] dump_stack() 함수
By Guillermo Austin Kim | 2019년 3월 13일 |
dump_stack() 함수 dump_stack() 함수는 콜스택을 커널 로그로 출력합니다. 커널 로그로 콜스택을 보고 싶은 코드에 삽입하면 됩니다. 이 함수를 호출하려면 C 코드 윗부분에 다음과 같이 "linux/kernel.h" 해더 파일을 추가해야 합니다. #include <linux/kernel.h> dump_stack() 함수 선언부를 봅시다.asmlinkage __visible void dump_stack(void); 인자와 반환값 타입이 모두 void입니다. 커널 소스 코드 어디든 dump_stack() 함수만 추가하면 됩니다. dump_stack() 함수로 커널 로그에서 콜스택 확인하기이번엔 dump_stack() 함수를 써서 커널 로그로 콜스택을 볼 수 있는 패치 코드를 소
버추얼박스의 리눅스 가상머신에서 게스트 확장 버전 확인/제거
By 반달가면 | 2020년 7월 10일 |
버추얼박스(VirtualBox) 가상머신으로 리눅스를 사용하고 있을 경우, 현재 설치되어 있는 게스트 확장(guest additions)의 버전을 확인하는 방법이다. 매우 간단하다. 게스트 확장을 설치하면 /opt 디렉토리 하위에 설치되므로 ls 명령으로 이 디렉토리에 있는 게스트 확장 디렉토리 명칭을 확인하면 된다. # 버추얼박스 게스트 확장 버전 확인 ls /opt 예를 들어 VBoxGuestAdditions-6.0.18 이런식으로 디렉토리 명칭이 나왔다면 버전 6.0.18이 설치되어 있는 것이다. 게스트 확장을 제거하려면 설치 디렉토리 안에 있는 uninstall.sh 스크립트를 루트(root) 권한으로 실행하면 된다. # 게스트 확장 제거 cd /opt/VBoxGu