1.使用 Vscode 搭建 Linux Kernel 4.4.6 可视化调试环境
2.WinDbg实践--入门篇
3.å¦ä½å¸è½½option of eds kernel debug
使用 Vscode 搭建 Linux Kernel 4.4.6 可视化调试环境
本文旨在指导如何使用Vscode搭建Linux Kernel 4.4.6的内核可视化调试环境,通过Qemu模拟器、源码Busybox和Gdb等工具进行配置和调试。打打开首先,开内确保你的核源Linux宿主机为位,并安装好必要的内核自动外呼源码编译内核工具。选择4.4.6版本的源码内核源代码,配置时开启debug信息和特定选项。打打开为得到流畅的开内代码提示,需生成compile_commands.json文件,核源可能需要使用bear工具。内核在编译过程中,源码可能会遇到与PIC模式和链接器版本相关的打打开引流脚本源码报错,需进行相应调整。开内完成内核编译后,核源利用Qemu启动并解决可能的重启问题。使用Busybox构建initramfs,以支持内核启动时的设备驱动和基本程序。最后,知识库 源码通过.gdbinit和launch.json配置Vscode,实现在Kernel代码中的可视化调试,包括设置断点和启动调试过程。整个过程涉及从下载源码到成功进入Shell并进行调试的详细步骤。
WinDbg实践--入门篇
WinDbg,即Windows平台上的便利店源码调试工具,它由Windows和Debug两个词组合而成,具备强大的调试功能,能够调试用户模式、内核模式以及dump文件等。其调试命令分为基本命令、元命令和扩展命令三类。网贷超市源码基本命令和元命令是调试器自带的功能,元命令以"."开头,而扩展命令则以"!"开头。以下将通过实例和命令来实践WinDbg的使用。
一.配置微软符号服务器[未能成功]
在Windows程序中,通常会存在与XXX.exe相同名字的XXX.pdb文件,即Program Debug Database。pdb文件包含调试信息,由链接器生成。符号服务器(Symbol Server)是一个文件服务器,将调试符号进行集中存储,使得WinDbg能够解析符号名称。微软的符号服务器是常用的公共符号服务器,即msdl.microsoft.com/download/symbols,它是调试Windows应用程序和Windows内核程序不可或缺的。当然,用户也可以搭建自己的符号服务器。
1.WinDbg默认的设置路径
File -> Settings -> Debugging settings,默认的源码路径、符号路径和缓存路径如下:
2.设置_NT_SYMBOL_PATH环境变量
设置_NT_SYMBOL_PATH环境变量的值为:
SRV*D:\mysymbol*/thread-... [3]Windbg调试命令详解: yiiyee.cn/blog///... [4]WinDbg用法详解: wenku.baidu.com/view/ca... [5]Good tutorial for WinDbg: stackoverflow.com/quest... [6]WinDbg设置调试符号路径与调试符号下载: blog.csdn.net/qq_... [7]dotnet/symreader-portable: github.com/dotnet/symre... [8]搭建自己的符号服务器: bbs.pediy.com/thread-... [9]Windows调试工具: docs.microsoft.com/zh-c... []WinDbg Online Help: dbgtech.net/windbghelp/... []WinDbg官方文档: windbg.org/ [].NET探秘:MSIL权威指南: url.ctfile.com/f/... (访问密码: )
本文由 mdnice 多平台发布
å¦ä½å¸è½½option of eds kernel debug
è°è¯æ¯è½¯ä»¶å¼åè¿ç¨ä¸ä¸ä¸ªå¿ ä¸å¯å°çç¯èï¼å¨ Linux å æ ¸å¼åçè¿ç¨ä¸ä¹ä¸å¯é¿å å°ä¼é¢å¯¹å¦ä½è°è¯å æ ¸çé®é¢ãä½æ¯ï¼Linux ç³»ç»çå¼åè åºäºä¿è¯å æ ¸ä»£ç æ£ç¡®æ§çèèï¼ä¸æ¿æå¨ Linux å æ ¸æºä»£ç æ ä¸å å ¥ä¸ä¸ªè°è¯å¨ãä»ä»¬è®¤ä¸ºå æ ¸ä¸çè°è¯å¨ä¼è¯¯å¯¼å¼åè ï¼ä»èå¼å ¥ä¸è¯çä¿®æ£[1].æ以对 Linux å æ ¸è¿è¡è°è¯ä¸ç´æ¯ä¸ªä»¤å æ ¸ç¨åºåæå°æ£æçé®é¢ï¼è°è¯å·¥ä½çè°è¦æ§æ¯å æ ¸çº§çå¼ååºå«äºç¨æ·çº§å¼åçä¸ä¸ªæ¾èç¹ç¹ã
尽管缺ä¹ä¸ç§å ç½®çè°è¯å æ ¸çæææ¹æ³ï¼ä½æ¯ Linux ç³»ç»å¨å æ ¸åå±çè¿ç¨ä¸ä¹éæ¸å½¢æäºä¸äºçè§å æ ¸ä»£ç åé误è·è¸ªçææ¯ãåæ¶ï¼è®¸å¤çè¡¥ä¸ç¨åºåºè¿èçï¼å®ä»¬ä¸ºæ åå æ ¸éå äºå æ ¸è°è¯çæ¯æã尽管è¿äºè¡¥ ä¸æäºå¹¶ä¸è¢« Linux å®æ¹ç»ç»è®¤å¯ï¼ä½ä»ä»¬ç¡®å®åè½å®åï¼åå强大ãè°è¯å æ ¸é®é¢æ¶ï¼å©ç¨è¿äºå·¥å ·ä¸æ¹æ³è·è¸ªå æ ¸æ§è¡æ åµï¼å¹¶æ¥çå ¶å ååæ°æ®ç»æå°æ¯é常æç¨çã
æ¬æå°é¦å ä»ç» Linux å æ ¸ä¸çä¸äºå æ ¸ä»£ç çè§åé误è·è¸ªææ¯ï¼è¿äºè°è¯åè·è¸ªæ¹æ³å æè¦æ±ç使ç¨ç¯å¢å使ç¨æ¹æ³èåæä¸åï¼ç¶åéç¹ä»ç»ä¸ç§ Linux å æ ¸çæºä»£ç 级çè°è¯æ¹æ³ã
1. Linux ç³»ç»å æ ¸çº§è½¯ä»¶çè°è¯ææ¯
printkï¼ï¼ æ¯è°è¯å æ ¸ä»£ç æ¶æ常ç¨çä¸ç§ææ¯ãå¨å æ ¸ä»£ç ä¸çç¹å®ä½ç½®å å ¥printkï¼ï¼ è°è¯è°ç¨ï¼å¯ä»¥ç´æ¥ææå ³å¿çä¿¡æ¯ææå°å°å±å¹ä¸ï¼ä»èå¯ä»¥è§å¯ç¨åºçæ§è¡è·¯å¾åæå ³å¿çåéãæéçä¿¡æ¯ã Linux å æ ¸è°è¯å¨ï¼Linux kernel debuggerï¼kdbï¼æ¯ Linux å æ ¸çè¡¥ä¸ï¼å®æä¾äºä¸ç§å¨ç³»ç»è½è¿è¡æ¶å¯¹å æ ¸å ååæ°æ®ç»æè¿è¡æ£æ¥çåæ³ãOopsãKDBå¨æç« ææ¡ Linux è°è¯ææ¯æ详ç»ä»ç»ï¼å¤§å®¶å¯ä»¥åèã Kprobes æä¾äºä¸ä¸ªå¼ºè¡è¿å ¥ä»»ä½å æ ¸ä¾ç¨ï¼å¹¶ä»ä¸æå¤çå¨æ å¹²æ°å°æ¶éä¿¡æ¯çæ¥å£ãä½¿ç¨ Kprobes å¯ä»¥è½»æ¾å°æ¶éå¤çå¨å¯åå¨åå ¨å±æ°æ®ç»æçè°è¯ä¿¡æ¯ï¼èæ é对Linuxå æ ¸é¢ç¹ç¼è¯åå¯å¨ï¼å ·ä½ä½¿ç¨æ¹æ³ï¼è¯·åèä½¿ç¨ Kprobes è°è¯å æ ¸ã
以ä¸ä»ç»äºè¿è¡Linuxå æ ¸è°è¯åè·è¸ªæ¶ç常ç¨ææ¯åæ¹æ³ãå½ç¶ï¼å æ ¸è°è¯ä¸è·è¸ªçæ¹æ³è¿ä¸æ¢ä»¥ä¸æå°çè¿äºãè¿äºè°è¯ææ¯çä¸ä¸ªå ±åçç¹ç¹å¨äºï¼ä»ä»¬ é½ä¸è½æä¾æºä»£ç 级çææçå æ ¸è°è¯æ段ï¼æäºåªè½ç§°ä¹ä¸ºé误è·è¸ªææ¯ï¼å æ¤è¿äºæ¹æ³é½åªè½æä¾æéçè°è¯è½åãä¸é¢å°ä»ç»ä¸ç§å®ç¨çæºä»£ç 级çå æ ¸è°è¯ æ¹æ³ã
2. 使ç¨KGDBæ建Linuxå æ ¸è°è¯ç¯å¢
kgdbæä¾äºä¸ç§ä½¿ç¨ gdbè°è¯ Linux å æ ¸çæºå¶ã使ç¨KGDBå¯ä»¥è±¡è°è¯æ®éçåºç¨ç¨åºé£æ ·ï¼å¨å æ ¸ä¸è¿è¡è®¾ç½®æç¹ãæ£æ¥åéå¼ãåæ¥è·è¸ªç¨åºè¿è¡çæä½ã使ç¨KGDBè°è¯æ¶éè¦ä¸¤å°æºå¨ï¼ ä¸å°ä½ä¸ºå¼åæºï¼Development Machineï¼ï¼å¦ä¸å°ä½ä¸ºç®æ æºï¼Target Machineï¼ï¼ä¸¤å°æºå¨ä¹é´éè¿ä¸²å£æè 以太ç½å£ç¸è¿ã串å£è¿æ¥çº¿æ¯ä¸æ ¹RS-æ¥å£ççµç¼ï¼å¨å ¶å é¨ä¸¤ç«¯ç第2èï¼TXDï¼ä¸ç¬¬3èï¼RXDï¼ äº¤åç¸è¿ï¼ç¬¬7èï¼æ¥å°èï¼ç´æ¥ç¸è¿ãè°è¯è¿ç¨ä¸ï¼è¢«è°è¯çå æ ¸è¿è¡å¨ç®æ æºä¸ï¼gdbè°è¯å¨è¿è¡å¨å¼åæºä¸ã
ç®åï¼kgdbåå¸æ¯æiãx_ã-bit PPCãSPARCçå ç§ä½ç³»ç»æçè°è¯å¨ãæå ³kgdbè¡¥ä¸çä¸è½½å°åè§åèèµæ[4].
2.1 kgdbçè°è¯åç
å®è£ kgdbè°è¯ç¯å¢éè¦ä¸ºLinuxå æ ¸åºç¨kgdbè¡¥ä¸ï¼è¡¥ä¸å®ç°çgdbè¿ç¨è°è¯æéè¦çåè½å æ¬å½ä»¤å¤çãé·é±å¤çå串å£é讯3个主è¦çé¨åã kgdbè¡¥ä¸ç主è¦ä½ç¨æ¯å¨Linuxå æ ¸ä¸æ·»å äºä¸ä¸ªè°è¯Stub.è°è¯Stubæ¯Linuxå æ ¸ä¸çä¸å°æ®µä»£ç ï¼æä¾äºè¿è¡gdbçå¼åæºåæè°è¯å æ ¸ä¹é´çä¸ä¸ªåªä»ãgdbåè°è¯stubä¹é´éè¿gdb串è¡åè®®è¿è¡é讯ãgdb串è¡åè®®æ¯ä¸ç§åºäºæ¶æ¯çASCIIç åè®®ï¼ å å«äºåç§è°è¯å½ä»¤ãå½è®¾ç½®æç¹æ¶ï¼kgdbè´è´£å¨è®¾ç½®æç¹çæ令åå¢å ä¸æ¡trapæ令ï¼å½æ§è¡å°æç¹æ¶æ§å¶æ就转移å°è°è¯stubä¸å»ãæ¤æ¶ï¼è°è¯ stubçä»»å¡å°±æ¯ä½¿ç¨è¿ç¨ä¸²è¡éä¿¡åè®®å°å½åç¯å¢ä¼ éç»gdbï¼ç¶åä»gdbå¤æ¥åå½ä»¤ãgdbå½ä»¤åè¯stubä¸ä¸æ¥è¯¥åä»ä¹ï¼å½stubæ¶å°ç»§ç»æ§ è¡çå½ä»¤æ¶ï¼å°æ¢å¤ç¨åºçè¿è¡ç¯å¢ï¼æ对CPUçæ§å¶æéæ°äº¤è¿ç»å æ ¸ã