Archivo de objeto del capítulo 3 de autocultivo del programador






  • Manual de nivelación del programador
    https://coolshell.cn/articles/4990.html
  • Inserte la descripción de la imagen aquí

Archivo ELF

  • ELF y PE son ambas variantes de los archivos COFF, por lo que .lib y .dll en Windows (biblioteca estática; biblioteca de enlace dinámico dinámico) son muy similares a .a y .so en Linux (archivo estático; objeto compartido dinámico)

El formato de archivo de objeto común (inglés: Common Object File Format, abreviado como COFF), también conocido como el formato de archivo de objeto común, es un formato de archivo utilizado para archivos ejecutables, códigos de objeto y bibliotecas compartidas (biblioteca compartida), utilizado en sistemas similares a UNIX .
Inserte la descripción de la imagen aquí

Formato

El archivo .o más básico se ve así
Inserte la descripción de la imagen aquí

.bss

.bss段存放未初始化的全局变量和局部静态变量
未初始化的静态变量肯定是在这个段里面的,但是未初始化的全局变量不一定放着里面
当静态变量被赋值为0的时候被看作没有初始化,所以优化掉了可以被放在.bss段里面

.datos

.data段存放存放已初始化的全局变量和局部静态变量

.text / .code

.text段存放代码

Además de esto, el archivo objeto tiene muchas otras secciones


Comando

readelf

  • -s símbolo
  • -t - detalles-sección
  • -h --file-header-
    > no -f opción

objdump -s (fuente) -t (tabla de símbolos) -h encabezado de sección

comando od


objdump

  • -f encabezado de archivo
  • -h encabezado de sección
    Inserte la descripción de la imagen aquí
    -h La línea enmarcada es un atributo. El contenido indica que el contenido de esta sección está almacenado en este archivo. Puede ver que la sección .bss no está almacenada en este archivo.
  • -d desmontar
  • -s contenido completo en formato hexadecimal
  • -t imprimir tabla de símbolos

Talla

Verifique la longitud del segmento de código, segmento de datos, segmento BSS.
Inserte la descripción de la imagen aquí
El nombre del segmento escrito por usted mismo no puede comenzar con un punto (.)


objcopy

  • Archivo binario como un segmento en el archivo de destino
  • -R parámetro puede eliminar ciertos segmentos

Nuevo Méjico

La abreviatura del nombre
nm xx.o-> valor del símbolo (heximal) symbol_type symbol name
y algunos parámetros se pueden usar para mostrar solo ciertos segmentos


Segmento personalizado




3.4 Descripción de la estructura del archivo

Inserte la descripción de la imagen aquí

  • encabezado de archivo
    readelf -h / objdump -f 命令

===== Repasemos desde arriba

3.5

  • Firma de la función

  • c ++ filt

  • ¿Por qué p94 define una referencia débil pthread_create? Debido a que solo las referencias débiles encontrarán referencias fuertes, de lo contrario no se cargará incluso si el enlazador -lpthread. Luego, una vez que se define, no se verá sin -lpthread. El valor de la referencia débil por defecto es 0 (o un valor especificado por un programa), por lo que si (débil referencia) puede realizar el código entre múltiples versiones de funciones diferentes Conversión flexible sin escribir múltiples copias

  • Hay una diferencia entre los compiladores C y C ++: C no modificará las variables cuando se compila C, pero C ++ sí

177 artículos originales publicados · Me gusta 28 · Visitas 50,000+

Supongo que te gusta

Origin blog.csdn.net/Hesy_H/article/details/100782411
Recomendado
Clasificación