Guillermo Austin Kim
Posts
998 posts[리눅스커널][Arm64] 유저 공간(EL0)에서 시스템 콜 번호는 어떻게 지정할까?
이번에는 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 레지스터에 시
[Arm프로세서] AAPCS: Armv8: 브랜치와 복귀 명령어 - bl
Arm 스팩 문서를 보면서 BL 명령어에 대해 알아봅시다. C6.2.33 BLBranch with Link branches to a PC-relative offset, setting the register X30 to PC+4. It provides a hint that this is a subroutine call.[출처] DDI0487Fc_armv8_arm.pdf 위 스팩의 내용을 조금 이해하기 어려운데, 쉽게 다음과 같이 정리할 수 있습니다. * PC와 관련된 오프셋으로 지정된 주소로 브랜치 * 브랜치를 하고 복귀할 주소를 X30 레지스터에 설정 위 내용을 읽으면 어떤 동작인지 파악하기 어려운데요. 이해를 돕기 위해 bl 명령어가 있는 예시 코드를 분석하겠습니다. 01 0x1004
[Linux Kernel] Armv8: where is cpu_context_save?
In case of ARM64 Linux kernel, struct task_struct.thread.cpu_context saves context information of process when preemption occurs. task_struct {#ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ struct thread_info thread_info;#endif /* -1 unrunnable, 0 runnable, >0 stopped: */ volatile long sta
[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - ldp
Armv7 아키텍처에서 push 명령어를 실행한 후 함수가 종료되기 직전에 반드시 실행되는 명령어가 pop입니다. 마찬가지로 Armv8 아키텍처에서 stp 명령어를 사용해 스택에 레지스터를 푸시한 후, 함수를 종료하기 직전에 실행되는 명령어는 ldp입니다. Arm 스팩 문서에서 ldp 명령어 분석하기 이번에도 Arm 스팩 문서를 보면서 ldp 명령어에 대해 살펴봅시다. C6.2.129 LDPLoad Pair of Registers calculates an address from a base register value and an immediate offset, loads two 32-bit words or two 64-bit doublewords from memory, and writes them
[리눅스커널] Arm64: VMEMMAP_START, vmemmap, PAGE_OFFSET 위치 조정(v5.4)
리눅스 커널 v5.4 버전부터 가상 주소 맵이 약간 변경됐습니다.그 중 대표적인 속성은 아래 정보입니다. VMEMMAP_START: 0xfffffffeffe00000PAGE_OFFSET: 0xffffff8000000000 이 정보를 직접 어셈블리 코드로 확인해보겠습니다. 관련 코드는 참고로 다음과 같습니다. vmemmap ((struct page *)VMEMMAP_START - (memstart_addr >> PAGE_SHIFT)) 패치 코드 먼저 다음과 같은 패치 코드를 작성합시다. diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.cindex 9af647d..3000332 100644--- a/arch/arm64/mm/

![[일상] Eave 65와 목새 택타일 | 토프레 무접점 느낌 | 타건 영상 있음](https://img.zoomtrend.com/2026/06/07/1780838085-SE-77297eb3-90bf-43a7-9629-75fd8530e370.jpg)

