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

bogh5gae  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(115)

我有一个文件'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,但它提供的解释是不正确的。

7lrncoxx

7lrncoxx1#

我想知道是什么让他们不同。
看起来,当可执行文件未被删除时,gdb -p $pid(gdb) attach $pid都读取/proc/$pid/exe符号链接并使用该可执行文件。但当文件被删除时,GDB无法加载manager_server.ex (deleted)
1.这看起来像是GDB中的一个bug:它可以直接使用/proc/$pid/exe而不是解引用它。
1.广发银行 * 警告 * 关于“不理解正在发生的事情”:

(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

相关问题