Linux下 非root用户如何生成coredump

抓取coredump的方式
1、需要kernel支持;
2、配置生成coredump参数;

echo "/mnt/sdcard/core.%e.%t.%p" > /proc/sys/kernel/core_pattern
ulimit -c unlimited

3、设置异常代码发生段错误生成coedump

如果你当初是以用户 A 运行了某个程序,但在 ps 里看到的这个程序的运行用户却是 B 的话,那么这些进程就是调用了 seteuid 了。
或者使用了daemon程序,如下
start-stop-daemon --start --chuid user --exec function &

为了能够让这些进程生成 core dump,需要将 /proc/sys/fs/suid_dumpable 文件的内容改为 1(一般默认是 0)。

root用户:
echo 1 > /proc/sys/fs/suid_dumpable
echo “/mnt/sdcard/core.%e.%t.%p” > /proc/sys/kernel/core_pattern
切到user用户:
ulimit -c unlimited
运行程序,设置异常代码,

int coredump_test()
{
    TYDEBUG("test for coredump\n");
    char *a = "test";
    *a = 1;
    TYDEBUG("2test for coredump\n");
    int *p = NULL;
    *p = 0;
    return 0;
}

[1]+ Segmentation fault (core dumped) /function
就能正常生成coredump 文件了
设置后抓到coredump
可能会遇到coredump信息大小为0KB的情况,可如下处理:
默认情况下,运行 setuid 的程序不会生成核心转储,以防止敏感信息泄露。 要为 setuid 程序启用核心转储(对于正在运行的内核,在重新启动时不持久):
对于 Linux :“suidsafe”(推荐)——通过让核心转储由 root 拥有并且只能由 root 读取来保护特权信息:
echo 2 > /proc/sys/fs/suid_dumpable

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值