Wednesday 5 July 2017

0x200 in binary option


Hex para Conversor Decimal Hexadecimal são números com base 16. Consiste em um conjunto de 16 números onde 0-9 são representados como 0,1,2,3,4,5,6,7,8,9 e 10-15 são Representado como A, B, C, D, E, F. Ele não tem símbolos como 10 ou 11, por isso tomar letras como símbolo do alfabeto Inglês. Decimal é o sistema de dez números de dez base e Binário é um sistema de números de base 2 (0s e 1s). Use Hex to Decimal Converter para converter hexadecimal para binário (números com base 2) e números decimais (números com base 10). Converter Hexadecimal para código binário para adicionar este calci ao seu site Apenas copie e cole o código abaixo para sua página da web onde você deseja exibir esta calculadora. 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 o 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 primeiro caso, 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 ser parte do pacote vim (vim-common) para sua distribuição Linux. Srecexamples srecexamples minus exemplos de como usar SRecord DESCRIÇÃO O comando sreccat é muito poderoso, devido à capacidade de combinar os filtros de entrada de maneira quase ilimitada. Esta página de manual descreve alguns deles. Esta página de manual descreve como usar os vários arquivos de entrada, filtros de entrada e geradores de entrada. Mas estes são apenas exemplos, para obter detalhes mais completos, consulte a página de manual srecinput (1). As linhas de comandos são demasiado longas Se você estiver abandonado em um sistema operacional com limites de comprimento de linha de comando absurdamente curtos, alguns dos comandos a seguir podem ser muito longos. Você pode contornar esse problema colocando sua linha de comando em um arquivo, diga fred. txt. E então diga sreccat (1) para ler este arquivo para o resto de sua linha de comando, como este. Isso também tem a vantagem de permitir comentários, permitindo que você escreva suas opções de linha de comando sobre várias linhas, e até mesmo recuo para fazer o comando mais Claro. Os comentários começam em um rdquo de ldquo e estendem-se até o fim da linha. As linhas em branco são ignoradas. Claro, você poderia sempre atualizar para o Linux, que tem sido sugando menos para mais de 22 anos agora. Se você tem uma maneira inteligente de usar SRecord, ou ter resolvido um problema difícil com SRecord, você poderia contribuir para esta página de manual, tornando-o mais útil para todos. Envie seu exemplo em um e-mail para o endereço de e-mail no final desta página de manual. CONVERSÃO DE FORMATOS DE ARQUIVO A mais simples das coisas que o sreccat (1) pode fazer é converter de um formato de arquivo EPROM para outro. Tenha em mente, ao ler esta seção, que você pode fazer muitas dessas coisas simultaneamente em um comando. Eles são apenas quebrados separadamente para torná-los mais fáceis de entender. Intel para a Motorola Um dos exemplos mais simples é a conversão de arquivos do formato hexadecimal da Intel para o formato S-Record da Motorola: sreccat intel-file minusintel minuso srec-file Note que o especificador de formato segue imediatamente o nome do arquivo que está descrevendo. Escolha qualquer dois formatos que SRecord entende, e pode converter entre todos eles. (Exceto as saídas assembler, BASIC, C e FPGA que são somente de gravação.) Motorola para Intel Converter de outra maneira é tão simples: O formato padrão é Motorola S-Record formato, por isso não precisa ser especificado após o arquivo nome. Formas diferentes do mesmo formato É lamentavelmente comum que alguns programadores EPROM addle-pated apenas implementar uma parte da especificação utilizada para representar os seus ficheiros hex. Por exemplo, alguns compiladores produzem ldquos19rdquo dados da Motorola (isto é, registros de dados S1 com registros de início S9, campos de endereço de 16 bits), o que seria OK, exceto que alguns programadores de EPROM insistem em ldquos37rdquo dados da Motorola (isto é, Registros de início, campos de endereço de 32 bits). É possível converter de uma forma Motorola para outra usando a opção minusAddress-Length: sreccat short. srec minuso long. srec minusaddress-length4 Este comando diz para usar endereços de quatro bytes (32 bits) na saída. Esta seção também se aplica a arquivos hexadecimais Intel, pois eles também têm a capacidade de selecionar de uma variedade de largura de endereço. Para converter de uma forma Intel para outra usando a mesma opção minusAddress-Length: sreccat i32.hex minuso i16.hex minusaddress-length3 Este comando diz para usar ldquoi16hexrdquo endereços segmentados de 20 bits na saída. Um endereço comprimento de 4 é o padrão (ldquoi32hexrdquo 32-bit endereçamento linear), e um endereço comprimento de 2 solicitaria ldquoi8hexrdquo 16-bit endereçamento. Comprimentos de Linha De vez em quando você vai encontrar um programador de EPROM débil de mente que canrsquot lidar com linhas de texto longo, eles assumem que nunca haverá apenas 46 caracteres por linha e barf quando vêem os comprimentos de linha padrão que sreccat (1) Escreve (ou pior, obter um scribble pilha e falha). A definição do formato de registro S Motorola permite até 255 bytes de carga útil, ou linhas de 514 caracteres, além da terminação de linha. Todos os programadores de EPROM devem ter buffers de linha suficientemente grandes para lidar com registros tão grandes. Poucos fazem. A opção moinsline-length pode ser usada para especificar o comprimento máximo da linha (não incluindo a nova linha) a ser usado na saída. Por exemplo, 16 byte payloads para Motorola sreccat long. srec minuso short. s19 minusline-length46 A opção de comprimento de linha interage com a opção de comprimento de endereço, por isso alguns ajustes para otimizar para sua situação particular muitos ser necessário. Tamanho de bloco de saída De vez em quando você vai se deparar com um antigo programador EPROM daft que canrsquot lidar com longos registros de dados, eles assumem que só haverá nunca mais de 16 bytes de dados por registro, e barf quando vêem o padrão 32 Byte que sreccat (1) escreve (ou pior, o buffer over-run provoca uma caminhada de grama alta que rabiscos em sua EPROM). A definição de formato hexadecimal Intel permite até 255 bytes de dados de carga útil por registro. Todos os programadores de EPROM devem ter buffers de dados suficientemente grandes para lidar com registros tão grandes. Boa sorte com isso. A opção minusOutput-Block-Size pode ser usada para especificar o tamanho de dados de registro a ser usado na saída. Por exemplo, Intel hex com 16 byte cargas úteis: sreccat long. srec minuso short. hex minusintel minusobs16 Cuidado para não colocar a opção minusobs entre o nome do arquivo de saída eo especificador de formato. Apenas os dados, por favor Há alguns programadores EPROM bonehead que só pode lidar com registros de dados e são incapazes de lidar com registros de cabeçalho ou registros de endereço de início de execução. Se você tiver esse problema, a opção minusdata-only pode ser usada para suprimir apenas sobre tudo, exceto os dados. O efeito real depende do formato, é claro, porque alguns donrsquot ter esses recursos de qualquer maneira. A opção minusdata-only é mão curta. Existem quatro propriedades que podem ser minusdisabled ou minusenabled separadamente. Consulte a página man do sreccat (1) para obter uma descrição das opções minusdisabled e minusenabled. Por exemplo, o programador neanderthal EPROM requer hexadecimal Motorola com registros de cabeçalho (S0), mas sem registros de contagem de dados (S5). Não usando a opção minusdata-only tem it barf no registro de contagem de dados, mas usando a opção minusdata-only tem it barf no registro de cabeçalho ausente. Usando a opção minusdisabledata-count deixaria o registro de cabeçalho intacto enquanto suprime o registro de contagem de dados. Cabeçalhos de dados O comando sreccat (1) sempre tenta passar por registros de cabeçalho inalterados, sempre que eles estão presentes. Ele ainda tenta preservá-los através de alterações de formato de arquivo, para o limite dos formatos de arquivo são capazes de. Se não houver nenhum registro de cabeçalho de arquivo e você desejar adicionar um, ou desejar substituir um registro de cabeçalho de arquivo existente, use a opção de seqüência de caracteres lessheader. Você precisará citar a seqüência de caracteres (para isolá-lo do shell) se ele contiver espaços ou shell meta-caracteres. Endereços de Início de Execução O comando sreccat (1) sempre tenta passar por endereços de início de execução (normalmente ocorrendo no final do arquivo), sempre que eles estão presentes. Eles são ajustados juntamente com os registros de dados pelo filtro minusoffset. Ele ainda tenta preservá-los através de alterações de formato de arquivo, para o limite dos formatos de arquivo são capazes de. Se não houver nenhum registro de endereço de início de execução e você desejar adicionar um, ou se desejar substituir um registro de endereço de início de execução existente, use a opção minusexecution-start-address number. Observe: o endereço de início de execução é um conceito diferente do primeiro endereço na memória de seus dados. Pense nisso como um endereço ldquogotordquo para ser saltado para pelo monitor quando a carga hex está completa. Se você quiser alterar onde seus dados começam na memória, use o filtro minusoffset. Fixação de Checksums Alguns desenvolvedores de firmware embutidos são selados com ferramentas featherbrained que produzem somas de verificação incorretas, que os modelos mais vigilantes do programador EPROM não vai aceitar. Para corrigir as somas de verificação em um arquivo, use a opção minusignore-checksums. Por exemplo: sreccat broken. srec minusignore-checksums minuso fixed. srec As soma de verificação em broken. srec são analisadas (ainda está e erro se estiverem ausentes), mas não são verificadas. O arquivo fixed. srec resultante tem somas de verificação corretas. A opção minusignore-checksums só se aplica à entrada. Esta opção pode ser usada em qualquer formato de arquivo que tenha checksums, incluindo hex hex. Descobrindo os formatos de mistério Veja o que formato é Esta seção, abaixo, para descobrir e converter formatos de arquivo de carga EPROM mistério. ARQUIVOS BINÁRIOS É possível converter para e de arquivos binários. Você pode até mesmo misturar arquivos binários e outros formatos juntos no mesmo comando sreccat (1). Escrevendo arquivos binários A maneira mais simples de ler um arquivo hexadecimal e convertê-lo em um arquivo binário tem esta aparência: sreccat fred. hex minuso fred. bin minusbinary Isso lê o arquivo hexadecimal fred. srec da Motorola e o grava no fred. bin como Binário. Observe que os dados são colocados no arquivo binário no byte offset especificado pelos endereços no arquivo hexadecimal. Se houver furos nos dados eles são preenchidos com zero. Isso é, naturalmente, comum com saída de vinculador onde o código é colocado começando em um determinado local na memória. Por exemplo, quando você tem uma imagem que começa em 0x100000, o primeiro 1 MB do arquivo binário de saída será zero. Você pode cancelar automaticamente esse deslocamento usando um comando como sreccat fred. hex minusoffset minus minusminimum-addr fred. hex minuso fred. bin O comando acima funciona ao deslocar o arquivo fred. hex mais baixo na memória pelo menor endereço no fred. hex filersquos dados. Consulte também a página do manual srecbinary (5) para obter detalhes adicionais. Leitura de arquivos binários A maneira mais simples de ler um arquivo binário e convertê-lo parece este sreccat fred. bin minusbinary minuso fred. srec Isso lê o arquivo binário fred. bin e grava todos os seus dados de volta para fora novamente como um Motorola S-Record arquivo . Muitas vezes, este binário isnrsquot exatamente onde você deseja que ele no espaço de endereço, porque é assumido para residir no endereço zero. Se você precisa movê-lo em torno de usar o filtro minusoffset. Sreccat fred. bin minusbinary minusoffset 0x10000 minuso fred. srec Você também precisa evitar arquivo ldquoholesrdquo que são preenchidos com zero. Você pode usar o filtro minuscrop, você poderia usar o filtro minusunfill se você donrsquot saber exatamente onde os dados são. Sreccat fred. bin minusbinary minusunfill 0x00 512 minuso fred. srec O comando acima remove corridas de zero bytes que são 512 bytes de comprimento ou mais. Se o arquivo contiver 1 GB de bytes zero, isso vai ser lento, pode ser melhor usar o comando dd (1) para cortar e cortar primeiro. JUNTANDO OS ARQUIVOS JUNTOS O comando sreccat toma seu nome do comando UNIX cat (1), que é abreviação de ldquocatenaterdquo ou ldquoto joinrdquo. O comando sreccat junta arquivos de carga EPROM juntos. Tudo em um Unindo EPROM carregar arquivos em conjunto em um único arquivo é simples, basta nomear quantos arquivos na linha de comando como você precisa: sreccat infile1 infile2 minuso outfile Este exemplo é todos os arquivos Motorola S-Record, porque thatrsquos o formato padrão. Você pode ter vários formatos no comando, e sreccat (1) ainda funcionará. Você não precisa nem imprimir o mesmo formato: sreccat infile1 minusspectrum infile2 minusneedham minuso outfile minussignetics Estes são todos os formatos antigos, porém não é incomum ter que misturar e combinar os formatos Intel e Motorola no projeto único. Sobreposição de dois arquivos de dados É comum querer ldquojoinrdquo dois arquivos hex juntos, sem quaisquer alterações de endereço. Na suposição que nenhum arquivo intercepta com o outro. Este é um ldquolayersrdquo simples, é bastante comum para os vinculadores para a saída do código principal e, em seguida, um monte de deslocalização e salto destino, escrevendo um dois arquivos em camadas. Quase sempre você vê um erro sreccat: two. srec: 49282: contraditório 0x00000000 valor (anterior 0x00, este 0x80) Isso significa que os arquivos realmente se cruzam, eles tentam definir o mesmo local. Você pode transformar o erro em um aviso, usando a opção de linha de comando moinscontradictory-byteswarning. Mas isso provavelmente irá gerar um bazillion avisos. O passo necessário é cortar o primeiro arquivo, para evitar as regiões que o segundo arquivo está indo o sobrescrever. Dependendo do seu linker isso não terá erros (mas se quiser outra camada, mais jiggery-pokery é necessário). Filtragem após junção Há momentos em que você deseja unir dois conjuntos de dados juntos e, em seguida, aplicar um filtro para o resultado unido. Para fazer isso, use parênteses. O exemplo acima comando catenate um arquivo de entrada (com a área de dados gerada excluídos) com uma seqüência constante. Essa entrada catenada é então filtrada para adicionar um comprimento de 4 bytes e uma soma de verificação de 4 bytes. Juntando End-to-End Com demasiada frequência os intervalos de endereços nos arquivos de carga EPROM se sobrepõem. Você receberá um erro se o fizerem. Se ambos os arquivos começam a partir do endereço zero, porque cada um entra em uma EPROM separada, você pode precisar usar o filtro de deslocamento: Às vezes você quer que os dois arquivos se sigam exatamente, mas você donrsquot conhecer o deslocamento antecipadamente: Era um número (0x80000) antes, há agora um cálculo (minusmaximum-addr infile1). Isto é possível a maioria de lugares que um número pode ser usado (também minusminimum-addr e menos-range). CROPPING DOS DADOS É possível copiar um arquivo de carga EPROM, selecionando endereços a serem mantidos e endereços a serem descartados. O que manter Uma atividade comum é recortar seus dados para que correspondam à sua localização EPROM. Seu vinculador pode adicionar outros lixo que você não está interessado em, p. No local da RAM. Neste exemplo, há uma EPROM de 1 MB no limite de 2MB: sreccat infile minuscrop 0x200000 0x300000 minuso outfile O limite inferior para todos os intervalos de endereços é inclusivo, o limite superior é exclusivo. Se você subtraí-los, você obtém o número de bytes. Endereço Offset Apenas possivelmente, você tem um programador EPROM morônico, e barfs se a imagem EPROM doesnrsquot começar em zero. Para descobrir exatamente onde é que começa na memória, use o comando srecinfo (1): Em vez de açougueiro o arquivo de comando linker, apenas deslocamento os endereços: sreccat infile minuscrop 0x200000 0x300000 minusoffset minus0x200000 minuso outfile Observe que o deslocamento dado é negativo. Ele tem o efeito de subtrair esse valor de todos os endereços nos registros de entrada, para formar os endereços de registro de saída. Neste caso, deslocando a imagem de volta para zero. Este exemplo também demonstra como os filtros de entrada podem ser encadeados em conjunto: primeiro a colheita e, em seguida, o deslocamento, tudo em um comando, sem a necessidade de arquivos temporários. Se tudo o que você quer fazer é deslocar os dados para começar a partir do endereço zero, isso pode ser automatizado, então você donrsquot tem que saber o endereço mínimo com antecedência, usando sreccat rsquos capacidade de calcular algumas coisas na linha de comando: sreccat infile minusoffset Minus minusminimum-addr infile minuso outfile Observe os espaços de cada lado do sinal de menos, eles são obrigatórios. O que jogar fora Há momentos em que você precisa excluir um pequeno intervalo de endereços de um arquivo de carga EPROM, em vez de querer manter um pequeno intervalo de endereços. Para este efeito, pode utilizar-se o filtro de minúsculo. Por exemplo, se você deseja excluir o intervalo de endereços onde o número de série de um dispositivo incorporado é mantido, digamos 0x20 bytes em 0x100, você usaria um comando como este: sreccat input. srec minusexclude 0x100 0x120 minuso output. srec A saída. Srec arquivo terá um furo nos dados nos locais necessários. Observe que você pode ter tanto minuscrop e minusexclude na mesma linha de comando, o que funciona mais naturalmente para sua situação. Intervalos de endereços descontínuos Os intervalos de endereços não têm que ser um intervalo único, você pode criar um intervalo de endereços usando mais de um único par. Sreccat infile minuscrop 0x100 0x200 0x1000 0x1200 minuso outfile Este filtro resulta em dados de 0x100..0x1FF e dados de 0x1000..0x1200 para passar, o resto é descartado. Este é é mais eficiente do que acorrentar um minuscrop e um minusexclude filtro juntos. MOVER AS COISAS AO REDOR Também é possível alterar o endereço dos registros de dados, tanto para a frente como para trás. Também é possível reorganizar onde os registros de dados são colocados na memória. Filtro Offset O filtro de número minusoffset opera nos endereços dos registros. Se o número for positivo, os endereços movem muitos bytes mais altos na memória, os valores negativos movem-se para baixo. Sreccat infile minuscrop 0x200000 0x300000 minusoffset minus0x200000 minuso outfile O exemplo acima move o bloco de dados de 1 MB para 0x200000 para zero (o desvio é negativo) e descarta o resto dos dados. Troca de bytes Há momentos em que os bytes nos dados precisam ser trocados, convertendo entre dados big-endian e little-endian normalmente. Sreccat infile minusbyte-swap 4 minuso outfile Isso inverte bytes em valores de 32 bits (4 bytes). O padrão, se você donrsquot fornecer uma largura, é inverter bytes em valores de 16 bits (2 bytes). Você pode realmente usar qualquer valor estranho que você gosta, ele doesnrsquot mesmo tem que ser um poder de 2. Talvez 64 bits (8 bytes) pode ser útil um dia. Saída binária Você precisa prestar atenção para arquivos binários na saída, porque os buracos são preenchidos com zeros. Seu programa de 100 KB na parte superior da memória de 32 bits endereçada fará um arquivo de 4 GB. Veja srecbinary (5) para como entender e evitar esse problema, geralmente com o filtro minusoffset. Como dividir uma imagem Se você tiver um barramento de dados de 16 bits, mas estiver usando duas EPROMs de 8 bits para armazenar o firmware, você pode gerar as imagens par e ímpar usando o filtro minusSPlit. Supondo que o firmware esteja no arquivo firmware. hex, use o seguinte: Isso resultará em duas imagens EPROM necessárias. Observe que os endereços de saída são divididos pelo múltiplo dividido, portanto, se suas imagens EPROM estiverem em um deslocamento específico (digamos 0x10000, no exemplo a seguir), você precisa remover o deslocamento e, em seguida, substituí-lo. Observe como a capacidade de aplicar vários filtros simplifica o que seria um script muito mais longo. Striping Uma segunda utilização para o filtro minusSPlit é memória de striping. Você donrsquot tem que dividir em partes byte-wide, você pode escolher outros tamanhos. É comum querer converter dados de 32 bits em dois conjuntos de dados de 16 bits de largura. Isto é relativamente simples de entender, mas você pode usar listras ainda mais largas. Neste próximo exemplo, o hardware requer que blocos de 512 bytes alternem entre 4 EPROMs. Gerando as 4 imagens seria feito da seguinte maneira: Striping Assimétrico Um exemplo mais peculiar de striping é o Microchip dsPIC33F microcontrolador, que tem um estranho padrão de armazenamento de memória e eles são capazes de armazenar 3 bytes em um endereço que deve conter apenas 2 bytes. O resultado é um arquivo hex que tem zero-preenchido o byte superior (little-endian), e todos os endereços são dobrados do que eles estão no chip. Aqui está um exemplo: Para se livrar dos 00 bytes de preenchimento, deixando apenas os 3/4 bytes significativos, você também usa o filtro split, com seu argumento de largura adicional, como este: Isso resulta em um arquivo com os 00 bytes de preenchimento removidos . Olha como este: Observe como os endereços são 3/4 o tamanho, também. Você pode inverter isso usando os filtros minusunsplit e minusfill0. Unsplit ING Images O filtro unsplit pode ser usado para reverter os efeitos do filtro split. Observe que o intervalo de endereços é expandido deixando furos entre as faixas. Usando todas as faixas, a entrada completa é remontada, sem nenhum furo. O exemplo acima inverte o exemplo anterior de barramento de dados de 16 bits. Em geral, você não abre com os mesmos parâmetros que você dividir com. ENCHENDO OS BLANCOS Muitas vezes arquivos de carga EPROM terá ldquoholesrdquo neles, lugares onde o compilador e linker não colocar nada. Para alguns propósitos isso é OK, e para outros fins algo tem que ser feito sobre os buracos. O filtro de preenchimento É possível preencher os espaços em branco onde seus dados não estão. O exemplo mais simples disso preenche toda a EPROM: sreccat infile minusfill 0x00 0x200000 0x300000 minuso outfile Este exemplo preenche os furos, se houver, com zeros. Você deve especificar um intervalo menos com um espaço de endereço de 32 bits, preenchendo tudo gera arquivos de carga enormes. Se você quiser apenas preencher as lacunas em seus dados e não quiser preencher toda a EPROM, tente: sreccat infile minusfill 0x00 minusover infile minuso outfile Este exemplo demonstra o fato de que onde quer que um intervalo de endereços possa ser especificado, as opções minusover e minuswithin pode ser usado. Unfilling the Blanks É comum precisar ldquounfillrdquo uma imagem EPROM depois de lê-lo fora de um chip. Geralmente, ele terá tido todos os buracos preenchidos com 0xFF (áreas da EPROM que você programa donrsquot mostrar como 0xFF quando você lê-los de volta). Para se livrar de todos os bytes 0xFF nos dados, use este filtro: sreccat infile minusunfill 0xFF minuso outfile Isso irá se livrar de todos os bytes 0xFF, incluindo aqueles que você realmente queria lá. Há duas maneiras de lidar com isso. Primeiro, você pode especificar um comprimento de execução mínimo para o un-fill: sreccat infile minusunfill 0xFF 5 minuso outfile Isso diz que executa de 1 a 4 bytes de 0xFF são OK e que um buraco só deve ser criado para corridas de 5 ou mais 0xFF bytes em uma linha. O segundo método é preencher novamente os intervalos intermediários: sreccat outfile minusfill 0xFF minusover outfile minuso outfile2 O método escolhido depende das suas necessidades e da forma dos dados na sua EPROM. Você pode precisar combinar ambas as técnicas. Address Range Padding Alguns formatos de dados são 16 bits de largura e preencher automaticamente com 0xFF bytes se for necessário preencher a outra metade de uma palavra que não está nos dados. Se você precisa preencher com um valor diferente, você pode usar um comando como este: sreccat infile minusfill 0x0A minuswithin infile minusrange-padding 2 minuso outfile Isso fornece ao filtro de preenchimento um intervalo de endereços calculado a partir dos detalhes do arquivo de entrada. O intervalo de endereços é todos os intervalos de endereços cobertos por dados no infile. Estendida para baixo (se necessário) no início de cada sub-faixa para um múltiplo de 2 bytes e estendida para cima (se necessário) no final de cada sub-faixa para um múltiplo de 2 bytes. Isso também funciona para múltiplos maiores, como limites de página de 1kB de chips flash. Esse preenchimento de intervalo de endereços funciona em qualquer local onde seja necessário um intervalo de endereços. Preencher com direitos de autor É possível preencher porções não utilizadas da sua EPROM com uma mensagem de direitos autorais de repetição. Qualquer pessoa tentando fazer engenharia reversa de suas EPROMs vai ver o aviso de direitos autorais em seu editor hexadecimal. Isso é realizado com duas fontes de entrada, uma de um arquivo de dados e outra que é gerada on-the-fly. Sreccat infile minusgenerate rsquo (rsquo 0 0x100000 minusminus minuswithin infile rsquo) rsquo minusrepeat-string rsquoCopyright (C) 1812 Tchaikovsky. Rsquo minuso outfile Observe o intervalo de endereços para a geração de dados: ele toma o intervalo de endereços de sua EPROM, neste caso 1MB a partir de 0, e subtrai dele os intervalos de endereços usados ​​pelo arquivo de entrada. Se você quiser fazer um script com o ano atual (porque 1812 está um pouco fora de data) use o shellrsquos substituição de saída (back ticks) habilidade: sreccat infile minusgenerate rsquo (rsquo 0 0x100000 minusminus minuswithin infile rsquo) rsquo minusrepeat-string quotCopyright C) rsquodate Yrsquo Tchaikovsky. Quuff minuso outfile A seqüência especificada é repetida uma e outra vez, até que ele tenha preenchido todos os buracos. Obfuscating com o ruído Às vezes você quer encher suas imagens de EPROM com ruído, para esconder onde os dados reais param e começa. Você pode fazer isso com o filtro de preenchimento minusrandom. Sreccat infile minusrandom-fill 0x200000 0x300000 minuso outfile Ele funciona exatamente como o filtro minusfill, mas usa números aleatórios em vez de um valor de byte constante. Preencher com palavras de 16 bits Ao preencher a imagem com um valor de byte constante não funciona, e você precisa de um valor de palavra constante de 16 bits em vez disso, use o gerador de dados negativos, que leva uma seqüência de bytes arbitrariamente longa para usar como o preenchimento Observe como o intervalo de endereços do generatorrsquos evita uma vez mais os intervalos de endereços ocupados pelos dados de rsquos de infiltração (rsquo rsquo) (rsquo 0x200000 0x300000 minusminus minuswithin infile rsquo) rsquo minusrepeat-data 0x1B 0x08 minuso outfile Você tem que obter o endian-ness direito mesmo. INSERINDO DADOS CONSTANTES De vez em quando, você quer inserir dados constantes ou dados não produzidos pelo compilador ou montador em suas imagens de carga EPROM. Binary Means Literal Uma maneira simples é ter as informações desejadas em um arquivo. Para inserir o conteúdo filersquos literalmente, sem interpretação de formato, use o formato de entrada binária: sreccat infile minusbinary minuso outfile Provavelmente será necessário usar um filtro de offset para mover os dados para onde você realmente quer dentro da imagem: sreccat infile minusbinary Minusoffset 0x1234 minuso outfile Também é possível usar a entrada padrão como uma fonte de dados, que se presta a ser scriptado. Por exemplo, para inserir a data ea hora atuais em um arquivo de carga EPROM, você pode usar um pipe: date sreccat minus minusbin minusoffset 0xFFE3 minuso outfile O nome de arquivo especial ldquo menos rdquo significa ler a partir da entrada padrão. A saída do comando data é sempre 29 caracteres de comprimento eo deslocamento mostrado será colocá-lo na parte superior de uma imagem EPROM 64 KB. Repetir uma vez A seção Preencher com direitos autorais, acima, mostra como repetir uma seqüência de caracteres repetidamente. Podemos usar uma única repetição para inserir uma string apenas uma vez. Observe como o intervalo de endereços para a geração de dados corresponde exatamente ao tamanho do tamanho da saída de data (1). Você pode, naturalmente, adicionar seu arquivo de entrada ao comando sreccat (1) acima para catenar sua imagem EPROM juntamente com a data e hora. Inserindo um longo Outra possibilidade é adicionar o número de commit do Subversion à sua imagem EPROM. Neste exemplo, estamos inserindo um valor de 4 bytes little-endian no endereço 0x0008. O número de commit do Subversion está na variável de shell da versão neste exemplo: Note que usamos um filtro para garantir que há um buraco na entrada onde o número da versão vai, apenas no caso do linker colocar algo lá. DADOS SOBRE OS DADOS É possível adicionar uma variedade de dados sobre os dados para a saída. Checksums O filtro minuschecksum-negative-big-endian pode ser usado para somar os dados e, em seguida, inserir o negativo da soma nos dados. Isso tem o efeito de somar a zero quando a soma de verificação em si é somada, desde que a largura da soma corresponda à largura do valor inserido. Sreccat infile minuscrop 0 0xFFFFFC minusrandom-preencher 0 0xFFFFFC minuschecksum-neg-b-e 0xFFFFFC 4 4 minuso outfile Neste exemplo, temos uma EPROM no menor megabyte de memória. O filtro de minuscula garante que estamos apenas somando os dados dentro da EPROM, e não em qualquer outro lugar. O filtro de preenchimento minusrandom preenche todos os buracos deixados nos dados com valores aleatórios. Finalmente, o filtro negativo-b-e insere uma soma de verificação de 32 bits (4 bytes) no formato big-endian nos últimos 4 bytes da imagem EPROM. Naturalmente, há uma versão little-endian deste filtro também. Seu código embutido pode verificar a EPROM usando código C semelhante ao seguinte: O filtro minuschecksum-bitnot-big-endian é semelhante, exceto que a soma sobre a soma de verificação deve gerar um valor de todos-um-bits (menos1). Por exemplo, usando shorts em vez de longs: sreccat infile minuscrop 0 0xFFFFFE menosfill 0xCC 0x00000 0xFFFFFE minuschecksum-neg-be 0xFFFFFE 2 2 minuso outfile Supondo que você escolheu o filtro de endian-ness correto, seu código embutido pode verificar a EPROM usando código C semelhante a O seguinte: Há também um filtro negativo-positivo-ser, e um filtro de little-endian correspondente, que insere a soma simples, e que seria verificado em C usando um teste de igualdade. Sreccat infile minuscrop 0 0xFFFFFF minusfill 0x00 0x00000 0xFFFFFF menoschecksum-neg-be 0xFFFFFF 1 1 minuso outfile Assumindo que você escolheu o filtro endian-ness correto, seu código embutido pode verificar a EPROM usando código C semelhante ao seguinte: No caso de 8 bits , Não importa se você usa o filtro big-endian ou little-endian. Quick Hex-Dump Você pode olhar para a soma de verificação de seus dados, usando o formato de saída ldquohex-dumprdquo. Isso é útil para ver valores calculados ou para depurar um comando sreccat (1) antes de imortalizá-lo em um script. Sreccat infile minuscrop 0 0x10000 minusfrop 0xFF 0x0000 0x10000 minuschecksum-neg-be 0x10000 4 minuscrop 0x10000 0x10004 minuso minus minus-dump Este comando lê no arquivo, verifica os dados e coloca a soma de verificação em 0x10000, colhe o resultado para conter apenas a soma de verificação, E imprime a soma de verificação na saída padrão em um formato de despejo hexadecimal clássico. O nome de arquivo especial ldquo menos rdquo significa ldquothe outputrdquo padrão neste contexto. Verificações de redundância cíclica As somas de verificação aditivas simples têm um número de limitações teóricas, a ver com erros que podem e não podem detectar. Os métodos CRC têm menos problemas. Sreccat infile minuscrop 0 0xFFFFFC minusfill 0x00 0x00000 0xFFFFFC minuscrc32-b-e 0xFFFFFC minuso outfile No exemplo acima, temos uma EPROM no menor megabyte de memória. O filtro de minuscula garante que estamos apenas somando os dados dentro da EPROM, e não em qualquer outro lugar. O filtro de preenchimento negativo preenche todos os furos deixados nos dados. Finalmente, o filtro negativo-b-e insere uma soma de verificação de 32 bits (4 bytes) no formato big-endian nos últimos 4 bytes da imagem EPROM. Naturalmente, há uma versão little-endian deste filtro também. A soma de verificação é calculada usando o CRC padrão de 32 bits da indústria. Como o SRecord é de código aberto, você sempre pode ler o código-fonte para ver como ele funciona. Existem muitas versões não-GPL deste código disponíveis na Internet e adequadas para incorporação em firmware proprietário. Existe também um CRC de 16 bits disponível. Sreccat infile minuscrop 0 0xFFFFFE menosfill 0x00 0x00000 0xFFFFFE minuscrc16-b-e 0xFFFFFE minuso outfile A soma de verificação é calculada usando a fórmula CCITT. Como o SRecord é de código aberto, você sempre pode ler o código-fonte para ver como ele funciona. Há muitos não-GPL versão deste código disponível na Internet, e adequado para incorporação em firmware proprietário. Você pode olhar para o CRC de seus dados, usando o formato de saída ldquohex-dumprdquo. Sreccat infile minuscrop 0 0x10000 minusfill 0xFF 0x0000 0x10000 minuscrc16-be 0x10000 minuscrop 0x10000 0x10002 minuso minus minus-dump Esse comando lê no arquivo, calcula o CRC dos dados e coloca o CRC em 0x10000, colhe o resultado para conter somente o CRC, E imprime a soma de verificação na saída padrão em um formato de despejo hexadecimal clássico. Onde estão os dados Existem várias propriedades da imagem da EPROM que você pode inserir nos dados. sreccat infile minusminimum-b-e 0xFFFE 2 minuso outfile The above example inserts the minimum address of the data ( low water ) into the data, as two bytes in big-endian order at address 0xFFFE. This includes the minimum itself. If the data already contains bytes at the given address, you need to use an exclude filter. The number of bytes defaults to 4. There is also a minusminimum-l-e filter for inserting little-endian values, and two more filters called minusexclusive-minimum-b-e and minusexclusive-minimum-l-e that do not include the minimum itself in the calculation of the minimum data address. sreccat infile minusmaximum-b-e 0xFFFFFC 4 minuso outfile The above example inserts the maximum address of the data ( high water 1 . just like address ranges) into the data, as four bytes in big-endian order at address 0xFFFFFC. This includes the maximum itself. If the data already contains bytes at the given address, you need to use an minusexclude filter. The number of bytes defaults to 4. There is also a minusmaximum-l-e filter for inserting little-endian values, and two more filters called minusexclusive-maximum-b-e and minusexclusive-maximum-l-e that do not include the maximum itself in the calculation of the maximum data address. sreccat infile minuslength-b-e 0xFFFFFC 4 minuso outfile The above example inserts the length of the data ( high water 1 minus low water ) into the data, as four bytes in big-endian order at address 0xFFFFFC. This includes the length itself. If the data already contains bytes at the length location, you need to use an minusexclude filter. The number of bytes defaults to 4. There is also a minuslength-l-e filter for inserting a little-endian length, and the minusexclusive-length-b-e and minusexclusive-length-l-e filters that do not include the length itself in the calculation. What Format Is This You can obtain a variety of information about an EPROM load file by using the srecinfo (1) command. For example: This example shows that the file is a Motorola S-Record. The text in the file header is printed, along with the execution start address. The final section shows the address ranges containing data (the upper bound of each subrange is in clusive, rather than the ex clusive form used on the command line. srecinfo some-weird-file. hex minusguess The above example guesses the EPROM load file format. It isnrsquot infallible but it usually gets it right. You can use minusguess anywhere you would give an explicit format, but it tends to be slower and for that reason is not recommended. Also, for automated build systems, you want hard errors as early as possible if a file isnrsquot in the expected format, you want it to barf. MANGLING THE DATA It is possible to change the values of the data bytes in several ways. sreccat infile minusand 0xF0 minuso outfile The above example performs a bit-wise AND of the data bytes with the 0xF0 mask. The addresses of records are unchanged. I canrsquot actually think of a use for this filter. sreccat infile minusor 0x0F minuso outfile The above example performs a bit-wise OR of the data bytes with the 0x0F bits. The addresses of records are unchanged. I canrsquot actually think of a use for this filter. sreccat infile minusxor 0xA5 minuso outfile The above example performs a bit-wise exclusive OR of the data bytes with the 0xA5 bits. The addresses of records are unchanged. You could use this to obfuscate the contents of your EPROM. sreccat infile minusnot minuso outfile The above example performs a bit-wise NOT of the data bytes. The addresses of records are unchanged. Security by obscurity sreccat version 1.64 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Peter Miller The sreccat program comes with ABSOLUTELY NO WARRANTY for details use the rsquo sreccat minusVERSion License rsquo command. This is free software and you are welcome to redistribute it under certain conditions for details use the rsquo sreccat minusVERSion License rsquo command. MAINTAINER

No comments:

Post a Comment