首页
社区
课程
招聘
[求助] printk导致内核崩溃
2020-3-12 17:42 3876

[求助] printk导致内核崩溃

2020-3-12 17:42
3876

asmlinkage long my_sys_openat(int dfd, const char __user *filename, int flags, umode_t mode){
    if(current->comm != NULL && strstr(name, current->comm))
    {
        printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode); //单独这条printk崩溃
        printk(KERN_INFO "fuck kernel: sys_openat(%d, %d, %d)\n", dfd, flags, mode); //单独这条printk可以正常输出
        
        ... //随便写点代码
        printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode); //正常
    }
    return sys_openat(dfd, filename, flags, mode);
}
请求大佬们帮忙看下:
为啥函数体单独写

printk(KERN_INFO "fuck kernel: sys_openat(%d, %s, %d, %d)\n", dfd, filename, flags, mode);

这条语句,内核输出一部分就崩溃了呀。奇怪的是这条代码上面随便加点东西有可以正常输出了。


单独 printk(KERN_INFO "fuck kernel: sys_openat(%s)\n", filename); 这条语句也会直接崩溃,怀疑是filename取到非法值了。


但,后面我自己封装了一个获取字符串的函数,可以正常获取打印,并没有取到非法值,就是直接printk的时候不行,很是不解,求大佬们解答下,谢谢。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 12058
活跃值: (15384)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-3-12 18:20
2
0
尝试一些格式化字符串,随便写点东西,看看程序还是不是正常运行的
雪    币: 110
活跃值: (560)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yzlmars 2020-3-12 19:42
3
1
pureGavin 尝试一些格式化字符串,随便写点东西,看看程序还是不是正常运行的
打印常规字符串可以正常工作,现在sprintf把filename格式化到buffer中,然后再printk buffer可以正常工作,算是迂回解决了问题,虽然不知道直接printk为啥内核会oops
雪    币: 12058
活跃值: (15384)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-3-13 01:04
4
0
yzlmars 打印常规字符串可以正常工作,现在sprintf把filename格式化到buffer中,然后再printk buffer可以正常工作,算是迂回解决了问题,虽然不知道直接printk为啥内核会oops[ ...
我说的格式化字符串是指:%p,%n;之类的格式化字符串漏洞
雪    币: 110
活跃值: (560)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yzlmars 2020-3-13 08:13
5
0
pureGavin 我说的格式化字符串是指:%p,%n;之类的格式化字符串漏洞
%p,%n均可以正常工作,%p输出结果均为00000000,%n输出正常,我的内核是64位内核,换成%llx可以正常输出字符串指针值,%p无法输出正常指针值均为00000000
雪    币: 12058
活跃值: (15384)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-3-13 11:14
6
0
yzlmars %p,%n均可以正常工作,%p输出结果均为00000000,%n输出正常,我的内核是64位内核,换成%llx可以正常输出字符串指针值,%p无法输出正常指针值均为00000000
问题可能是不能让%p和%n正常工作,而且%n并不是输出,而是任意地址写。。。。
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xghoecki 2020-3-13 18:01
7
1
帮顶
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_vwfvvmcm 2023-5-19 23:07
8
0
您好,问一下您是怎么封装的吗,我因为简单的加入了printk语句导致系统卡住进不去了,我猜测可能的原因是缓冲区溢出导致系统崩溃了,但不知道怎么解决
游客
登录 | 注册 方可回帖
返回