linux kdb内核调试器,linux kdb 内核调试器

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 会返回比之前少的数据.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值