1. 开启虚拟机,虚拟机运行到 kgdb: Waiting for connection from remote gdb

2. 在Host机上运行: socat tcp-listen:8888 /tmp/vbox2, 其中/tmp/vbox2为管道文件,它是目标机串口的重定向目的文件,socat将这个管道文件又重定向到tcp socket的8888端口。

3. 开启一个新的虚拟终端,cd path/to/kernel/source/tree, 然后执行gdb ./vmlinux

输出

GNU gdb 6.8-debian

Copyright (C) 2008 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "i486-linux-gnu"...

(gdb) set-remote

set remote baud rate to 115200c/s

set remote target to local tcp socket

kgdb_breakpoint () at kernel/kgdb.c:1721

1721        wmb(); /* Sync point after breakpoint */

(gdb) c

Continuing.

目标机会一直启动,直到提示输入用户名密码。

4. 进入目标机,输入用户名密码(推荐使用字符界面下的root用户),输入g命令,目标机被断下,控制移交到Host机中的gdb中。(目标机root的用户目录中的.bashrc中添加一行alias g='echo g>/proc/sysrq-trigger')

5. 在Host机中的gdb中

(gdb) set-mod-break

set breakpoint in system module init function

Breakpoint 1 at 0xc014bac5: file kernel/module.c, line 2288.

(gdb) c

Continuing.

6. 在目标机中

insmod klogger2.ko

目标机再次断下,控制权移交Host机中的gdb

7. 在Host机中的gdb中

[New Thread 4693]

[Switching to Thread 4693]

Breakpoint 1, sys_init_module (umod=0x0, len=0, uargs=0x0)

at kernel/module.c:2288

2288        if (mod->init != NULL)

(gdb) print-mod-segment

Name:.note.gnu.build-id Address:0xdf977058

Name:.text Address:0xdf975000

Name:.rodata Address:0xdf977080

Name:.rodata.str1.4 Address:0xdf9774b4

Name:.rodata.str1.1 Address:0xdf977522

Name:.parainstructions Address:0xdf977a00

Name:.data Address:0xdf978440

Name:.gnu.linkonce.this_module Address:0xdf978480

Name:.bss Address:0xdf978a00

Name:.symtab Address:0xdf977a08

Name:.strtab Address:0xdf978078

(gdb) add-symbol-file /home/done/programs/linux-kernel/vlogger/klogger2.ko 0xdf975000 -s .data 0xdf978440 -s .bss 0xdf978a00

add symbol table from file "/home/done/programs/linux-kernel/vlogger/klogger2.ko" at

.text_addr = 0xdf975000

.data_addr = 0xdf978440

.bss_addr = 0xdf978a00

(y or n) y

Reading symbols from /home/done/programs/linux-kernel/vlogger/klogger2.ko...done.

(gdb) b hook_init

Breakpoint 2 at 0xdf976d19: file /home/done/programs/linux-kernel/vlogger/hook.c, line 255.

(gdb)

你可以调试自己些的LKM模块了

附gdb的初始化配置文件~/.gdbinit

define set-remote

echo set remote baud rate to 115200c/s\n

set remotebaud 115200

echo set remote target to local tcp socket\n

target remote tcp:localhost:8888

end

define set-mod-break

echo set breakpoint in system module init function\n

break kernel/module.c:2288

end

define print-mod-segment

set $sect_num=mod->sect_attrs->nsections

set $cur=0

while $cur < $sect_num

printf "Name:%-s Address:0x%x\n",mod->sect_attrs->attrs[$cur]->name,mod->sect_attrs->attrs[$cur]->address

set $cur=$cur+1

end

end

后记:gdb的调试脚本真难写,简单的字符串变量连接和等价判断都显得十分困难,不知道是我水平太差还是gdb的脚本功能太弱,总之比起Windbg来说,内核调试困难程度上了个等级。

【编辑推荐】

【责任编辑:faya TEL:(010)68476606】

点赞 0

