O que é um “ addend ”?

De Learning Linux Binary Analysis por Ryan “elfmaster” O “Neill . Na página 32, o autor afirma,

Os registros de realocação para arquivos ELF de 32 bits são iguais aos de 64 bits, mas use inteiros de 32 bits. O exemplo a seguir para código de arquivo de objeto será compilado como 32 bits para que possamos demonstrar adendos implícitos, que não são tão comumente usados em 64 bits. Um adendo implícito ocorre quando os registros de realocação são armazenados em ElfN_Rel estruturas de tipo que não contêm um r_addend campo e, portanto, o adendo é armazenado no próprio destino de realocação. Os executáveis de 64 bits tendem a usar as estruturas ElfN_Rela que contêm um adendo explícito . Acho que vale a pena entender os dois cenários, mas os adendos implícitos são um pouco mais confusos, então faz sentido trazer luz a esta área.

O que é a definição real de um “addend” ?

Comentários

Resposta

Acho que significa apenas “um número que” é adicionado “e, neste caso,” o número que é adicionado ao endereço de carregamento básico ( ou endereço de carregamento de segmento) para calcular o ponteiro final para esta realocação “.

Vamos imaginar que quando carregamos nosso binário na memória em 0x400000 temos um ponteiro em 0x401234 que aponta para 0x405678. (Se ao invés carregamos o binário em 0x800000 então ele deve apontar para 0x805678, portanto, ele precisa ser realocado.) Eu não sei ELF, mas minha leitura disso é que

  • em t No caso implícito, a tabela de realocação armazena apenas deslocamentos em seu binário, neste caso 0x1234, e em nosso binário no deslocamento 0x1234 armazenamos o deslocamento de destino 0x5678. Portanto, a realocação torna-se

    para cada endereço A na tabela de realocação *(base + A) += base

    (Este é como as tabelas de realocação funcionam em arquivos PE.)

  • no caso explícito, a tabela de realocação armazena o deslocamento em seu binário e o deslocamento de destino, ou seja, 0x1234 0x5678. Portanto, a realocação aqui é

    para cada par de endereços A, B na tabela de realocação *(base + A) = base + B

    Não sei o que se passa no binário no deslocamento 0x1234 neste caso.

Resposta

  • Augend é um termo que significa um número sujeito a adição
  • Adendo é o número que você adicionará.

De Dictionary.com ,

Você já se viu olhando para um pedaço de papel com“ 3 + 4 ”Escrito nele e se perguntou qual é o termo apropriado para cada uma dessas duas respectivas quantidades? Não? O primeiro número é o augendo e o número adicionado a ele é o adendo.

Você pode ver um gráfico de outros termos matemáticos aqui na Wikipedia “s ” Resultados de cálculo “ ,

Resultados do cálculo

Por que os termos especiais aqui?

  • Bem, isso é provável porque na montagem add rbi, rax armazenará o resultado em rbi. Portanto, saber o primeiro argumento não é apenas um argumento para add, mas o destino; add rax, rbi armazenará o resultado em rax. Se a montagem foi exibida com operadores, “d teríamos rbi += rax e rax += rbi.
  • Porque o addend não é sempre um deslocamento e augend nem sempre é a base. Embora neste exemplo específico, “deslocamento” seja muito mais apropriado.
  • Neste caso específico, o termo “deslocamento implícito” pode ser encontrado na Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,

    … somente Elf32_Rela as entradas contêm um adendo explícito. Entradas do tipo Elf32_Rel armazene um adendo implícito no local a ser modificado. Dependendo da arquitetura do processador, uma forma ou outra pode ser necessária ou mais conveniente.Consequentemente, uma implementação para uma máquina específica pode usar um formulário exclusivamente ou qualquer um dos formatos, dependendo do contexto.

Resposta

Adendo é simplesmente “um número a ser adicionado para outro “, de acordo com Merian Webster .

Comentários

  • Era já declarado na resposta existente. Você pode adicionar um pouco mais à sua resposta para torná-la mais informativa.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *