Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1192
ОС: Debian 12

Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение жучара »

Друзья! Ну то есть вопрос предполагает, что в исполняемом файле есть символы и среди них отладочные. Чтобы такого добиться, нужно использовать опцию -g, ну то есть вот как:

Shell

$ cat hello.c
/* hello.c */
#include <stdio.h>
int main ()
{
printf ("Hello, world!\n");
}
$
$ gcc -g hello.c
$
Теперь в исполняемом файле a.out всякие символы и отладочные в том числе. Можно на них глянуть. Это вот все символы кроме отладочных:
все символы
$ nm a.out
000000000000037c r __abi_tag
0000000000004018 B __bss_start
0000000000004018 b completed.0
w __cxa_finalize@GLIBC_2.2.5
0000000000004008 D __data_start
0000000000004008 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dd8 d __do_global_dtors_aux_fini_array_entry
0000000000004010 D __dso_handle
0000000000003de0 d _DYNAMIC
0000000000004018 D _edata
0000000000004020 B _end
0000000000001154 T _fini
0000000000001130 t frame_dummy
0000000000003dd0 d __frame_dummy_init_array_entry
00000000000020e8 r __FRAME_END__
0000000000003fe8 d _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000002014 r __GNU_EH_FRAME_HDR
0000000000001000 T _init
0000000000002000 R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
0000000000001139 T main
U puts@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004018 D __TMC_END__
$
Так а отладочные, я так понимаю, находятся в отдельных секциях, вот эти секции:

Shell

$ objdump -h a.out | grep debug
27 .debug_aranges 00000030 0000000000000000 0000000000000000 0000303f 2**0
28 .debug_info 0000008c 0000000000000000 0000000000000000 0000306f 2**0
29 .debug_abbrev 00000043 0000000000000000 0000000000000000 000030fb 2**0
30 .debug_line 00000050 0000000000000000 0000000000000000 0000313e 2**0
31 .debug_str 00000097 0000000000000000 0000000000000000 0000318e 2**0
32 .debug_line_str 00000020 0000000000000000 0000000000000000 00003225 2**0
$
Надо все символы удалить, а отладочные (наверное, секции выше) оставить. Да казалось бы, всё очень очевидно:

Shell

$ man strip
...
--only-keep-debug
Strip a file, emptying the contents of any sections that would not be stripped by --strip-debug and leaving the debugging sections
intact. In ELF files, this preserves all the note sections in the output as well.
...
$
Вроде всё понятно. Опция --strip-debug удаляет отладочные символы, а всё остальное оставляет. А эта опция, которая --only-keep-debug, наоборот, должна отладочные оставить, а остальное удалить.

Shell

$ gcc -g hello.c
$ strip --only-keep-debug a.out
$ nm a.out
000000000000037c r __abi_tag
0000000000004018 B __bss_start
0000000000004018 b completed.0
w __cxa_finalize@GLIBC_2.2.5
0000000000004008 B __data_start
0000000000004008 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dd8 b __do_global_dtors_aux_fini_array_entry
0000000000004010 B __dso_handle
0000000000003de0 b _DYNAMIC
0000000000004018 B _edata
0000000000004020 B _end
0000000000001154 T _fini
0000000000001130 t frame_dummy
0000000000003dd0 b __frame_dummy_init_array_entry
00000000000020e8 b __FRAME_END__
0000000000003fe8 b _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000002014 b __GNU_EH_FRAME_HDR
0000000000001000 T _init
0000000000002000 B _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
0000000000001139 T main
U puts@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004018 B __TMC_END__
$
Все символы, которые НЕ ЗАТРАГИВАЮТСЯ при опции --strip-debug остались на месте. ЧЯДНТ? Спасибо, кто откликнется. Debian 12
Я просто читаю маны.
Спасибо сказали:
math
Сообщения: 327
Статус: Ъ участник
ОС: LMDE

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение math »

Попробуйте objcopy --only-keep-debug
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1192
ОС: Debian 12

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение жучара »

