ficheros_elf_coredumps_y_simbolos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ficheros_elf_coredumps_y_simbolos [2022/10/05 12:59] – [Símbolos] busindreficheros_elf_coredumps_y_simbolos [2022/10/05 23:28] (current) – [Objetos = Código objeto = Fichero objeto] busindre
Line 5: Line 5:
 ==== Símbolos ==== ==== Símbolos ====
  
-En programación, un símbolo es una variable o una función, podemos decir que un símbolo es un nombre que representa un espacio en la memoria. El cual almacena datos (variable, para leer y escribir) o instrucciones (funciones que ejecutan algo). En lo que respecta el kernel de Linux, para facilitar la cooperación entre varias unidades de función del kernel, hay miles de símbolos globales en el núcleo de Linux. Estas variables y funciones globales están listados en System.map (tabla de código estático) y /proc/kallsyms, el cual contiene los símbolos del kernel en ejecución. (estático + dinámico). System.map no sólo es útil para depurar los errores del kernel. Algunos controladores necesitan System.map para resolver los símbolos ya que están enlazados con las cabeceras del kernel en lugar de con glibc. Esto asa con Volatility a la hora de crear perfiles, los cuales no funcionarán correctamente sin el System.map para el kernel particular que se está ejecutando.+En programación, un símbolo es una variable o una función, podemos decir que un símbolo es un nombre que representa un espacio en la memoria. El cual almacena datos (variables que se leen o escriben) o instrucciones (funciones que ejecutan algo). En lo que respecta el kernel de Linux, para facilitar la cooperación entre varias unidades de función del kernel, hay miles de símbolos globales en el núcleo de Linux. Estas variables y funciones globales están listados en System.map (tabla de código estático) y /proc/kallsyms, el cual contiene los símbolos del kernel en ejecución. (estático + dinámico). System.map no sólo es útil para depurar los errores del kernel. Algunos controladores necesitan System.map para resolver los símbolos ya que están enlazados con las cabeceras del kernel en lugar de con glibc. Esto asa con Volatility a la hora de crear perfiles, los cuales no funcionarán correctamente sin el System.map para el kernel particular que se está ejecutando.
  
 <code>0000000000018000 A entry_stack_storage <code>0000000000018000 A entry_stack_storage
Line 18: Line 18:
  
  
-La primera columna es la dirección del símbolo, la segunda columna es el tipo de símbolo. Puedes ver las instrucciones detalladas en la página man de "nm". las siguientes columnas son el nombre del simbolo y desde qué modulo ha sido cargado (Vbox, módulo de sonido, xfs, etc).+La primera columna es la dirección del símbolo, la segunda columna es el tipo de símbolo. Puedes ver las instrucciones detalladas en la página man de "nm". las siguientes columnas son el nombre del símbolo y desde qué modulo ha sido cargado (Vbox, módulo de sonido, xfs, etc).
  
 ==== Objetos = Código objeto = Fichero objeto ==== ==== Objetos = Código objeto = Fichero objeto ====
Line 32: Line 32:
  /lib64/ld-linux-x86-64.so.2 (0x00007fc50f8be000)</code>  /lib64/ld-linux-x86-64.so.2 (0x00007fc50f8be000)</code>
  
-NOTA: Si el binario fue compilado estáticamente, ldd avisará diciendo "no es un ejecutable dinámico"+Otras formas de averiguar qué librerías compartidas necesita un determinado binario para su correcta ejecución sería usando objdump y readelf. Pero estas muestran menos librerías que ldd. Esto se debe a que ldd muestra virtual shared objects que son insertados por el kernel en cada proceso y no tienen ruta en disco. A su vez ldd sigue buscando qué librerías necesitan las actuales librerías compartidas. Es decir, con ldd se obtendrán todas las librerías que una aplicación necesita utilizar en tiempo de ejecución. 
 + 
 +<code bash>objdump -x /usr/bin/nmap | grep NEEDED 
 +readelf -d /usr/bin/nmap | grep NEEDED</code> 
 + 
 +NOTA: Si el binario fue compilado estáticamente, ldd avisará diciendo "no es un ejecutable dinámico". El comando file también nos da una idea de como fue compilado un binario. 
 + 
 +<code>file XXX_dinamico 
 +XXX_dinamico: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d57a35a12b3d157e89b26124ec912e8dd913449a, for GNU/Linux 4.4.0, stripped 
 + 
 +file XXX_estático  
 +XXX_estático : ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped</code> 
 + 
  
 Compilar un binario usando librerías compartidas (Incluye las tablas de símbolos .symtab y .dynsym). Compilar un binario usando librerías compartidas (Incluye las tablas de símbolos .symtab y .dynsym).
ficheros_elf_coredumps_y_simbolos.1664967572.txt.gz · Last modified: 2022/10/05 12:59 by busindre