프로세스 생성 분석 fork (태스크 복사 및 초기화 부분) - 2
·
Linux
fork가 호출되면 결국 kernel_clone이 호출된다는 사실을 알았다.kernel_clone에서는 kernel_clone_args, pt_regs 등등 구조체를 많이 사용하는데,어떤 구조체인지 알아보자. (코드가 너무 긴건, linux 깃헙 링크로 대체한다) 일단 kernel_clone에서는 전달받은 kernel_clone_args를 다른 함수의 인자로 많이 넘긴다.pid_t kernel_clone(struct kernel_clone_args *args){ u64 clone_flags = args->flags; struct completion vfork; struct pid *pid; struct task_struct *p; int trace = 0; pid_t nr; if ((clone_flags..
프로세스 생성 분석 fork(콜 스택) - 1
·
Linux
fork ↓ call __sys_ret(sys_fork()) ↓ call sys_fork()에서 __NR_clone일때, return my_syscall5(__NR_clone, SIGCHLD, 0, 0, 0, 0); 반환(ARM64는 __NR_fork가 아니라, __NR_clone임) my_syscall5는 이렇게 정의되어있음.#define my_syscall5(num, arg1, arg2, arg3, arg4, arg5) \({ \ register long _num __asm__ ("x8") = (num); ..
커널에서 static inline 함수선언과 wrapping
·
Linux
static inline드라이버 분석중에특정 함수 호출을 추적해보니 다른 파일에서 static inline으로 선언되어있는걸 알았다. 예를 들어서,mem.c에서 register_chrdev를 호출,register_chrdev를 추적해보니 다른 include/linux/fs.파일에서 static inline으로 선언됨. inline키워드를 붙이면, 컴파일시에 코드 자체를 호출장소에 삽입.즉, register_chrdev가 호출된 장소에 register_chrdev코드 자체를 삽입.이 코드 삽입 자체가 compile time에 이뤄져야해서 .h에 선언됨. static 키워드를 붙이면, 다른 파일에서 사용이 불가능하지만, inline 키워드로 코드 자체를 삽입하기때문에문제 없다.왜?성능 최적화와 코드 안전성..
linux/drivers/char/mem.c 드라이버 분석
·
Linux
https://github.com/Jminu/linux/blob/master/drivers/char/mem.c linux/drivers/char/mem.c at master · Jminu/linuxLinux kernel source tree. Contribute to Jminu/linux development by creating an account on GitHub.github.com일단 mem.c의 코드를 보면그렇게 엄청나게 길지는 않다.그리고 구현이 가장 쉬운 문자 디바이스 드라이버라 분석이 그렇게 까다롭지 않을 것 같다. 일단 마지막 부분에 보이는 코드를 보자fs_initcall은 모듈을 시작하는 함수이다.fs_initcall을 좀 더 들어가보자. grep으로 긁었더니,이렇게 나오고, fs_ini..
리눅스 커널 개발자모임
·
똥글
매년 열리는 리눅스 커널 개발자 모임에 참석했다.(2025/9/18)초보자가 듣고 이해하기엔 어려운 내용이지만, 커널 고수 개발자들이 발표하는걸 듣는 것 만으로도 도움이 되지 않을까 싶어 매년 참석하는 중이다.1년차 2년차 3년차 참석마다 점점 이해하는 부분이 많아지는건 긍정적이다.그만큼 발전했다는 의미로 생각해본다.나중에 라이트닝 세션에서 발표를 해보는 것도 재미있겠다.
arm맥북에서 x64dbg사용하기
·
C프로그래밍/개인 공부
x64dbg를 사용해야할 일이 있어서 설치를 해보려했지만, 내 노트북은 맥북이었다...x64dbg는 기본적으로 윈도우 프로그램이기 때문에 맥북에서 실행이 불가능하다.윈도우는 실행파일이 .exe 이기 때문이다. (그냥 GDB를 사용할까 했었지만, 난 GUI를 보고싶다) 윈도우를 가상으로 돌린다면 사용할 수 있겠지만, 노트북 용량 이슈로 인해 그건 불가능하고wine을 사용하기로 결정했다. wine은 .exe프로그램을 맥북상에서 돌릴 수 있는 프로그램이다.100% 원 프로그램하고 호환이 되지는 않을 수 있겠지만, 실습, 학습용으로는 충분하지 않을까 싶다. 맥북의 brew로 wine을 설치해주고.다운받은 x64dbg를 실행시켜보았다.뭔가 어색하지만, 일단 정상적으로 실행은 되었다. 근데 한가지 간과한점이 있는데..