math писал: ↑
01.11.2026 10:50
пробуйте objcopy --only-keep-debug
оно и нужные преобразования не делает и итоговый файл портит как-то:

Shell

$ ./a.out
Hello, world!
$
$
$ objcopy --only-keep-debug a.out a_dst.out
$
$ ./a_dst.out
bash: ./a_dst.out: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла
$
$
$ ls -l a*
-rwxr-xr-x 1 user user 5560 ноя 1 14:59 a_dst.out
-rwxr-xr-x 1 user user 16944 ноя 1 14:56 a.out
$
$
$
$ nm a_dst.out
000000000000037c r __abi_tag
0000000000004018 B __bss_start
0000000000004018 b completed.0
w __cxa_finalize@GLIBC_2.2.5
0000000000004008 B __data_start
0000000000004008 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dd8 b __do_global_dtors_aux_fini_array_entry
0000000000004010 B __dso_handle
0000000000003de0 b _DYNAMIC
0000000000004018 B _edata
0000000000004020 B _end
0000000000001154 T _fini
0000000000001130 t frame_dummy
0000000000003dd0 b __frame_dummy_init_array_entry
00000000000020e8 b __FRAME_END__
0000000000003fe8 b _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000002014 b __GNU_EH_FRAME_HDR
0000000000001000 T _init
0000000000002000 B _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
0000000000001139 T main
U puts@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004018 B __TMC_END__
$
$
$
$ objdump -h a_dst.out | grep debug
27 .debug_aranges 00000030 0000000000000000 0000000000000000 000003c3 2**0
28 .debug_info 0000008c 0000000000000000 0000000000000000 000003f3 2**0
29 .debug_abbrev 00000043 0000000000000000 0000000000000000 0000047f 2**0
30 .debug_line 00000050 0000000000000000 0000000000000000 000004c2 2**0
31 .debug_str 00000097 0000000000000000 0000000000000000 00000512 2**0
32 .debug_line_str 00000020 0000000000000000 0000000000000000 000005a9 2**0
$
$
$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21564
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение Bizdelnick »

А каким образом, по-Вашему, должен запускаться файл, в котором ничего кроме отладочной информации нет?
И чего Вы вообще добиться-то хотите? Только не надо про «получить файл, в котором не будет никаких символов блабла», надо: «получить файл, который можно будет использовать так-то и так-то».
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1192
ОС: Debian 12

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение жучара »

Bizdelnick писал: ↑
01.11.2026 14:28
А каким образом, по-Вашему, должен запускаться файл, в котором ничего кроме отладочной информации нет?
не совсем понятно, если вы про последний неудачный запуск, то в исполняемом файле (который a_dst.out) как раз таки много чего есть кроме отладочной информации. Повторю:

Shell

$ ./a.out
Hello, world!
$
$
$ objcopy --only-keep-debug a.out a_dst.out
$
$ ./a_dst.out
bash: ./a_dst.out: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла
$
$
$ ls -l a*
-rwxr-xr-x 1 user user 5560 ноя 1 14:59 a_dst.out
-rwxr-xr-x 1 user user 16944 ноя 1 14:56 a.out
$
$
$
$ nm a_dst.out
000000000000037c r __abi_tag
0000000000004018 B __bss_start
0000000000004018 b completed.0
w __cxa_finalize@GLIBC_2.2.5
0000000000004008 B __data_start
0000000000004008 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dd8 b __do_global_dtors_aux_fini_array_entry
0000000000004010 B __dso_handle
0000000000003de0 b _DYNAMIC
0000000000004018 B _edata
0000000000004020 B _end
0000000000001154 T _fini
0000000000001130 t frame_dummy
0000000000003dd0 b __frame_dummy_init_array_entry
00000000000020e8 b __FRAME_END__
0000000000003fe8 b _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000002014 b __GNU_EH_FRAME_HDR
0000000000001000 T _init
0000000000002000 B _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
0000000000001139 T main
U puts@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004018 B __TMC_END__
$
$
$
$ objdump -h a_dst.out | grep debug
27 .debug_aranges 00000030 0000000000000000 0000000000000000 000003c3 2**0
28 .debug_info 0000008c 0000000000000000 0000000000000000 000003f3 2**0
29 .debug_abbrev 00000043 0000000000000000 0000000000000000 0000047f 2**0
30 .debug_line 00000050 0000000000000000 0000000000000000 000004c2 2**0
31 .debug_str 00000097 0000000000000000 0000000000000000 00000512 2**0
32 .debug_line_str 00000020 0000000000000000 0000000000000000 000005a9 2**0
$
$
$
портянка эта показывает, что там есть и отладочная информация и всякая другая. Да, а хотелось бы оставить только отладочную.
Я просто читаю маны.
Спасибо сказали:
math
Сообщения: 327
Статус: Ъ участник
ОС: LMDE

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение math »

