커널에서 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를 실행시켜보았다.뭔가 어색하지만, 일단 정상적으로 실행은 되었다. 근데 한가지 간과한점이 있는데..
objdump활용 vmlinux 분석시 start address의미
·
Linux
objdump로 vmlinux를 분석했을 때,start address가 0xffffffc080000000이다. 즉, 처음 vmlinux가 실행될 메모리 주소가 이미 정해진 것이나 마찬가지인데이게 어떻게 가능할까라는 생각이 들었다. 만약 이미 이 주소를 다른 프로세스가 사용중일 수 있지 않을까?라는 생각이 들었다.간단하게 말하면, 다른 프로세스가 사용중일리가 없다.objdump로 vmlinux를 분석할 때 보이는 start address는 물리 메모리 주소를 의미한다.Kernel은 부팅될 때 부트로더에 의해 약속된 위치에 로드되기 때문이다. 반면, 일반 응용 프로그램의 경우 start address는 가상 메모리 주소를 의미한다.미리 고정된 가상주소를 할당하고, 실제 실행시에 MMU에 의해 실제 메모리의 ..
테일 체이닝
·
ARM arch/Cortex-M
Tail-ChainingARM Cortex-M 프로세서에서 익셉션 간의 전환 시간을 줄이는 최적화 기능동작 원리 2개의 익셉션 (IRQ1, IRQ2)이 있고, 이 익셉션이 발생하면 실행되는 핸들러1, 핸들러2가 있다고 가정하자.또한 익셉션 우선순위는 IRQ1 > IRQ2 즉, IRQ1 익셉션이 우선 순위가 더 높다. 유저 스레드에서 실행중일때 IRQ1이 발생하면, 유저 스레드에서의 상태 (레지스터 내용)들을 전부 스택에 저장한다.이를, 스태킹(stacking)이라고 한다. 이후에 핸들러1이 실행될 것이다. 핸들러1이 실행되는 도중에, IRQ2가 발생한다.하지만, 우선순위는 IRQ1이 우선순위가 더 높기 때문에 처리가 보류(pending)된다.핸들러1이 끝나야 핸들러2가 실행될 수 있다. 핸들러1의 실행이..