方法 2: 使用 TOC 和映射文件
方法 2 演示了使用 TOC 和映射文件访问全局数据。 此方法要求在要调试的内核扩展过程中,在 KDB 内核调试器中停止系统。 将计算 民主 /demokext_j 变量的数据的地址。
在您使用 TOC 和映射文件的地址找到全局数据的地址之前,必须在 KDB 内核调试器中您要调试的内核扩展的例程内停止系统。 要执行此操作,请在内核扩展中设置断点。 有关设置断点的更多信息,请参阅 设置断点。
当调用 KDB 内核调试器时,通用寄存器 2 号指向 TOC 的地址。 从映射文件中,可以计算从目录表 (TOC) 开始到期望 TOC 条目的偏移量。 如果知道此偏移量,并且知道 TOC 的起始地址,那么将允许计算所需全局变量的 TOC 条目的地址。 然后,可以检查所需变量的 TOC 条目的地址,以确定数据的地址。
例如,假定由于 demokext 例程第 67 行的断点而调用了 KDB 内核调试器,并且通用寄存器号 2 的值为 0x01304754。
要查找 民主 /demokext_j 变量的地址,请完成以下操作:
要查看和修改全局数据,请执行以下操作:
- 在
KDB(0)提示符处,通过输入以下命令在 demokext 例程的第 67 行设置中断:b demokext+e0注: 在此位置中断可确保在 demokext 例程中调用 KDB 内核调试器。 - 获取 "通用 2 2" 的值。 您需要该地址来确定 TOC 的地址。
- 通过在命令行上输入
g来退出 KDB 内核调试器。 - 将演示程序带到前台,然后选择一个选项。 选择选项将导致调用 demokext 例程以进行配置。 因为设置了中断,所以这会导致调用 KDB 内核调试器。注: 提示更改为美元符号 (
$)。 - 通过输入以下内容将演示程序引入到前台:
fg注: 提示更改为./demo。 - 输入值
1以选择用于增加 demokext 内核扩展中的计数器的选项。 这将导致 demokext 内核扩展的第 67 行出现中断,并且提示将更改为KDB(0)。 - 通过输入以下内容来显示通用寄存器:
所显示的数据应该类似于以下内容:dr
使用映射,从 TOC 开头到 demokext_j 变量的 TOC 条目的偏移量为r0 : 0130411C r1 : 2FF3B210 r2 : 01304754 r3 : 01304744 r4 : 0047B180 r5 : 0047B230 r6 : 000005FB r7 : 000DD300 r8 : 000005FB r9 : 000DD300 r10 : 00000000 r11 : 00000000 r12 : 013042F4 r13 : DEADBEEF r14 : 00000001 r15 : 2FF22D80 r16 : 2FF22D88 r17 : 00000000 r18 : DEADBEEF r19 : DEADBEEF r20 : DEADBEEF r21 : DEADBEEF r22 : DEADBEEF r23 : DEADBEEF r24 : 2FF3B6E0 r25 : 2FF3B400 r26 : 10000574 r27 : 22222484 r28 : E3001E30 r29 : E6001800 r30 : 01304744 r31 : 013046480x00000008。 将此偏移量添加到为 r2 显示的值指示感兴趣的 TOC 条目位于:0x0130475C。 - 通过输入以下内容来显示 民主 /demokext_j 变量的 TOC 条目:
此条目包含 民主 /demokext_j 变量的数据的地址。 所显示的数据应该类似于以下内容:dw 0130475C
显示的第一个字的值是 民主 /demokext_j 变量的数据的地址。TOC+000008: 01304744 000BCB34 00242E94 001E0518 .0GD...4.$...... - 通过输入以下内容来显示 民主 /demokext_j 变量的数据:
所显示的数据应该指示 民主 /demokext_j 变量的值仍为 0x0000064。 这是先前设置的,因为在递增 demokext_j 变量之前,断点集在 demokext 例程中。 所显示的数据应该类似于以下内容:dw 01304744demokext_j+000000: 00000064 01304040 01304754 00000000 ...d.0@@.0GT.... - 使用以下命令清除所有断点:
ca - 通过在命令行上输入
g来退出内核调试器。注: 当您退出时,演示程序位于前台,并会显示下一个选项的提示。 内核扩展将运行 民主 /demokext_j 变量并使其递增。 下次应该具有值0x00000065。 - 输入 Ctrl + Z 键序列可停止演示程序。 此时,提示将更改为美元符号 (
$)。 - 通过输入以下内容将演示程序放置在后台:
bg