Может ли 32-битный GDB отладить 64-битный двоичный файл? - PullRequest
0 голосов
/ 10 февраля 2011

Может ли 32-битная отладка gdb 64-битной двоичной системы?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Ответ выше неверен.Вам нужен 64-битный отладчик для отладки 64-битного процесса.Именно по этой причине GDB создает 64-битную копию за кулисами.

0 голосов
/ 13 февраля 2011

Да. 32-битный gdb отлаживает 64-битные двоичные файлы в Solaris, по крайней мере в последней версии.

$ cat /etc/release
                      Oracle Solaris 11 Express snv_151a X86
     Copyright (c) 2010, Oracle and/or its affiliates.  All rights reserved.
                           Assembled 04 November 2010
$ file /usr/bin/gdb
/usr/bin/gdb:   ELF 32-bit LSB executable 80386 Version 1 [FPU], dynamically linked, not stripped, no debugging information available
$ file a 
a:              ELF 64-bit LSB executable AMD64 Version 1, dynamically linked, not stripped
$ gdb a                                 
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-pc-solaris2.11"...
(gdb) b main
Breakpoint 1 at 0x400e9c: file a.c, line 3.
(gdb) run
Starting program: /tmp/a 

Breakpoint 1, main () at a.c:3
3               printf("hello world !");
(gdb) quit
The program is running.  Exit anyway? (y or n) y
$

Однако, если вы посмотрите поближе, этот 32-гигабитный гигабайт запускает 64-битный гигабайт под капотом:

$ truss -f -t execve /usr/bin/gdb a
1793:   execve("/usr/bin/gdb", 0x0804755C, 0x08047568)  argc = 2
1793:   execve("/usr/bin/amd64/gdb", 0x0804755C, 0x08047568)  argc = 2
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-pc-solaris2.11"...
(gdb)

Делает это независимо от того, является ли двоичная отладочная версия 32- или 64-битной.

Я все еще думаю, что способ взаимодействия отладчика с процессом в Solaris не зависит от размера, поэтому технически 32-разрядный двоичный отладчик должен иметь возможность отлаживать 64-разрядную программу.

64-битный GDB способен отлаживать как 32-битные, так и 64-битные двоичные файлы, но 32-битный GDB не может отлаживать 64-битные. Это то, что вы испытываете.

...