라즈베리파이에 설치된 모듈 드라이버를 출력해주는 동작
이 커널로그가 어느 함수에서 호출이 되는것인가?
(struct list_head) modules = (
(struct list_head *) next_=_0xFFFFFFD1682C7688 -> (
(struct list_head *) next = 0xFFFFFFD1682BA108 -> (
(struct list_head *) next = 0xFFFFFFD1682B5288 -> (
(struct list_head *) next = 0xFFFFFFD168139208,
(struct list_head *) prev = 0xFFFFFFD1682BA108),
(struct list_head *) prev = 0xFFFFFFD1682C7688),
(struct list_head *) prev = 0xFFFFFFD1755CF638),
(struct list_head *) prev = 0xFFFFFFD167D15E08)
9|Global &g_modules
10|Global &g_module_start_addr
11|Global &g_module_name
12|
13|Global &g_modules_list_next
14|Global &g_modules_list_next_temp
15|Global &g_modules_list_offset
16|Global &g_modules_name_offset
17|
18|; find the offset
19|&g_modules_list_offset=address.offset(v.address(((struct module)0x0).list)) // 필드의 구조체의 시작주소에서 list의 오프셋이 무엇인지 알기위한 구문
20|&g_modules_name_offset=address.offset(v.address(((struct module)0x0).name))
21|
22|; find global modules (modules is linked-list)
23|&g_modules=address.offset(modules)
24|
25|&g_modules_list_next=data.quad(d:&g_modules)
26|
27|while &g_modules!=&g_modules_list_next
28|(
29| &g_module_start_addr=&g_modules_list_next-&g_modules_list_offset
30| &g_module_name=&g_module_start_addr+&g_modules_name_offset
31|
32| print "name: " data.string(d:&g_module_name)
33|
34| &g_modules_list_next_temp=data.quad(d:&g_modules_list_next)
35| &g_modules_list_next=&g_modules_list_next_temp // for debugging purpose
36|)
37|
38|enddo
39|
40|
&g_modules_list_offset=address.offset(v.address(((struct module)0x0).list))
v.address : 주소를 확인하기위한 명령어
struct module이라는 구조체에서 list라는 필드에 오프셋을 계산하는 명령어
address.offset : 어드레스의 정보를 다른 변수에 저장할 수 있는 포멧으로 출력.
&g_modules=address.offset(modules) : 모듈이라는 전역변수의 시작주소를 확인하기 위한 구문
&g_modules_list_next=data.quad(d:&g_modules) : next를 읽어옴
while &g_modules!=&g_modules_list_next
(
&g_module_start_addr=&g_modules_list_next-&g_modules_list_offset
&g_module_name=&g_module_start_addr+&g_modules_name_offset
print "name: " data.string(d:&g_module_name)
&g_modules_list_next_temp=data.quad(d:&g_modules_list_next)
&g_modules_list_next=&g_modules_list_next_temp