¿Qué es un “ addend ”?

De Aprendiendo análisis binario de Linux por Ryan «elfmaster» O «Neill . En la página 32, el autor afirma:

Los registros de reubicación para archivos ELF de 32 bits son los mismos que para los de 64 bits, pero use números enteros de 32 bits. El siguiente ejemplo de un código de archivo de objeto se compilará como 32 bits para que podamos demostrar sumandos implícitos, que no se usan con tanta frecuencia en 64 bits. Un suma implícita se produce cuando los registros de reubicación se almacenan en estructuras de tipo ElfN_Rel que no contienen un r_addend y, por lo tanto, el sumando se almacena en el destino de reubicación. Los ejecutables de 64 bits tienden a utilizar las ElfN_Rela estructuras que contienen un sumando explícito . Creo que vale la pena comprender ambos escenarios, pero los sumandos implícitos son un poco más confusos, por lo que tiene sentido aclarar esta área.

¿Qué es la definición real de un «sumando» ?

Comentarios

Respuesta

Creo que solo significa «un número que» se agrega «, y en este caso» el número que «se agrega a la dirección de carga base ( o dirección de carga de segmento) para calcular el puntero final para esta reubicación «.

Imaginemos que cuando cargamos nuestro binario en la memoria en 0x400000 tenemos un puntero en 0x401234 que apunta a 0x405678. (Si en cambio cargamos el binario en 0x800000, entonces esto debería apuntar a 0x805678, por lo tanto, necesita reubicarse.) No sé ELF, pero mi lectura de esto es que

  • en t En el caso implícito, la tabla de reubicación almacena solo compensaciones en su binario, en este caso 0x1234, y en nuestro binario en la compensación 0x1234 almacenamos la compensación objetivo 0x5678. Por lo tanto, la reubicación se convierte en

    para cada dirección A en la tabla de reubicación *(base + A) += base

    (Este Así es como funcionan las tablas de reubicación en archivos PE.)

  • en el caso explícito, la tabla de reubicación almacena tanto el desplazamiento en su binario como el desplazamiento de destino, es decir, 0x1234 0x5678. Así que la reubicación aquí es

    para cada par de direcciones A, B en la tabla de reubicación *(base + A) = base + B

    No sé qué va en el binario en el desplazamiento 0x1234 en este caso.

Respuesta

  • Augend es un término que significa un número que está sujeto a sumas
  • Addend es el número que agregará.

De Dictionary.com ,

¿Alguna vez te has encontrado mirando una hoja de papel con“ 3 + 4 ”Escrito en él, y se preguntó ¿cuál es el término adecuado para cada una de estas dos cantidades respectivas? ¿No? El primer número es el augend y el número que se le agrega es el sumando.

Puede ver una tabla de otros términos matemáticos aquí en Wikipedia «s » Resultados de cálculo « ,

Resultados del cálculo

¿Por qué los términos especiales aquí?

  • Bueno, eso es probable porque en el ensamblaje add rbi, rax almacenará el resultado en rbi. Entonces, conocer el primer argumento no es solo un argumento para add sino el destino; add rax, rbi almacenará el resultado en rax. Si el ensamblaje se mostrara con operadores en su lugar, «tendríamos rbi += rax y rax += rbi.
  • Porque el addend no es siempre un desplazamiento, y la leyenda no siempre es la base. Aunque en este ejemplo específico, «desplazamiento» es mucho más apropiado.
  • En este caso específico, el término «desplazamiento implícito» se puede encontrar en la Especificación de formato de enlace y ejecutable (ELF) del estándar de interfaz de herramientas (TIS) Versión 1.2 ,

    … solo las entradas Elf32_Rela contienen un sumando explícito. Las entradas de tipo Elf32_Rel almacena un sumando implícito en la ubicación que se va a modificar. Dependiendo de la arquitectura del procesador, una forma u otra puede ser necesaria o más conveniente.En consecuencia, una implementación para una máquina en particular puede usar un formulario exclusivamente o cualquier formulario dependiendo del contexto.

Respuesta

Addend es simplemente «un número para agregar a otro «, de acuerdo con Merian Webster .

Comentarios

  • Fue ya indicado en la respuesta existente. Puede agregar un poco más a su respuesta para que sea más informativa.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *