Qual é a diferença entre “executável LSB” (ET_EXEC) e “objeto compartilhado LSB” (ET_DYN)?

1

Com dois arquivos, um compilado e vinculado a gcc e o outro manualmente com nasm e ld , obtenho

  • Objeto compartilhado ELB de 32 bits ELF ...
  • executável ELB de 32 bits ELF ...

Qual é a diferença entre essas duas coisas? Eu posso ver com readelf -h que um é

  • Tipo: DYN (Shared object file)
  • Tipo: EXEC (Executable file)

Eu posso ver isso documentado em Wikipedia como ET_DYN e ET_EXEC . Quais são as diferenças práticas entre esses dois?

    
por Evan Carroll 30.09.2018 / 21:05

1 resposta

0

Parece que isso tem algo a ver com o Independent Position Executable (PIE). Quando o GCC compila o executável por padrão, torna-o PIE, que altera o sinalizador de saída no cabeçalho ELF para ET_DYN .

Você pode desativar a geração de executáveis do PIE com

  • gcc -no-pie

Se você está vendo isso, verifique as opções padrão gcc está configurado com gcc -v , você deve ver algo como --enable-default-pie .

Resposta inspirada por este envio no StackOverflow . Eu pretendo jogar mais com ele e explique mais aqui.

    
por 30.09.2018 / 21:14

Tags