
Quem segue o nosso fórum de releases já viu que o projeto GNU liberou a versão 3.40 do Binutils no último sábado. Baixei e compilei para ver o que tinha de diferente. Seguem os novos recursos direto do repositório oficial:
Changes in 2.40: * Objdump has a new command line option --show-all-symbols which will make it display all symbols that match a given address when disassembling. (Normally only the first symbol that matches an address is shown). * Add --enable-colored-disassembly configure time option to enable colored disassembly output by default, if the output device is a terminal. Note, this configure option is disabled by default. * DCO signed contributions are now accepted. * objcopy --decompress-debug-sections now supports zstd compressed debug sections. The new option --compress-debug-sections=zstd compresses debug sections with zstd. * addr2line and objdump --dwarf now support zstd compressed debug sections. * The dlltool program now accepts --deterministic-libraries and --non-deterministic-libraries as command line options to control whether or not it generates deterministic output libraries. If neither of these options are used the default is whatever was set when the binutils were configured. * readelf and objdump now have a newly added option --sframe which dumps the SFrame section.
A opção --show-all-symbols parece interessante de deixar sempre ativada, para o caso de qualquer endereço na saída do objdump coincidir com mais de um símbolo no binário. Não é comum, mas se acontecer, vale a pena saber. 🙂
Habilitar o output colorido em tempo de configuração me parece uma boa ideia e vai servir para os mantenedores de pacotes das distribuições deixarem o output do objdump colorido por padrão. Veja a diferença:
Lembrando que o objdump passou a suportar esse destaque de sintaxe em cores na versão 2.39 do Binutils. O que acontece agora é que existe uma opção em tempo de configuração (leia-se: ./configure) para deixá-la ativada por padrão. 😉
Outro destaque é o suporte ao dump de seções SFrame tanto no readelf quanto no objdump. Como a opção --gsframe já havia sido adicionada no as, o GNU Assembler, dá pra usá-la com a opção -Xassembler do gcc assim:
gcc -Xassembler --gsframe -o binario.elf hello.c
E com o readelf (ou objdump), usar a nova opção:
$ objdump --sframe binario.elf binario.elf: file format elf64-x86-64 Contents of the SFrame section .sframe: Header : Version: SFRAME_VERSION_1 Flags: SFRAME_F_FDE_SORTED Num FDEs: 3 Num FREs: 8 Function Index : func idx [0]: pc = 0x1020, size = 16 bytes STARTPC CFA FP RA 0000000000001020 sp+16 u u 0000000000001026 sp+24 u u func idx [1]: pc = 0x1030, size = 16 bytes STARTPC[m] CFA FP RA 0000000000000000 sp+8 u u 000000000000000b sp+16 u u func idx [2]: pc = 0x1139, size = 59 bytes STARTPC CFA FP RA 0000000000001139 sp+8 u u 000000000000113a sp+16 c-16 u 000000000000113d fp+16 c-16 u 0000000000001173 sp+8 c-16 u
As distros levam um tempinho até subir o novo pacote pra você atualizar no seu Linux. Se não quiser esperar, baixa do repositório oficial e compila. Seguem as instruções:
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.xz $ sudo apt install texinfo flex bison libgmp-dev libmpfr-dev gcc make $ tar xf binutils-2.40.tar.xz $ cd binutils-2.40 $ ./configure --enable-colored-disassembly # já testa a nova opção ;-) $ make $ ./binutils/objdump --version GNU objdump (GNU Binutils) 2.40 Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty.
-
3
Recommended Comments
There are no comments to display.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.