linux内核模块调试信息,linux内核模块调试相关推荐

  1. linux查看显示器名称命令,linux 查看显示器信息Linux下查看硬件信息命令大全

    /proc 虚拟的目录,是系统内存的映射.可直接访问这个目录来获取系统信息.其中也包含下面的信息: 主机CPU信息:cpuinfo 主机DMA通道信息:dma 文件系统信息:filesystems 主 ...

  2. 无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件...

    1.问题症状 已经处于Debug模式,运行时完全正常,但是一调试就出现对话框,显示出错信息:"无法找到"XXX.exe"的调试信息,或者调试信息不匹配.未使用调试信息生成 ...

  3. VS 2005 不能调试无法找到调试信息 未使用调试信息生成二进制文件

    VC_关于未使用调试信息生成二进制文件的错误 2011-05-08 18:00 今天VS出个了问题给我闹心坏了,提示出现:Cannot find or open the PDB file 弄了半天终于 ...

  4. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

  5. 错误“无法找到XXX.exe的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件“的解决方案

    Debug模式,运行时完全正常,但是一调试就出现对话框,显示出错信息:  "无法找到"XXX.exe"的调试信息,或者调试信息不匹配.未使用调试信息生成二进制文件.&qu ...

  6. 获取linux命令硬盘信息,Linux下如何获取磁盘信息

    HUX布斯 1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu.其实应该通过Phy ...

  7. linux删除配置信息,linux 配置信息

    # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...

  8. linux显示今日信息,linux lsmod命令详解

    lsmod  (list modules) 语 法:lsmod 功          能: lsmod 命令:是一个小程序,用来显示文件.proc/modules的信息,也就是显示当前内核模块装载的模 ...

  9. VS2013出现“无法找到“xxx.exe”的调试信息,或者调试信息不匹配”错误解决方案

    错误信息如下所示: 解决办法: 选择项目属性,依次序进行如下操作. 1.选择 配置属性->链接器->调试->生成调试信息 改为 是 一般问题都是出现在这个地方,修改完了可以尝试运行, ...

  10. 隐藏linux操作系统版本信息,linux centos 如何查看操作系统版本信息?

    本文介绍常用的四种查看linux下查看系统版本信息的方法: 一.uname -a [app@VM_11_211_centos ~]$ uname -a Linux VM_11_211_centos 2 ...

最新文章

  1. python关键字from,Python 中的 yield from 关键字
  2. android+canvas+图片,android 开发 View _12_ 用Canvas 绘制一张图片(博客中演示用Canvas画验证码图片)...
  3. 有没有高效的记视频笔记方法?--天若OCR文字识别记视频笔记
  4. 装箱问题(洛谷-P1049)
  5. .NET环境下水晶报表使用总结
  6. sell - 配置service
  7. 从排序开始(三)归并排序
  8. 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
  9. Word vba之遍历段落、识别固定段头、设置样式
  10. 网页版俄罗斯方块第1版
  11. 超好用笔记软件Typora安装教程
  12. 计算机网络序号是什么,Excel序号是什么 Excel序号详细介绍
  13. 抖音做外卖会颠覆美团吗?
  14. length与length()的区别
  15. java浅谈线程安全之锁
  16. 解决Cookie乱码问题
  17. 前端常见面试题总结——ES6部分(三)
  18. ipad mini android平板,iPad mini没想带Android平板玩
  19. iOS 更改状态栏/导航栏颜色的几种实用方法
  20. lodop打印基本设置与简单使用

热门文章

  1. c语言 段错误 核心已转移,c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决...
  2. qt5.12 linux版本,Qt 5.12 LTS发布下载,附新功能及更新内容
  3. 手机QQ一键消除红点功能创造灵感
  4. iOS 堆和栈的区别?
  5. 排位赛2-Snakes
  6. 干货资料《Pandas数据分析与实战》配套资料下载,速领
  7. 计算机专业英语 哈工大,用英语说中国名校:哈尔滨工业大学(双语)
  8. 武汉计算机985211大学有哪些,武汉985211大学有哪些
  9. 服务器电源项目,雅特生推出全新CRPS服务器电源系列
  10. 每天一道大厂SQL题【Day17】腾讯外包(微信相关)真题实战(二)