análise discriminante para compilar e executar os endereços dos

Ubuntu 16.04.2 transversal ambiente compilador chip de S3C2440 braço braço-linux3.4.5 como a Internet arquitectura

       de processador de 32 bits, o comprimento de cada instrução é de 4 bytes, em 4 ordem de byte. Considerando apenas a ordem de execução, o processador irá ser sequencialmente ler de acordo com uma ordem de execução de instrução, mas tendo em consideração o salto implementado, com apenas o caso em que a sequência de instruções armazenadas nessa condição, a única maneira de conseguir isso é executado salto Ir tal convenção para "quantos bytes trás ou para a frente" posição. Sem dúvida este é cálculos ineficientes e pesados

 

Assim, a necessidade de instrução de endereçamento, que dá o endereço de cada instrução.

Isto é feito no processo de compilação, compilador bits de endereço inicial em um endereço, o armazenamento de dados de acordo com a ordem de endereços indicados para cada byte.

E este é o endereço o endereço do compilador.

O endereço execução endereço operação run real mordeu programas.


endereço de compilação pode ser considerado para ser um escritor , "espera" endereço em tempo de execução, e realmente compilar e endereços de executar algumas diferenças.


Primeiro precisa saber o compilador cruzado pode usar parâmetros -T braço-linux-ld quando o programa especificado para o compilador para compilar o endereço de segmento de dados arquivo de origem
, tais como:
braço-linux-ld -Ttext 0x30000000 start.O hello.o
nomeadamente a texto de endereço compilado (código) seção arranjado para 0x30000000 como o valor inicial, a ordem é geralmente bloquear:
.text -> .rodata -> .data -> .bss

.text para um segmento de código, .rodata só de leitura de dados, .data para o segmento de dados (armazenados variável global inicializado ou uma variável estática),. BSS loja segmento de variáveis ​​globais não inicializado

Se o parâmetro -T não for dada, o compilador de acordo com as regras padrão para o endereço como um endereço inicial 0 endereçamento sequencialmente

gerado após a compilação é formato de arquivo .elf, necessidade de percorrer as etapas de:
ARM-Linux a objcopy -O-binária xxx.elf xxx.bin -S
ARM-Linux-objdump -D xxx.elf> xxx.dis
pode obter bin formato de arquivo para programado no dispositivo, o segundo comando é usado para gerar o código desmontado, por código desmontado você pode ver visualmente o compilador traduz o código fonte para fazer o programa, otimização e endereçamento (endereço do compilador).


Após a compilação do programa para passar pelo processo de se programadas no chip, e é aqui onde o compilador para gerar uma diferença e executar endereços do
pressuposto de que o programa deve ser programado em flash de chips, que é unificado abordando o endereço de chips 0 lugar. então:

1. Quando o braço em Linux-ld é 0 ou -Ttext parâmetros dados de endereço do programa compilado para uma abordagem inicial para 0, o programa começa no início da operação de endereçamento do endereço de chip de 0 a operação endereço deve começar a partir de 0 endereço (a menos que especificado de outra forma), e o endereço de compilador é de 0, a partir deste ponto de vista, de compilação e executar o endereço é nenhum endereço diferente

2. Se o braço-linux-ld de parâmetros -Ttext dado a 0x30000000, 0x30000000 para resolver o compilador tratar inicial, visto a partir do 1, partida elétrica execução do programa ou começar do 0 endereço, o endereço é 0 corridas, a partir aqui compilar e endereços de execução será diferente, mas o programa ainda será executado a partir de 0, mas também pode funcionar normalmente

 Aqui deve ser mencionado que o conceito de um código independente de posição e código relacionado a localização, e pode ser visto a partir da diferença entre os dois é se o nome associado ao código local onde a execução de código.
código independente de posição é geralmente usado instruções de salto relativos ou salto para outras posições em relação realizados, não há nenhuma relação particular com o endereço real, assim chamado código independente de posição, semelhante ao caminho relativo para o arquivo.

Localização relacionadas com código de instrução requer o uso de um endereço absoluto, que é compilado salto endereço, esse salto para o endereço especificado pelo compilador, e o endereço real onde as instruções relacionadas com caminho absoluto semelhante ao arquivo.

armar conjunto de instruções, independentemente do código de posição relativa instrução de salto B, e código associado com um LDR comando de posição

B por b como salto e modo de salto é o PC principal + valor de compensação (valor PC é igual ao endereço atual + 8)
e salto LDR LDR implementado pela PC, laboratório (laboratório aqui como referência) sugado laboratório compilação rótulo diretamente endereço atribuído ao PC, então salto para endereço absoluto

foi programado para começar a compilar de chip unificado de 0 endereço, para que o programa é armazenado na memória começando no endereço 0, e também começou a correr a partir 0 endereço, se nenhum código de correlação posição intermediária, o programa na execução do programa no endereço 0 é viável, porque é uma posição de programa armazenado, as instruções e dados necessários para ser capaz de tomar, mas agora está executando o compilador e o endereço não é o mesmo endereço.
Se o programa, sujeito a certas inicialização, instruções de uso LDR apontando pc para o endereço "esperado", esse endereço o compilador, o compilador e endereços de executar pode atingir igual (runtime pc).

Então o programa bare metal ou outros programas muitas vezes compilação inconsistente e endereços correm para o programa nu metal, por exemplo, usar S3C2440 chips, uso Norflash como um caso de armazenamento, endereço Norflash a 0 no início, mas como sabemos rom semelhante Norflash, lata dados de leitura normal, mas exige forma especial para gravar dados, o que nos leva a queimar no programa, algumas variáveis globais ou armazenados em uma área de pilha, se as variáveis globais são armazenados em palavras Norflash não será de acordo com o programa desejado como pode ser atribuído modificado, de modo que as necessidades de código a ser transferida para outro local de armazenamento, como no meu SDRAM bordo, de modo que as inconsistências resultantes compilar e endereços de executar.

Note que o código será transferida para a área antes de compilar endereços, é necessário inicializar área de armazenamento de destino, por exemplo, eu uso SDRAM, então eu preciso para inicializar as configurações de SDRAM, bem como a necessidade de copiar o código, dados e outras informações para a área de alvo, porque a nossa área-alvo deslocalização, a área alvo está vazia antes de copiar o código do código armazenado na área de armazenamento em vez de endereço 0, então ele vai saltar directamente coisas absolutamente imprevisíveis acontecer ???
 

Há outras razões sobre os diferentes compiladores e endereços prazo, bem como a necessidade de deslocalização de códigos de razão, aqui para fazer algumas simples análise da situação, em outros casos, semelhante à verdade, você pode aprender por analogia, a analogia. Relocation forma também diferenciada, evacuados análise posterior.


Conclusão:
endereço de compilação: o processo de compilação na abordagem de código especificado endereço feita pelo homem, o programador é "esperado" posição de marcha

 

Endereço de operação: operação real do valor do pc ponteiro programa, e a operação real e o local de memória vector código relacionado.

 

Bem-vindo ao câmbio, discutir ou corrigir-me! progresso comum!

-------------------------------------------------- -------

2020 revisitado com algumas idéias novas, pode o local para https://blog.csdn.net/G_METHOD/article/details/104508545 .

Publicado 19 artigos originais · ganhou elogios 7 · vista 6942

Acho que você gosta

Origin blog.csdn.net/G_METHOD/article/details/79512285
Recomendado
Clasificación