当我附加到进程(64 位和 32 位)时,我的 gdb 生成不同的核心文件

问题描述 投票:0回答:1

我有一个文件“manager_server.ex”

$ file manager_server.ex
manager_server.ex: ELF 32-bit LSB  executable, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=709713ebf61f867e84d1d2818baea02b562c7ee7, not stripped

我运行了这个文件,然后将其删除了。现在我尝试通过 gdb(generate-core-file) 生成核心文件,但我得到不同的核心文件(64 位和 32 位)。 这是正确的核心文件:

$ sudo gdb manager_server.ex -p 28108
(gdb) generate-core-file
(gdb) quit
$ file core.28108
core.28108: ELF 32-bit LSB  core file Intel 80386, version 1 (SYSV), SVR4-style, from '/home/ubuntu/sstx10006/manager_server'

那些不是:

$ sudo gdb
(gdb) set archi i386
(gdb) attach 28108
(gdb) generate-core-file
(gdb) quit
$ file core.28108
core.28108: ELF 64-bit LSB  core file x86-64, version 1 (SYSV), SVR4-style, from '/sstx10006/manager_server'
$ sudo gdb
(gdb) set archi i386:x86-64
(gdb) attach 28108
(gdb) generate-core-file
(gdb) quit
$ file core.28108
core.28108: ELF 64-bit LSB  core file x86-64, version 1 (SYSV), SVR4-style, from '/home/ubuntu/sstx10006/manager_server'
$ sudo gdb
(gdb) attach 28108
(gdb) generate-core-file
(gdb) quit
$ file core.28108
core.28108: ELF 64-bit LSB  core file x86-64, version 1 (SYSV), SVR4-style, from '/sstx10006/manager_server'

我想知道是什么让他们与众不同。我询问了 ChatGPT,但它提供的解释不正确。

linux gdb core-file
1个回答
0
投票

我想知道是什么让他们与众不同。

看起来,当可执行文件被not删除时,

gdb -p $pid
(gdb) attach $pid
都会读取
/proc/$pid/exe
符号链接并使用该可执行文件。但是当文件被删除时,GDB无法加载
manager_server.ex (deleted)

  1. 这看起来像是 GDB 中的一个错误:它可以直接使用
    /proc/$pid/exe
    而不是取消引用它。
  2. GDB 警告“不明白发生了什么”:
(gdb) attach 2655529
Attaching to process 2655529
No executable file now.
warning: Could not load vsyscall page because no executable was specified
  1. 以下工作正常:
gdb /proc/2655529/exe
attach 2655529
(gdb) gcore
© www.soinside.com 2019 - 2024. All rights reserved.