Почему gdb говорит мне, что указатель составляет 4 байта на x86-64?

Замеченный с gdb на openSUSE, CentOS, Fedora и Ubuntu:

Этот gdb был настроен как "x86_64-unknown-linux-gnu".

(gdb) p sizeof (освобождают *),

1$ = 4

(gdb) p sizeof (долго)

2$ = 4

Почему gdb дает мне неправильные ответы во всех моих 64-разрядных системах?

14
задан federal 12 July 2010 в 21:09
поделиться

1 ответ

Похоже, что gdb выбирает несколько неожиданных значений по умолчанию , когда вы не отлаживаете какой-либо конкретный фрагмент кода . Если вы загрузите 64-битный исполняемый файл, как в: gdb / bin / sh , вы получите менее удивительный результат:

(gdb) p sizeof(void *)
$1 = 8

Вы также можете конкретно указать gdb, что делать:

(gdb) show architecture
The target architecture is set automatically (currently i386)
(gdb) p sizeof(void *)
$1 = 4
(gdb) set architecture
Requires an argument. Valid arguments are i386, i386:x86-64, i8086, i386:intel, i386:x86-64:intel, auto.
(gdb) set architecture i386:x86-64
The target architecture is assumed to be i386:x86-64
(gdb) p sizeof(void *)
$2 = 8
26
ответ дан 1 December 2019 в 10:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: