Entendendo o comando objcopy em um livro [closed]

0

Estou lendo um livro e está falando sobre o ELF. Eu entendo que é um formato de arquivo para arquivos executáveis. Existe um comando que executei em uma VM e estou tendo problemas para entender o que isso faz.

objcopy -O binary -j .interp /bin/ls /dev/stdout

Eu abri o arquivo /dev/stdout após a execução e ele parece uma informação de log de algum tipo.

    
por MintCollie 20.11.2018 / 07:04

1 resposta

4

Bem-vindo ao Unix & Linux SE!

Um arquivo ELF tem um cabeçalho binário ou dois e várias seções nomeadas. A Wikipedia tem uma descrição da estrutura de um arquivo ELF, se você estiver interessado.

Seu comando objcopy -O binary -j .interp /bin/ls /dev/stdout exibe apenas o conteúdo da seção .interp do arquivo /bin/ls exatamente como está ( -O binary ) para "file" /dev/stdout .

/dev/stdout deve ser um link simbólico para o descritor de arquivo # 1 do processo atual, ou seja, seu fluxo de saída padrão. Basicamente, é apenas uma maneira de dizer a um programa que espera gravar sua saída em um arquivo nomeado para usar a saída padrão. Alguns programas podem fazer isso se você especificar o nome do arquivo de saída como apenas - , mas aparentemente objcopy não segue essa convenção.

Se você estiver vendo "algum tipo de informação de log" ao abrir /dev/stdout , isso pode significar que esse link simbólico foi acidentalmente substituído por algum programa ou script que foi executado como root. Deve ficar assim:

$ ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 Nov 17 23:25 /dev/stdout -> /proc/self/fd/1

Em um sistema x86 de 64 bits, o comando objcopy deve exibir algo como /lib64/ld-linux-x86-64.so.2 . Como a saída não inclui um caractere de alimentação de linha no final, ele pode aparecer na mesma linha do próximo prompt de comando, dificultando a localização:

[my command prompt]$ objcopy -O binary -j .interp /bin/ls /dev/stdout
/lib64/ld-linux-x86-64.so.2[my command prompt]$

Em um binário x86 de 32 bits, a saída seria algo como /lib/ld-linux.so.2 .

A saída é o nome do arquivo do interpretador de programas também conhecido como o linker / loader dinâmico que deve ser usado com o binário examinado. Você pode obter mais informações sobre isso usando os comandos man ld.so ou man ld-linux em seu sistema.

    
por 20.11.2018 / 08:16

Tags