当前位置: 技术问答>linux和unix
内核模块调试
来源: 互联网 发布时间:2016-03-12
本文导语: eax: 0027fc00 ebx: 00000000 ecx: 000003b3 edx: 08000000 esi: e004cff8 edi: e04004d0 ebp: df6f7f90 esp: df6f7f50 ds: 0068 es: 0068 ss: 0068 Process foo (pid: 393, st...
eax: 0027fc00 ebx: 00000000 ecx: 000003b3 edx: 08000000
esi: e004cff8 edi: e04004d0 ebp: df6f7f90 esp: df6f7f50
ds: 0068 es: 0068 ss: 0068
Process foo (pid: 393, stackpage=df6f7000)
Stack: e004a638 ffffffea c2390480 df6f7f90 df6f7f74 00000000 08000000 df6f7f80
0000e540 e0049284 c01ba210 0020f000 08000000 03000000 e5400000 e0400000
0000000c c014a383 c2390480 bffffb40 0000000c c23904a0 00000000 00000000
Call Trace: [] (0xdf6f7f50))
[] (0xdf6f7f74))
[] (0xdf6f7f78))-----------------write_chan
[] (0xdf6f7f94))-----------------sys_write
[] (0xdf6f7fc0))-----------------system_call
Code: 26 f3 0f 6f 06 26 f3 0f 7f 07 81 c6 10 00 00 00 81 c7 10 00
Segmentation fault
从System.map里能找到Call Trace里的三个内核函数,但是最终出错的是insmod的模块,应该怎么从e004a638、e0049284这些地址找到对应的函数呢?或者说,怎么能找到模块的起始地址?
指令如下:(用ndisasm -b 32得到的)
26F30F6F06 movdqu xmm0,[es:esi]
26F30F7F07 movdqu [es:edi],xmm0
81C610000000 add esi,0x10
81C710000000 add edi,0x10
但是这组指令在模块里多次出现,不知道是哪个。
esi: e004cff8 edi: e04004d0 ebp: df6f7f90 esp: df6f7f50
ds: 0068 es: 0068 ss: 0068
Process foo (pid: 393, stackpage=df6f7000)
Stack: e004a638 ffffffea c2390480 df6f7f90 df6f7f74 00000000 08000000 df6f7f80
0000e540 e0049284 c01ba210 0020f000 08000000 03000000 e5400000 e0400000
0000000c c014a383 c2390480 bffffb40 0000000c c23904a0 00000000 00000000
Call Trace: [] (0xdf6f7f50))
[] (0xdf6f7f74))
[] (0xdf6f7f78))-----------------write_chan
[] (0xdf6f7f94))-----------------sys_write
[] (0xdf6f7fc0))-----------------system_call
Code: 26 f3 0f 6f 06 26 f3 0f 7f 07 81 c6 10 00 00 00 81 c7 10 00
Segmentation fault
从System.map里能找到Call Trace里的三个内核函数,但是最终出错的是insmod的模块,应该怎么从e004a638、e0049284这些地址找到对应的函数呢?或者说,怎么能找到模块的起始地址?
指令如下:(用ndisasm -b 32得到的)
26F30F6F06 movdqu xmm0,[es:esi]
26F30F7F07 movdqu [es:edi],xmm0
81C610000000 add esi,0x10
81C710000000 add edi,0x10
但是这组指令在模块里多次出现,不知道是哪个。
|
用GDB在函数入口处加个断点看一下,一步步跑
PS:我试过的一般segmentation fault都是配置出了问题..
PS:我试过的一般segmentation fault都是配置出了问题..
|
是不是用到了memcpy()之类的函数,里面的指针为空
还有指针之类的可以做为跟踪对象
还有指针之类的可以做为跟踪对象
|
不能对模块反汇编吗?