Os sinalizadores na saída são BFD - Descritores de Arquivos Binários . Eles são parte do pacote binutils, você pode ler o que os sinalizadores significam se você olhar no arquivo de cabeçalho do bfd /usr/include/bfd.h
para seu significado ou aqui .
A referência aos "sinalizadores" 0x00000112 é o que é chamado de campo de sinalizador . É binário e cada bit representa uma característica específica, uma significa que a bandeira está ativada ou definida, e um zero significa que não é. Observe também que o "0x ..." significa que é um valor hexadecimal, portanto, se você convertê-lo de HEX para BIN:
0x00000112 = 0001 0001 0010 em binário.
Assim, os sinalizadores que correspondem aos 2º, 5º e 9º bits no campo sinalizador são definidos. Esses são os sinalizadores que estão sendo mostrados pelo nome na terceira linha de saída do comando objdump
.
Significado das Bandeiras
Os 3 sinalizadores que o seu executável possui são bastante padrão. Leia os bits da direita para a esquerda!
1º bit - 0000 0000 0010
/* BFD is directly executable. */
#define EXEC_P 0x02
2º bit - 0000 0001 0000
/* BFD has symbols. */
#define HAS_SYMS 0x10
3º bit - 0001 0000 0000
/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
linker sets this by default, but clears it for -r or -n or -N). */
#define D_PAGED 0x100
Então, o que é preciso?
- este é um arquivo executável
- inclui uma tabela de símbolos se você quiser depurá-la usando o Depurador do Gnu,
gdb
, para que as funções tenham nomes significativos - o executável é vinculado dinamicamente às bibliotecas padrão, como glibc etc.
Endereço inicial
A última linha, start address ..., é como você adivinhou, onde o atual .CODE começa para o executável.