[라즈베리파이] git clone 명령어로 특정 커밋 코드로 돌리기
By Guillermo Austin Kim | 2018년 9월 10일 |
이번에는 git clone 명령어로 특정 커밋으로 소스 코드를 변경하는 과정을 알아봅시다. 돌아가려는 커밋은 6/13/2018 날짜입니다.commit 5762758699e1ddab22bf4c14eb225941761c52c8Author: Dave Stevenson <[email protected]>Date: Wed Jun 13 15:21:10 2018 +0100 net: lan78xx: Disable TCP Segmentation Offload (TSO) TSO seems to be having issues when packets are dropped and the remote end uses Selective Acknowledge (SACK)
[Linux][Kernel] Kernel Panic @__stack_chk_fail - 스택 카나리 (Stack canary Feature)
By Guillermo Austin Kim | 2017년 12월 16일 |
최근 흥미로운 커널 패닉이 나왔는데요. 디버깅 과정을 공유 좀 하고자 해요. 일단 콜스택부터 볼께요. sock_has_perm() 함수가 돌다가 갑자기 __stack_chk_fail() 함수 호출로 panic()이 일어났거든요. 왜 이런 현상이 발생했을까요?crash> bt e5752c00PID: 1787 TASK: e5752c00 CPU: 4 COMMAND: "net_socket"bt: WARNING: stack address:0xe853fa38, program counter:0xc0ee5b60 #0 [<c0ed8b64>] (panic) from [<c0125038>] #1 [<c0125038>] (__stack_chk_fail) from [<c032
[리눅스커널][Arm64] 유저 공간(EL0)에서 시스템 콜 번호는 어떻게 지정할까?
By Guillermo Austin Kim | 2021년 8월 21일 |
이번에는 64비트 기반 리눅스 커널에서 구동되는 라즈비안에서 시스템 콜 번호를 확인해 보겠습니다. 이를 위해 바이너리 유틸리티를 활용해 libc 라이브러리를 어셈블리 명령어로 분석할 필요가 있습니다. root@raspberrypi:/usr# find . -name libc.a./lib/aarch64-linux-gnu/libc.aroot@raspberrypi:/usr# objdump -d ./lib/aarch64-linux-gnu/libc.a > code_libc.c 위 명령어로 '/usr/lib/aarch64-linux-gnu/libc.a' 라이브러리 파일을 어셈블리 코드로 변환하게 됩니다. x8 레지스터에서 시스템 콜 번호를 지정 __libc_write() 함수를 분석하면 x8 레지스터에 시
[라즈베리파이] 라즈비안: 리눅스 커널 소스의 구조
By Guillermo Austin Kim | 2020년 1월 7일 |
지금까지 라즈비안 리눅스의 커널 코드를 내려받고 빌드하는 방법을 알아봤습니다. 리눅스 커널 코드를 수정해서 실습 코드를 빌드할 수 있는 준비를 끝낸 것입니다. 이번에는 리눅스 커널 코드의 디렉터리 구조를 살펴보겠습니다. 참고로 저도 처음으로 리눅스 커널 코드를 내려받고 디렉터리를 봤을 때 어떤 코드를 먼저 봐야 할지 감이 오지 않았습니다. 10여년 동안 커널을 빌드하면서 커널 소스는 다음과 같은 구조로 디렉터리가 구성돼 있다는 것을 알게 됐습니다. arch arch 하부 디렉터리에는 아키텍처별로 동작하는 커널 코드가 있습니다. arm: 32비트 계열 ARM 아키텍처 코드가 있으며, 라즈비안도 이 하부 디렉터리 코드를 실행합니다. arm64: 64비트 계열 ARM 아키텍처 코드가 있습니다. x86