жучара ну так запускаться он перестаёт. Я так понял вам это нужно. Если нет, то непонятно что вам нужно.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1192
ОС: Debian 12

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение жучара »

math писал: ↑
01.11.2026 17:22
жучара ну так запускаться он перестаёт. Я так понял вам это нужно. Если нет, то непонятно что вам нужно.
нет, мне нужно как в теме написано:
Как на самом деле удалить из исполняемого файла все символы кроме отладочных?
Ещё раз- делаю преобразования как Вы советуете, итоговый файл a_dst.out Третий раз напишу, распишу портянку по командам:

Имеем вполне себе работоспособный файл ./a.out

Shell

$ ./a.out
Hello, world!
$
Удалим из него все символы, кроме отладочных, как вы и советовали, итоговый файл a_dst.out

Shell

$ objcopy --only-keep-debug a.out a_dst.out
$
Попробуем запустить получившийся файл. И да, он не запустится, но это уже ВТОРОЙ ВОПРОС, почему он не запускается и чё там случилось

Shell

$ ./a_dst.out
bash: ./a_dst.out: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла
$
А первый, самый главный вопрос, что мы поставленной цели не достигли- в файле остались всякие символы, которые и надо был удалить, но не получилось вот они:

Shell

$ nm a_dst.out
000000000000037c r __abi_tag
0000000000004018 B __bss_start
0000000000004018 b completed.0
w __cxa_finalize@GLIBC_2.2.5
0000000000004008 B __data_start
0000000000004008 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dd8 b __do_global_dtors_aux_fini_array_entry
0000000000004010 B __dso_handle
0000000000003de0 b _DYNAMIC
0000000000004018 B _edata
0000000000004020 B _end
0000000000001154 T _fini
0000000000001130 t frame_dummy
0000000000003dd0 b __frame_dummy_init_array_entry
00000000000020e8 b __FRAME_END__
0000000000003fe8 b _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000002014 b __GNU_EH_FRAME_HDR
0000000000001000 T _init
0000000000002000 B _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __libc_start_main@GLIBC_2.34
0000000000001139 T main
U puts@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004018 B __TMC_END__
$
Ну и отладочные символы остались. Это хорошо.

Shell

$ objdump -h a_dst.out | grep debug
27 .debug_aranges 00000030 0000000000000000 0000000000000000 000003c3 2**0
28 .debug_info 0000008c 0000000000000000 0000000000000000 000003f3 2**0
29 .debug_abbrev 00000043 0000000000000000 0000000000000000 0000047f 2**0
30 .debug_line 00000050 0000000000000000 0000000000000000 000004c2 2**0
31 .debug_str 00000097 0000000000000000 0000000000000000 00000512 2**0
32 .debug_line_str 00000020 0000000000000000 0000000000000000 000005a9 2**0
$
Я просто читаю маны.
Спасибо сказали:
math
Сообщения: 327
Статус: Ъ участник
ОС: LMDE

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение math »

Просто перечислите секции, которые вы хотите оставить:

.

$ objcopy --only-section=debug_info --only-section=debug_abbrev ... a.out a_dst.out
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21564
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение Bizdelnick »

