2011-06-02 16 views
6

¿Cómo calcula objdump la dirección física (LMA) de las secciones elf? Por lo que puedo decir, los encabezados de sección de elf solo contienen la dirección virtual (VMA) de las secciones [1].direcciones virtuales y físicas de secciones en archivos elf

Por lo general, VMA y LMA son iguales. Pero para las secciones de datos inicializados (.data), el VMA es la ubicación RAM de las variables y LMA es la ubicación del ROM donde se encuentran los valores iniciales. Crt0 es responsable de copiar los valores iniciales en la memoria RAM antes de llamar a main(). Por ejemplo:

$ objdump -h my.elf 
Sections: 
Idx Name   Size  VMA  LMA  File off Algn 
    0 .text   0003c3d0 00080000 00080000 00010000 2**2 
        CONTENTS, ALLOC, LOAD, READONLY, CODE 
    5 .data   000008d0 40000000 000d08d4 00060000 2**3 
        CONTENTS, ALLOC, LOAD, DATA 

-Tom

[1] http://www.ouah.org/RevEng/x430.htm

+0

No conozco ningún tema acerca de este tema, pero parece que el LMA está dado por el [script del enlazador] (https://sourceware.org/binutils/docs-2.18/ld/Output-Section-LMA.html) (usando 'AT'). – ysdx

Respuesta

0

dirección física es un atributo de segmento de archivo ELF. La sección del archivo ELF no tiene dicho atributo. Sin embargo, es posible asignar secciones a la memoria del segmento correspondiente.

El significado de la dirección física depende de la arquitectura y puede variar entre diferentes sistemas operativos y plataformas de hardware.

De esta link:

p_paddr - En los sistemas para los que direccionamiento físico es relevante, esto miembro está reservado para la dirección física del segmento . Como System V ignora el direccionamiento físico para los programas de aplicación , este miembro tiene contenido no especificado para archivos ejecutables y objetos compartidos.

Parece que su Crt0 hace una suposición sobre el significado de la dirección física ubicada en el archivo ELF. Esta suposición puede ser cierta para el sistema particular, pero no está garantizada en otro.

6

Encuentra esto sobre LMA: http://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/binutils/docs/ld/Basic-Script-Concepts.html#Basic-Script-Concepts

Lo importante es el siguiente:

Cada sección de salida se puede cargar o asignable tiene dos direcciones. El primero es el VMA o dirección de memoria virtual. Esta es la dirección que tendrá la sección cuando se ejecute el archivo de salida. El segundo es el LMA, o dirección de memoria de carga. Esta es la dirección en la que se cargará la sección. En la mayoría de los casos, las dos direcciones serán las mismas. Un ejemplo de cuándo podrían ser diferentes es cuando una sección de datos se carga en la ROM y luego se copia en la RAM cuando se inicia el programa (esta técnica se usa a menudo para inicializar variables globales en un sistema basado en ROM). En este caso, la dirección de la ROM sería la LMA, y la dirección de la RAM sería la VMA

+0

¿Qué es el archivo desactivado? – electro

4

La cabecera de la sección contiene una sola dirección. Me parece que la dirección en el encabezado de la sección es el VMA. Los encabezados de programa contienen el mapeo de VMA a LMA.

Por ejemplo, he aquí un fragmento de lo que "objdump -x" muestra de mi archivo elf:

Program Header: 
<a few lines removed> 
    LOAD off 0x00000240 vaddr 0x00000048 paddr 0x0000018c align 2**0 
     filesz 0x00000000 memsz 0x00000004 flags rw- 

Sections: 
Idx Name   Size  VMA  LMA  File off Algn 
<a few lines removed> 
    3 .bss   00000004 00000048 0000018c 00000240 2**1 
        ALLOC 

Así, .bss tiene un VMA de 0x48. Si mira a través de los encabezados del programa, una entrada tiene un "vaddr" de 0x48 y un paddr de 0x18c, que es el LMA.

+0

Creo que su suposición es correcta. hay una pregunta relacionada aquí: https://stackoverflow.com/questions/39888381/elf-loading-when-vma-lma, el autor dijo: Ayuda a darse cuenta de que "VMA" y "LMA" son terminología de utilidad GNU y no en la especificación ELF ... Algunos entornos usan p_paddr no como una dirección física, sino como la dirección de carga (de ahí "LMA") .... –

Cuestiones relacionadas