- 论坛徽章:
- 0
|
sysrq+p 可以看到寄存器,发现一个问题:
X86 平台 32位下:
当正处于内核态时 打印出来
[17403.806692] EIP: 0060:[<c100b408>] EFLAGS: 00000246 CPU: 0
[17403.806698] EIP is at mwait_idle+0x78/0x200
[17403.806700] EAX: 00000000 EBX: c19ae4bc ECX: 00000000 EDX: 00000000
[17403.806702] ESI: 00000000 EDI: c1963000 EBP: 01d46003 ESP: c1961fcc
[17403.806705] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
当正处于用户态时 打印出来的
Pid: 3169, comm: knotify4 Not tainted 3.1.0-1.3-desktop-mod #1 System manufacturer System Product Name/P5B-Deluxe
[17548.158737] EIP: 0073:[<b61caab9>] EFLAGS: 00000282 CPU: 0
[17548.158741] EIP is at 0xb61caab9
[17548.158742] EAX: 00000000 EBX: b63a9ff4 ECX: bfe84130 EDX: 00000001
[17548.158744] ESI: bfe84178 EDI: 0000448c EBP: 08090a20 ESP: bfe84120
[17548.158746] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b
发现无论是在用户态还是内核态 DS 都是0x7b ,我根据arch/x86/include/asm/segment.h 查了下发现32位下 __KERNEL_CS=0X60,__KERNEL_DS=0X68,__USER_DS=0X7B,__USER_CS=0X73
所以当处于内核态时按下sysrq+p 应该DS:0068 才对 。 难道是打印的时候内核还没有切换DS ?
对于X86_64 64位 下 状况更奇怪 。根据segment.h ,应该 __KERNEL_CS=0X10, __KERNEL_DS=0X18, __USER_DS=0X2B ,__USER_CS=0X33 才对。但结果是:
用户态下:
RIP: 0033:[<偏移>]
.......
CS:0010 DS: 0000
看样子全乱套
内核态下:
RIP: 0010:[<偏移>]
.......
CS:0010 DS: 0000
DS 为全0
我有点搞不懂了, 这是sysrq+p 不准 ,还是怎么回事 谁能解释一下 ?
|
|