Символ — это просто имя, идентификатор. Его наличие не означает, что в файле присутствуют данные или код, на которые он ссылается. Вы просто не на то смотрите. Вот два файлика:

Код: Выделить всё

hello:     формат файла elf64-x86-64

Разделы:
Idx Name          Разм      VMA               LMA               Фа  смещ.  Выр.
  0 .note.gnu.property 00000020  0000000000000350  0000000000000350  00000350  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .note.gnu.build-id 00000024  0000000000000370  0000000000000370  00000370  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .interp       0000001c  0000000000000394  0000000000000394  00000394  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .gnu.hash     00000024  00000000000003b0  00000000000003b0  000003b0  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .dynsym       000000a8  00000000000003d8  00000000000003d8  000003d8  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .dynstr       0000008d  0000000000000480  0000000000000480  00000480  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .gnu.version  0000000e  000000000000050e  000000000000050e  0000050e  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .gnu.version_r 00000030  0000000000000520  0000000000000520  00000520  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  8 .rela.dyn     000000c0  0000000000000550  0000000000000550  00000550  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .rela.plt     00000018  0000000000000610  0000000000000610  00000610  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 .init         00000017  0000000000001000  0000000000001000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 11 .plt          00000020  0000000000001020  0000000000001020  00001020  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .plt.got      00000008  0000000000001040  0000000000001040  00001040  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 13 .text         00000103  0000000000001050  0000000000001050  00001050  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 14 .fini         00000009  0000000000001154  0000000000001154  00001154  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 15 .rodata       00000008  0000000000002000  0000000000002000  00002000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 16 .eh_frame_hdr 0000002c  0000000000002008  0000000000002008  00002008  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 17 .eh_frame     000000a4  0000000000002038  0000000000002038  00002038  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 18 .note.ABI-tag 00000020  00000000000020dc  00000000000020dc  000020dc  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 19 .init_array   00000008  0000000000003dd0  0000000000003dd0  00002dd0  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 20 .fini_array   00000008  0000000000003dd8  0000000000003dd8  00002dd8  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 21 .dynamic      000001e0  0000000000003de0  0000000000003de0  00002de0  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 22 .got          00000028  0000000000003fc0  0000000000003fc0  00002fc0  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 23 .got.plt      00000020  0000000000003fe8  0000000000003fe8  00002fe8  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 24 .data         00000010  0000000000004008  0000000000004008  00003008  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 25 .bss          00000008  0000000000004018  0000000000004018  00003018  2**0
                  ALLOC
 26 .comment      0000001f  0000000000000000  0000000000000000  00003018  2**0
                  CONTENTS, READONLY
 27 .debug_aranges 00000030  0000000000000000  0000000000000000  00003037  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 28 .debug_info   000000ca  0000000000000000  0000000000000000  00003067  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 29 .debug_abbrev 00000083  0000000000000000  0000000000000000  00003131  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 30 .debug_line   0000005a  0000000000000000  0000000000000000  000031b4  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 31 .debug_str    000000a0  0000000000000000  0000000000000000  0000320e  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 32 .debug_line_str 00000032  0000000000000000  0000000000000000  000032ae  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS

Код: Выделить всё

hello.dbg:     формат файла elf64-x86-64

