微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么gdb需要root权限来debugging用户程序?

我已经使用gdb相当成功了一段时间,但我最近升级了我的Ubuntu版本,现在看来,我只能得到gdb成功运行我的程序,如果我以root身份运行。 那是,

~ % gdb -q sleep -ex 'run 60' Reading symbols from /bin/sleep...(no debugging symbols found)...done. Starting program: /bin/sleep 60 tcsh: Permission denied. During startup program exited with code 1. (gdb)

而失败

~ % sudo gdb -q sleep -ex 'run 60' Reading symbols from /bin/sleep...(no debugging symbols found)...done. Starting program: /bin/sleep 60 Running .tcshrc warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000 ^C Program received signal SIGINT,Interrupt. 0x00007ffff7adada0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:82 82 ../sysdeps/unix/syscall-template.S: No such file or directory. (gdb)

作品。 一个线索是,在第一种情况下,GDB启动不会运行我的.tcshrc文件,而在第二种情况下,它会。

看来这是一个简单的权限问题,我必须一次性修复这个问题,因为在过去,我从不需要以root身份运行gdb。 然而,经过大量的search,我无法find我可能做了什么(如果我实际上做了什么)。 一个可能的修复 – 设置ptrace权限 – 似乎没有工作。

核心文件中的地址是什么?

如何debugging需要以用户身份从gdb(Eclipse)作为root运行的程序(设置gdb suid root?)

是否有替代gdb的Linux系统?

如何模拟ARM处理器运行时环境并将Linux内核模块加载到其中?

gdb符号不加载

有没有什么需要做的,以允许gdb运行没有root权限的程序? 我知道在OSX中,gdb必须进行编码。 Ubuntu / Linux有类似的东西吗?

GDB strace显示它试图追踪一个无效的地址

GDB支持Python,ImportError没有名为gdb的模块

我如何在nasm中包含debugging信息?

GDB检查内存权限

如何将地址转换为GDB中的特定typesvariables?

这里有一些关于调试gdb问题的想法。 评论对这样的事情是不可行的,所以我把它们作为答案。

尝试-n选项以确保没有加载init文件

使用echo程序而不是sleep 60来使调试变得更简单(在你的例子中,SIGINT可能是特定于睡眠程序的。

运行gdb -batch ,把其余的放到~/.gdbinit :

file /bin/echo run

添加set verbose on 。

完成后不要忘记清理~/.gdbinit 。

这不是一个完整的答案,但事情变得更加清晰。 上面的提示非常有帮助。 我创建了以下.gdbinit文件

展示环境SHELL

文件/ bin / echo

运行“再见”

结果很有趣。 如果SHELL=/usr/tcsh ,我得到一个权限错误,即

〜%setenv SHELL / bin / tcsh

〜%gdb -q -batch

SHELL = / bin / tcsh

tcsh:权限被拒绝。

/home/calhoun/.gdbinit:12:源文件中的错误

在启动程序中退出代码1。

取消设置shell变量的作用:

〜%unsetenv外壳

〜%gdb -q -batch

环境变量“SHELL”未定义。

再见

[下1(进程6992)正常退出]

在这种情况下, run使用/bin/sh展开参数列表。 将SHELL设置为/bin/bash或/bin/dash将使用这些shell来展开参数列表,例如

〜%setenv SHELL / bin / bash

〜%gdb -q -batch

SHELL = / bin / bash

警告:在0x7ffff7ffa000添加的符号文件系统提供的DSO中找不到可加载部分

再见

[下1(进程7280)正常退出]

奇怪的是,“无法加载部分”的错误只发生在shell变量明确设置的时候。

为什么/bin/tcsh不起作用仍然是莫名其妙的。 在我的情况下, /bin/tcsh的权限是

〜%ls -lh / bin / tcsh

lrwxrwxrwx 1 root root 13 Oct 14 2011 / bin / tcsh - > / usr / bin / tcsh

〜%ls -lh / usr / bin / tcsh

-rwxr-xr-x 1 root root 382K 2011年10月14日/ usr / bin / tcsh

这个问题也可能在我的.tcshrc文件中导致shell以非交互模式崩溃。

我将登录shell更改为bash,gdb不再需要root权限进行调试。 这是最新的:

我的.gdbinit文件

(bash)〜%more .gdbinit

展示环境SHELL

文件/ bin / echo

运行“运行.gdbinit”

(bash)〜%

和运行gdb的结果:

(bash)〜%gdb -q -batch

SHELL = / bin / bash

运行.gdbinit

[下1(进程3174)正常退出]

(bash)〜%

我还是不明白为什么tcsh不起作用,而且很好奇。 所以如果有人有可能的解释,请评论

我有同样的问题,原因是有人在gdb可执行文件中设置了粘滞位:

cruiz> ls -l /usr/bin/gdb -rwsr-sr-x 1 root root 4190760 2010-05-05 07:55 /usr/bin/gdb*

我改变了它( chmod 755 /usr/bin/gdb ),现在它工作。

之前:

cruiz> gdb ... (gdb) shell csh: Permission denied.

改变之后:

cruiz> gdb (gdb) shell cruiz>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