Breakpoint @ 0xd087c5dc [0]kdb>
我们现在位于 scull_read 的开始. 为看到我们任何到那里的, 我们可以获得一个堆栈回 溯:
[0]kdb> bt
ESP EIP
Function (args)
0xcdbddf74
0xd087c5dc [scull]scull_read 0xcdbddf78 0xc0150718 vfs_read+0xb8 0xcdbddfa4
0xc01509c2 sys_read+0x42 0xcdbddfc4 0xc0103fcf syscall_call+0x7 [0]kdb>
kdb 试图打印出调用回溯中每个函数的参数. 然而, 它被编译器的优化技巧搞糊涂了. 因 此, 它无法打印 scull_read 的参数.
到时候查看一些数据了. mds 命令操作数据; 我们可以查询 schull_devices 指针的值, 使用这样一个命令:
[0]kdb> mds scull_devices 1 0xd0880de8 cf36ac00
....
这里我们要求一个(4 字节)字, 起始于
scull_devices 的位置; 答案告诉我们的设备数组 在地址
0xd0880de8; 第一个设备结构自己在 0xcf36ac00. 为查看那个设备结构, 我们需 要使用这个地址:
[0]kdb>
mds cf36ac00 0xcf36ac00 ce137dbc .... 0xcf36ac04 00000fa0 .... 0xcf36ac08
000003e8 ....
0xcf36ac0c 0000009b .... 0xcf36ac10 00000000 ....
0xcf36ac14 00000001 ....
0xcf36ac18 00000000 ....
0xcf36ac1c 00000001 ....
这里的 8 行对应于 scull_dev 结构的开始部分.
因此, 我们看到第一个设备的内存位于 0xce137dbc, quantum 是 4000 (16 进制 fa0), 量子集大小是 1000 (16 进制
3e8 ), 当 前有 155( 16 进制 9b) 字节存于设备中.
kdb 也可以改变数据. 假想我们要截短一些数据从设备中: [0]kdb> mm cf26ac0c 0x50
0xcf26ac0c = 0x50
在设备上一个后续的 cat 会返回比之前少的数据.