Monday 27 November 2017

0x78 in binary option


Eu quero ligar em dados binários brutos. Id gostaria de colocá-lo em um determinado endereço, ou ter link para um símbolo (char mydata, por exemplo) que eu tenho definido no código. Uma vez que não é um arquivo obj, eu simplesmente não posso ligá-lo. Um post semelhante (Incluir arquivo binário com script GNU ld linker) sugere usar objcopy com a opção - B bfdarch. Objcopy responde com archictecture bfdarch desconhecido. Outra resposta sugere a transformação do objeto em um script LD personalizado e, em seguida, incluir o script LD principal. Neste ponto, eu posso muito bem apenas estar usando um arquivo de inclusão C (que é o que eu estou fazendo agora) para Id não fazer isso. Posso usar objcopy para fazer isso, ou há outra maneira pedida Jun 23 13 at 22:34 O exemplo a seguir funciona para mim: i. e. Não há necessidade de especificar o arco BFD para dados binários (apenas útil / necessário para o código). Basta dizer que a entrada é binária ea saída é. , E itll criá-lo o arquivo. Como os dados binários puros não são específicos da arquitetura, tudo o que você precisa dizer é se a saída é 32bit (elf32-.) Ou 64bit (elf64-.), E se seu pequeno endian / LSB (. - little. como ARM / X86) ou big endian / MSB (. - big., Por exemplo, em SPARC / m68k). Edit: Esclarecimento sobre as opções para objcopy: o uso do - O. Controles de opção: largura de bit (se o arquivo ELF será 32 bits ou 64 bits) endianness (se o arquivo ELF será LSB ou MSB) o uso do - B. Opção controla a arquitetura que o arquivo ELF solicitará Você precisa especificar o - O. Mas o - B. É opcional. A diferença é melhor ilustrada por um pequeno exemplo: i. e. Apenas o especificador de formato de saída elf64-x86-64 não vincula o binário gerado a uma arquitetura específica (é por isso que o arquivo diz que nenhuma máquina). O uso se - B i386 faz isso - e nesse caso, youre disse isso é agora AMD x86-64. O mesmo se aplica ao ARM - O elf32-pouco vs. - O elf32-littlearm - B braço é que no caso anterior, você acaba com um ELF de 32 bits LSB relocável, nenhuma máquina. Enquanto no último, itll ser um ELF 32 bits LSB relocável, ARM. Theres alguma interdependência aqui, bem como você tem que usar-O elf - ltarchgt (não o genérico elf -) opção de saída para ser capaz de fazer-B. Reconhecido. Consulte objcopy --info para obter a lista de formatos ELF / tipos BFD com os quais o binutils pode lidar. Outra abordagem pode ser usar xxd. No arquivo você terá dois símbolos unsigned char yourdata e unsigned int yourdatalen. Primeiro será uma enorme matriz contendo seus dados, segundo será o comprimento da matriz. Compilação do arquivo C criado pode ser tempo levando, por isso, se você estiver usando um sistema de compilação / Makefile manipulá-lo adequadamente evitando recompilações desnecessárias. Xxd deve fazer parte do pacote vim (vim-common) para a sua distribuição Linux.

No comments:

Post a Comment