Разделы:
Idx Name          Разм      VMA               LMA               Фа  смещ.  Выр.
  0 .note.gnu.property 00000020  0000000000000350  0000000000000350  00000350  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .note.gnu.build-id 00000024  0000000000000370  0000000000000370  00000370  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .interp       0000001c  0000000000000394  0000000000000394  00000394  2**0
                  ALLOC, READONLY
  3 .gnu.hash     00000024  00000000000003b0  00000000000003b0  00000394  2**3
                  ALLOC, READONLY
  4 .dynsym       000000a8  00000000000003d8  00000000000003d8  00000394  2**3
                  ALLOC, READONLY
  5 .dynstr       0000008d  0000000000000480  0000000000000480  00000394  2**0
                  ALLOC, READONLY
  6 .gnu.version  0000000e  000000000000050e  000000000000050e  00000394  2**1
                  ALLOC, READONLY
  7 .gnu.version_r 00000030  0000000000000520  0000000000000520  00000394  2**3
                  ALLOC, READONLY
  8 .rela.dyn     000000c0  0000000000000550  0000000000000550  00000394  2**3
                  ALLOC, READONLY
  9 .rela.plt     00000018  0000000000000610  0000000000000610  00000394  2**3
                  ALLOC, READONLY
 10 .init         00000017  0000000000001000  0000000000001000  00001000  2**2
                  ALLOC, READONLY, CODE
 11 .plt          00000020  0000000000001020  0000000000001020  00001000  2**4
                  ALLOC, READONLY, CODE
 12 .plt.got      00000008  0000000000001040  0000000000001040  00001000  2**3
                  ALLOC, READONLY, CODE
 13 .text         00000103  0000000000001050  0000000000001050  00001000  2**4
                  ALLOC, READONLY, CODE
 14 .fini         00000009  0000000000001154  0000000000001154  00001000  2**2
                  ALLOC, READONLY, CODE
 15 .rodata       00000008  0000000000002000  0000000000002000  00001000  2**2
                  ALLOC, READONLY
 16 .eh_frame_hdr 0000002c  0000000000002008  0000000000002008  00001000  2**2
                  ALLOC, READONLY
 17 .eh_frame     000000a4  0000000000002038  0000000000002038  00001000  2**3
                  ALLOC, READONLY
 18 .note.ABI-tag 00000020  00000000000020dc  00000000000020dc  000010dc  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 19 .init_array   00000008  0000000000003dd0  0000000000003dd0  00001dd0  2**3
                  ALLOC
 20 .fini_array   00000008  0000000000003dd8  0000000000003dd8  00001dd0  2**3
                  ALLOC
 21 .dynamic      000001e0  0000000000003de0  0000000000003de0  00001dd0  2**3
                  ALLOC
 22 .got          00000028  0000000000003fc0  0000000000003fc0  00001dd0  2**3
                  ALLOC
 23 .got.plt      00000020  0000000000003fe8  0000000000003fe8  00001dd0  2**3
                  ALLOC
 24 .data         00000010  0000000000004008  0000000000004008  00001dd0  2**3
                  ALLOC
 25 .bss          00000008  0000000000004018  0000000000004018  00001dd0  2**0
                  ALLOC
 26 .comment      0000001f  0000000000000000  0000000000000000  000010fc  2**0
                  CONTENTS, READONLY
 27 .debug_aranges 00000030  0000000000000000  0000000000000000  0000111b  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 28 .debug_info   000000ca  0000000000000000  0000000000000000  0000114b  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 29 .debug_abbrev 00000083  0000000000000000  0000000000000000  00001215  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 30 .debug_line   0000005a  0000000000000000  0000000000000000  00001298  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 31 .debug_str    000000a0  0000000000000000  0000000000000000  000012f2  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
 32 .debug_line_str 00000032  0000000000000000  0000000000000000  00001392  2**0
                  CONTENTS, READONLY, DEBUGGING, OCTETS
Секции одни и те же, но посмотрите на их смещение. У секций 2–9, 10–17 и 19–25 во втором файле оно совпадает, то есть секции 2–8, 10–16 и 19–24 пустые. Отсутствует, например, .text. А символы, ссылающиеся туда, есть:

Shell

% nm hello.dbg | grep '\<T\>'
0000000000001154 T _fini
0000000000001000 T _init
0000000000001139 T main
0000000000001050 T _start
%
Потому что они нужны для отладки, без них отладчик не поймёт, где что в корке.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
text
Сообщения: 9

Re: Как на самом деле удалить из исполняемого файла все символы кроме отладочных?

Сообщение text »

жучара в документации так всё и написано - удаляет содержимое, а заголовок оставляет:

Shell

Note - the section headers of the stripped sections are preserved,
including their sizes, but the contents of the section are
discarded. The section headers are preserved so that other tools
can match up the debuginfo file with the real executable, even if
that executable has been relocated to a different address space.
Спасибо сказали: