KGB基地址设置方法说明

KGB扫描基地址的介绍

在使用Nano Code调试Linux内核时,为了能解析上层语义,Nano Code需要获取目标系统的一些基本参数,这个参数数据块被称为KGB(Kernel Geo Block),也叫NDB Marker。在低版本的镜像中,KGB是通过一个可动态加载的内核模块建立的,这个模块以驱动的形式加载在内核中,名叫ndb.ko,可以通过lsmod命令进行查看。在较新的系统镜像中,ndb被编译进内核中。

寻找NDB的方式是根据固定的地址以5或100页为范围进行搜索,直到把NDB找到为止。
如果正常找到了NDB,Nano Code就会输出下面的信息。

OS meta is connected
Found NDB marker in target memory at ffffff9f63ff8000
Target: machine aa64, kernel  base 0xffffff8008080800, dbgdata 0xffffff80012e9898, modhead 0xffffff80012e9f80 orig 0xffffff8009e487c8, printk buffer 0xffffffc0fed2bbc0 length 0x200000
Connected to Linux 19 ARMv8 64-bit, 64bit
Symbol search path is: D:\gdk8\symbol;TGT*c:\symbols*;srv*c:\symbols* http://msdl.microsoft.com/download/symbols
abort occurred - dscr = 0x03047d53
ELK can not determine kernel base address
Linux Kernel Version 19 SMP (4 procs) free ARMv8 64-bit
Kernel base = 0xffffffee`80000000 kernel module list = 0xfffd0000`00100008
System uptime: 0 days 0:00:07(7761711377 ns)
ffffff80080a7f7c d65f03c0 ret

当然也可能出现找不到NDB模块的情况,此时Nano Code会输出下面的信息。

Failed to find NDB marker in target memory after scanning 100 pages from base ffffffa763ff8000
ReadSysPara failed with 0x80004005.
If you are debugging Linux kernel, please make sure ndb.ko is loaded.
It can be loaded by: sudo modprobe ndb
NGB marker is not found, assumming machine type aa64.
Read system version block failed 80004005
abort occurred - dscr = 0x03047d53
Failed to read head of debugger data list
Connected to Linux 0 ARMv8 64-bit, 64bit
Symbol search path is: D:\gdk8\symbol;TGT*c:\symbols*;srv*c:\symbols* http://msdl.microsoft.com/download/symbols
abort occurred - dscr = 0x03047d53
Failed to read PsLoadedModuleList
Kernel base < system range start
Linux Kernel Version 0 SMP (4 procs) free ARMv8 64-bit
Kernel base = 0x6405b000`6405b000 kernel module list = 0x6405b000`6405b000
System uptime: not available
ffffff80080a7f7c d65f03c0 ret

尽管这个基地址是比较稳定的,不大会出现变化的,而且还不止扫描一个页,只要其中一个页内有就行;但是为了防止基地址变化的情况出现,Nano Code现在手动支持设置NDB扫描基地址,更方便的让用户进行内核调试。

Ubuntu

如果是调试Ubuntu的linux内核,那么保存原状就好(除非仍出现找不到NDB的情况)。

Android

如果是调试Android的linux内核,可以通过勾选Debug Android来设置基地址(无需再次手动设置,除非仍出现找不到NDB的情况)。

搜索KGB失败

如果仍出现搜索NDB失败的情况,可以通过下面的步骤设置扫描的基地址。

1. 寻找基地址

1.通过命令行进入机器内。
2.使用dmesg | grep kgb命令,找到基地址。

dmesg | grep kgb
0xffffff9ee3ff8000 -> kgb is mappped at ffffff9f63ff8000 (pfn=eae86)

这个地址写入了20180821(格蠹的注册日期)和GEDU。

dd ffffff9f63ff8000
ffffff9f`63ff8000  20180821 47454455 63ff8000 ffffff9f
dc ffffff9f63ff8000
ffffff9f`63ff8000  20180821 47454455 63ff8000 ffffff9f  !.. UDEG...c....

2.设置基地址

您需要在Specify the scan base address...内输入刚才找到的地址。
格式:0x......

完成设置后,点击启动,就可以开始调试了!

作者:Zhang Yinkui  创建时间:2022-11-07 17:42
最后编辑:Zhang Yinkui  更新时间:2024-08-19 10:09