Directorio de artículos
- Manual de nivelación del programador
https://coolshell.cn/articles/4990.html
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 .
Formato
El archivo .o más básico se ve así
.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
-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.
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
- 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í