我有一个文件“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,但它提供的解释不正确。
我想知道是什么让他们与众不同。
看起来,当可执行文件被not删除时,
gdb -p $pid
和(gdb) attach $pid
都会读取/proc/$pid/exe
符号链接并使用该可执行文件。但是当文件被删除时,GDB无法加载manager_server.ex (deleted)
。
/proc/$pid/exe
而不是取消引用它。(gdb) attach 2655529
Attaching to process 2655529
No executable file now.
warning: Could not load vsyscall page because no executable was specified
gdb /proc/2655529/exe
attach 2655529
(gdb) gcore