커널 모듈 관련 문의 드립니다 !! 도와 주세요 ㅠㅜ

365
points
points
전에 있던 커널 소스는 잊어버려서 ㅠㅜ
현재 커널 이미지만 가지고 있습니다.
그런데 커널 이미지에 박혀 있는 모듈이 있는데요
박혀 있는 모듈을 사용 하지 않고
그 모듈을 새로 컴파일 해서 insmod해서 사용 하면
커널에서 새로 만든 모듈을 사용 하게 될까요?
아니면 박혀 있는 모듈을 사용 하게 될까요? ㅡㅠ
커널에 그 모듈이 박혀 있는 상태에서 새로 만든 모듈을
insmod 해서 사용 하는 방법이 있을까요?
고수님들 도와주십시요 ㅠㅜ..

points
System.map 이 없다면 ...
System.map 이 없다면 ... 수십배 더 힘들어집니다.
zImage 의 uncompress 부분을 조심스레 떼어내서 보관합니다.
나머지에 gzip 헤더를 만들어 붙여서 gunzip 으로 decompress 합니다.
(한번도 해본적이 없어서 방법도 모르겠고, 떼어낸 나머지에 gzip 헤더가 붙어 있는지 없는지도 모르겠습니다)
System.map 을 열어서 __init_begin 과 __init_end 사이 어디엔가에 기존모듈의 초기화 루틴 엔트리가 있으니 열심히 찾습니다.
찾았다면, decompress 한 바이너리를 hex editor 로 열어서 찾아갑니다.
찾아갔다면, 바로 return 되도록 고칩니다.
바이너리를 다시 gzip compress 합니다.
gzip 헤더를 떼 내야 할지 그냥 둬야 할진 잘 모르겠고...
하여간 아까 고이 보관했던 uncompress 부분을 조심스레 다시 붙입니다.
런타임에 수정하는 방법도 System.map 의 도움을 받아야 합니다.
기존 모듈이 사용하는 resource 와 동작방식을 최대한 알고 있어야 합니다.
인터럽트를 사용한다면 IRQ 번호는 뭔지,
주기적으로 I/O 포트를 감시하는지, 감시한다면 타이머인지, 혹시 커널 쓰레드를 사용하는지.
System.map 을 참고해서,
interrupt description table 의 action 핸들러를 바꿔치기하고,
timer list 에서 timeout 핸들러를 바꿔치기 하고,
커널 쓰레드는 죽일 수 있는 방법을 찾아서 죽여버리고.
그나저나 커널소스(헤더)가 없는 상태라면,
새 모듈을 빌드해도 제대로 동작할런지 보장이 안됩니다.
2.4 커널이야 그리 어렵지 않게 어거지를 쓰는게 가능했지만, 어거지를 쉽게 쓸 수 있다 뿐이지 제대로 된 모듈을 만들어 내는 것은 아닙니다.