在模块中,通过查询super_blocks列表,来遍历系统中的所有super_block,但是出现与下面类似的错误:
http://stackoverflow.com/q/5051111/941650
也可以参考他的解决方法,到System.map中去查找真实地址,不过这样不是解决问题的最好方法。
先贴出当前的代码
1: #include <linux/module.h>
2: #include <linux/fs.h>
3:
4: MODULE_LICENSE("GPL");
5:
6:
7: void printRawData(unsigned long size, const u_char* data)
8: {
9: if (size == 0)
10: {
11: return;
12: }
13:
14: printk("Memory at 0x%08x ", (u32)data);
15: unsigned long i = 0;
16: for (i=0;i<16;i++)
17: {
18: printk("%4X", i);
19: }
20: printk(" ");
21: for (i=0;i<16;i++)
22: {
23: printk("%4s", "__");
24: }
25:
26: char lineSummary[17] = {0,};
27: unsigned long pos = 0;
28: for (i=0;i<size;i++)
29: {
30: if ((pos = i % 16) == 0)
31: {
32: if (i != 0)
33: {
34: printk(" ---- %s ", lineSummary);
35: memset(lineSummary, 0, 17);
36: }
37: else
38: {
39: printk(" ");
40: }
41: }
42:
43: printk(" %02X", *(data + i));
44:
45: if (*(data + i) >= 0x20 && *(data + i) <= 0x7E)
46: {
47: lineSummary[pos] = *(data + i);
48: }
49: else
50: {
51: lineSummary[pos] = ' ';
52: }
53: }
54:
55: if (size % 16 != 0)
56: {
57: for (i=0;i<16 - (size%16);i++)
58: {
59: printk(" ");
60: }
61: }
62:
63: printk(" ---- %s ", lineSummary);
64: printk(" ");
65: }
66:
67: void AnalyzeSuperBlock()
68: {
69: struct super_block* item;
70: struct list_head * super_blocks = 0xc1778bc0;
71:
72: list_for_each_entry(item,super_blocks,s_list)
73: {
74: printk("super_block 0x%08X %s ", item, item->s_id);
75: }
76: }
77:
78: static int pslist_init()
79: {
80: printk("################################################################### ");
81: AnalyzeSuperBlock();
82: return 0;
83: }
84:
85: static void pslist_exit()
86: {
87: printk("################################################################### ");
88: }
89:
90:
91:
92: module_init(pslist_init);
93: module_exit(pslist_exit);
结果:
1: [153479.359674] ###################################################################
2: [153479.359677] super_block 0xF5404800 sysfs
3: [153479.359678] super_block 0xF5404A00 rootfs
4: [153479.359679] super_block 0xF5404C00 bdev
5: [153479.359680] super_block 0xF5404E00 proc
6: [153479.359681] super_block 0xF545AC00 tmpfs
7: [153479.359682] super_block 0xF545AE00 devtmpfs
8: [153479.359683] super_block 0xF5464400 debugfs
9: [153479.359684] super_block 0xF5464A00 sockfs
10: [153479.359685] super_block 0xF551F800 pipefs
11: [153479.359686] super_block 0xF551FA00 anon_inodefs
12: [153479.359686] super_block 0xF551FC00 securityfs
13: [153479.359687] super_block 0xF5792200 devpts
14: [153479.359688] super_block 0xF57A8000 hugetlbfs
15: [153479.359689] super_block 0xF57A8800 mqueue
16: [153479.359690] super_block 0xF4C57000 sysfs
17: [153479.359691] super_block 0xF4C4AC00 tmpfs
18: [153479.359692] super_block 0xF4DB3C00 fusectl
19: [153479.359693] super_block 0xF4D57000 sda1
20: [153479.359694] super_block 0xF4C99600 tmpfs
21: [153479.359695] super_block 0xF4D3CC00 tmpfs
22: [153479.359696] super_block 0xEF20DC00 binfmt_misc
23: [153479.359697] super_block 0xF2F23C00 vboxsf
24: [153479.359698] super_block 0xEF12AA00 vboxsf
25: [153479.359699] super_block 0xEE76B800 vboxsf
26: [153479.359700] super_block 0xF2CBC600 fuse
27: [153479.359701] super_block 0xEDA70400 vboxsf
28: [153479.361922] ###################################################################