理解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 更新时间:2024-09-23 15:29