Guillermo Austin Kim
Posts
998 postsarm32 - Unwind Idx/prolog 소개
TRACE32는 어떻게 각 함수마다 어떤 register를 stack에 push를 하고 지역 변수를 위해서 얼마 만큼의 공간을 확보하는지를 알까요? 모든 함수의 prolog를 체크하여 위 과정을 수행할까요? 그러기에는 과정들이 매우 복잡하므로, Build 과정에서 위의 prolog 정보를 미리 저장해둬요. Linux Kernel의 Symbol Table중에서 __start_unwind_idx에서부터 __stop_unwind_idx 영역이 있는데요.TRACE32명령창에 symbol.browse *unwind_idx 을 입력하면 해당 Symbol Table을 확인할 수 있어요.symbol___________________|type_____________________|address_______________
ARM64- Stack Push Userspace -> Kernel Space 코드리뷰
유저 공간에서 실행된 레지스터가 커널 Bottom Stack에 Push 되는 디버깅 정보를 예전 페이지에 업데이트했잖아요.아래와 같은 메모리 덤프를 확인했었죠.(출처:http://rousalome.egloos.com/9966225)NUD:FFFFFFE4DE6A7EB8| 3C 6B 77 2B 46 76 A8 C2 0xC2A876462B776B3CNUD:FFFFFFE4DE6A7EC0| 45 00 00 00 00 00 00 00 0x45 // x0 NUD:FFFFFFE4DE6A7EC8| 80 37 81 AF 7B 00 00 00 0x7BAF813780 // x1NUD:FFFFFFE4DE6A7ED0| 16 00 00 00 00 00 00 00 0x16 // x2NUD:FFFFFF
[ARM64]signal - sa_handler signal handler 실행 (code walk-through)
signal에 대해서는 리눅스 시스템 프로그램에서 많이 들어본 적이 있을 꺼에요.쓰레드에 특정 시그날이 전달되면 해당 시그널 핸들러 함수가 호출된다는 내용이죠. 아래 시스템 프로그램의 경우에는 SIGINT 시그널을 전달 받으면 sig_handler 함수가 호출되겠지오.#include #include #include void sig_handler(int signo){ if (signo == SIGINT) printf("received SIGINT\n");} int main(void){ if (signal(SIGINT, sig_handler) == SIG_ERR) printf("\ncan't catch SIGINT\
Reboot - Kernel Rebooting(커널 리부팅) Sequence
보통 시스템이 리부팅될 때 동작에 대해 상세히 다룬 글이 없는 것 같아요.그래서 유저 스페이스에서 reboot 시스템 콜을 수행하면 어떤 흐름으로 시스템이 리셋되는지 살펴볼께요. 가끔 시스템이 리부팅하는 과정에서 락업이나 커널 크래시가 발생하거든요. 이럴 때 어떤 흐름으로 리부팅 되는지에 대한 정보를 알면 어느 포인트에서 디버깅을 해야 할 지 빨리 파악할 수 있어요. sys_reboot이란 함수는 아래 코드로 정의되어 있구요. kernel_restart() 함수가 호출되요. SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg){ struct pid_namespace *pid_ns = task_act
ARM64 - Data Abort Exception(익셉션) Vector 실행
이번 시간에는 Abort 즉 프로그램에 문제가 생겨서 Exception이 생겼을 때 동작 흐름에 대해점검해보고자 해요. ARM에 대한 자료와 세미나를 통해 Exception에 대해서 엄청나게 많이 들었잖아요.뭐, data abort, prefetch abort, undefined abort 등등이죠. 이제 ARM64 아키텍처에서는 이 Abort를 어떻게 처리하고 있는 지 살펴보도록 할께요 우선 아래 코드와 같이 익셉션 벡터가 정의되어 있구요.그런데 abort가 발생할 때는 el1_sync 벡터로 프로그램 카운터가 이동하게 되어 있어요./* * Exception vectors. */ .align 11ENTRY(vectors) ventry el1_sync_invalid // Synchronous E

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

