加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 是否可以调试由没有gdb标志编译的可执行文件生成的核心

发布时间:2020-12-15 18:24:28 所属栏目:安全 来源:网络整理
导读:是否可以调试由没有gdb标志编译的可执行文件生成的核心文件? 如果有,可以使用任何指针或教程吗? 是的你可以.但这并不容易.我会举个例子. 可以说我有以下程序叫做foo.c: main(){ *((char *) 0) = '';} 我将编译它并确保没有符号: $cc foo.c$strip a.out
是否可以调试由没有gdb标志编译的可执行文件生成的核心文件?

如果有,可以使用任何指针或教程吗?

是的你可以.但这并不容易.我会举个例子.

可以说我有以下程序叫做foo.c:

main()
{
    *((char *) 0) = '';
}

我将编译它并确保没有符号:

$cc foo.c
$strip a.out
$file a.out
a.out: ELF 32-bit LSB executable,Intel 80386,version 1 (SYSV),dynamically linked (uses shared libs),for GNU/Linux 2.6.15,stripped

好的,是时候运行了:

$./a.out
Segmentation fault (core dumped)

哎呀.似乎有一个错误.让我们启动一个调试器:

$gdb ./a.out core
[..]
Reading symbols from /tmp/a.out...(no debugging symbols found)...done.
[..]
Core was generated by `./a.out'.
Program terminated with signal 11,Segmentation fault.
#0  0x0804839c in ?? ()
(gdb) bt
#0  0x0804839c in ?? ()
#1  0xb7724e37 in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6
#2  0x08048301 in ?? ()

嗯,看起来很糟糕.没有符号.我们能弄清楚发生了什么吗?

(gdb) x/i $eip
=> 0x804839c:   movb   $0x0,(%eax)

看起来它试图将值为零的字节存储到EAX寄存器指向的内存位置.为什么会失败?

(gdb) p $eax
$1 = 0
(gdb)

它失败了,因为EAX寄存器指向一个内存地址为零,它试图在该地址存储一个字节.哎呀!

不幸的是,我没有指向任何好教程的指针.搜索“gdb逆向工程”会给出一些可能有用的零碎的链接.

更新:

我注意到这是关于调试客户的核心转储的评论.将剥离的二进制文件发送给客户时,应始终保留该二进制文件的调试版本.

我建议不要剥离甚至提供源代码.我写的所有代码都带有源代码的客户.我一直在客户方面面对一个不称职的供应商,该供应商已经发布了一个破碎的软件,但不知道如何解决它.太糟糕了.

这似乎实际上是这个问题的重复:

Debug core file with no symbols

那里还有一些额外的信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读