理解NDB的内核地标机制

地标,这是NDB找到Linux内核的地标:

marker 到底有啥,dq:

NDP_MARKER_A & NDP_MARKER_B

原来还有彩蛋,这可是张老师亲自确认的哈:

GEDU

源代码中的数据结构:

此数据结构的初始化:

再上dqs看有什么相关的符号?

File copy task is sent to NdSrv via mailbox /usr/lib/debug/.build-id/6f/01e81d8f1d44e4c926ba0739e1d5b722019973.debug 1.
Please execute a ‘g’ command so that NdSrv can run and serve the file request.
暂试执行了g命令,然后断下,未发现有/usr/lib/debug/.build-id/6f/ 文件夹。

调试器符号文件夹发现之前的一个记录,但没有文件

麻烦些,手动对照,参考IDA可加载头文件定义结构或手动自定义结构,然后dt,那将帅呆了:
(2022.07.11 其实就是缺ndb.ko到NanoCode的符号文件夹,请跳到下面 2022.07.11 update):

即使暂时没有在NDB中加载到ndb.ko的符号,但是仍然可以从下面的方式获取一些符号信息的:

ffffff80012e6470 t kgb_init [ndb] 试下反汇编此地址:


调用 alloc_pages_node,对上源代码了:

有了底层把握到每个字节、寄存器等的基础能力,上层调试、分析的高级功能可尽情地发挥想象。

期待中


2022.07.11 update

根据昨天张老师课上的提示,终于看到了心心念念想要的结果:
It is so beautiful!


Much more than “lm” output, actually you can get everything/every bit with NDB. Lovely

作者:Zhang Yinkui  创建时间:2022-07-09 12:09
最后编辑:Zhang Yinkui  更新时间:2024-09-23 15:29