我有一个文件'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,但它提供的解释是不正确的。
1条答案
按热度按时间7lrncoxx1#
我想知道是什么让他们不同。
看起来,当可执行文件未被删除时,
gdb -p $pid
和(gdb) attach $pid
都读取/proc/$pid/exe
符号链接并使用该可执行文件。但当文件被删除时,GDB无法加载manager_server.ex (deleted)
。1.这看起来像是GDB中的一个bug:它可以直接使用
/proc/$pid/exe
而不是解引用它。1.广发银行 * 警告 * 关于“不理解正在发生的事情”:
字符串
1.以下内容可以正常工作:
型