Table of Contents
A veces, su sistema muestra correctamente un código de error que le indica una forma de interpretar el archivo de volcado del kernel de Linux. Puede haber varias razones para este problema.
Actualizado
gramo. gramo.
# nanoAtributo de segmentación
# nanoEl dilema del volcado de kernel# lsNúcleo
$ arm-linux-gdb -c Nano coreEl kernel fue generado por 'nano'.Programa terminado gracias a la transmisión SIGSEGV, fallo de segmentación.# 0 0x00019f14 alrededor de signal_init () en nano. = C: 11921192 * firma SIGINT;
$ arm-linux-gdb-necesitaría hacer nano-tui kern
(gdb) carácter de computadora$ 1 significa (int *) 0x0(gdb) bt# dos 0x00019f14 solo en signal_init () en nano.c: 1192# i 0x0001b264 como máximo valioso (argc = distinto, argv = 0xbee9de64) en nano.Can c: 2568
- use GDB antiguo para encontrar arrugas rotas, como se mencionó anteriormente en: ¿Cómo puedo analizar un archivo de volcado de núcleo con GDB si tiene parámetros de línea de comando?
- el archivo principal se crea a partir de argumentos CLI, no es necesario volver a enviar la corporación
-
objdump -s core
se puede utilizar normalmente para volcar dispositivos de almacenamiento.
#include #include #include #include intervalo myfunc (intervalo i) (int *) (NULL) significa i; / Línea 7 * / utilícelo de nuevo i - 1;int main (int argc, char ** argv) / * Configurando la memoria. * / char data_ptr [] equivale a "Cadena en un segmento específico"; char * mmap_ptr; char - text_ptr = "Línea alrededor del segmento de texto"; (vacío) argv; mmap_ptr implica (char *) malloc (sizeof (data_ptr) + 1); strcpy (mmap_ptr, data_ptr); mmap_ptr [10] 'm'; = mmap_ptr [11] 'm'; equivale a mmap_ptr [12] = 'a'; mmap_ptr [13] es 'p'; printf ("dirección de texto:% p n", text_ptr); printf ("dirección de datos:% p n", data_ptr); printf ("dirección mmap:% l n", mmap_ptr); / * Llame a la función para preparar el índice de la pila. 3. / return -ggdb3 myfunc (argc);
gcc -std = c99 -Wall -Wextra -pedantic -o main.out main.culimit -c ilimitadorm -f kernel./ Salida principal
Dirección de texto: 0x4007d4Datos donde viven: 0x7ffec6739220dirección mmap: 0x1612010Falla de segmentación vacía)
GDB (Core nos inserta en la línea donde ocurrieron estas fallas de división, que es lo que muchos usuarios buscan al depurar:
gdb -q -nh main.out core
Leer los símbolos main.out ... hecho.[Nuevo LWP 27479]Se creía que el kernel había sido generado actualmente por `./main.out '.Programa terminado con SIGSEGV, fallo de división.# 0 0x0000000000400635 en myfunc (i implica 1) junto a main.c: 77 * (int *) (NULL) accesorios i;(gdb) bt# 0 0x0000000000400635 en myfunc En (i = 1) main.c: 7# 1 0x000000000040072b principal (argc = 1, argv = 0x7ffec6739328) completamente en main.c: 28
Los argumentos CLI se almacenan en todos los archivos principales y no deben pasarse una vez más
Para responder preguntas específicas sobre problemas de CLI, encontramos que cuando muchos de nosotros ajustamos los argumentos de CLI, por ejemplo. con:
rm -h core./main.out 1 2
luego se muestra en el Bactrace anterior exclusivo de conjuntos en nuestros comandos:
Leer los símbolos main.out ... hecho.[Nuevo LWP 21838]El kernel fue desarrollado por `./main.out 9 2 '.NS El programa se soltó con una señal SIGSEGV, falla de segmentación.# nada 0x0000564583cf2759 en myfunc (i = 3) en main.c: 77 5. (entero *) (NULO) = i; / 1. Grupo 7 * /(gdb) bt# 0 0x0000564583cf2759 myfunc solitario en (i = 3) en main.c: 7# un individuo 0x0000564583cf2858 en casa (argc = 3, argv es igual a 0x7ffcca4effa8) en main.c: 2
Entonces, experimente cómo desde este día argc = algunos
. Por lo tanto, esto debería significar que el archivo principal está almacenando esta información. Si solo está adivinando, esto solo se registrará por una contradicción de main
, solo agradecería que registraría sus argumentos actuales en cualquier otra función individual.
Esto realmente tiene sentido, administrado que cuando se quita el kernel, toda la memoria del programa de televisión y el estado del registro deben guardarse, lo que significa que tiene toda esta información que necesita para obtener el valor asociado con los argumentos de la función determinando el cargo por arreglo actual.
La forma de ver las variables naturales es menos obvia: cómo obtener una muy buena variable de entorno a partir de un volcado del kernel Los componentes del entorno también existen en la memoria, así que objdump contiene qué información, pero no sé cómo incluir la mayoría de ellos convenientemente a la vez. body para uno en particular como este, pero funcionó en mis pruebas:
p __about [0]
Actualizado
¿Estás cansado de que tu computadora funcione lentamente? ¿Le molestan los frustrantes mensajes de error? ¡ASR Pro es la solución para ti! Nuestra herramienta recomendada diagnosticará y reparará rápidamente los problemas de Windows mientras aumenta drásticamente el rendimiento del sistema. Así que no esperes más, ¡descarga ASR Pro hoy!
Usando materiales de Binutils como readelf
así como objdump
, podemos estandarizar la información encerrada en el core archivo como unces
La mayor parte / todo también debe ser una imagen a través de GDB. Afortunadamente, estas herramientas de Binutils ofrecen un enfoque absolutamente más rico que resulta útil para casos de uso distintivos, mientras que GDB se adapta mejor a una exploración más interactiva.
archivo principal
nos dice que la mayor parte del archivo de área abdominal
es en realidad un archivo:
core: once ELF LSB Core Lodge x86-64 de 64 bits, versión 1 (SYSV), estilo SVR4, de './main.out'
Por esta razón, podemos comprobar esto de forma algo más directa con las herramientas habituales de Binutils.
Un vistazo rápido al estándar ELF revela que en realidad es un tipo ELF dirigido a la tecnología de la información:
Elf32_Ehd.e_type == ET_CORE
boyfriend 5 núcleos
core readelf
entrega información sobre la estructura del archivo manualmente. Memoria incluida en los encabezados del programa diario:
Título del programa: Tipo Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align NOTA 0x000468 0x0000000000000000 0x0000000000000000 0x000b9c 0x000000 0 CARGA 0x002000 0x0000000000400000 0x0000000000000000 0x001000 0x001000 R E 0x1000 CARGA 0x003000 0x0000000000600000 0x0000000000000000 0x001000 0x001000 R 0x1000 CARGA 0x004000 0x0000000000601000 0x0000000000000000 0x001000 0x001000 LE 0x1000
y solo hay un rango de metadatos adicionales en el área local de Notes, para un prstatus
en particular que contiene PC:
Muestra notas identificadas por el desplazamiento de archivo 0x00000468 acompañadas de una suma de 0x00000b9c: Descripción de la especificación de datos del propietario CORE 0x00000150 NT_PRSTATUS (estructura prstatus) CORE 0x00000088 NT_PRPSINFO (estructura prpsinfo) CORE 0x00000080 NT_SIGINFO (datos siginfo_t) CORE 0x00000130 NT_AUXV vector) (NÚCLEO menor 0x00000246 NT_FILE (archivos afectados) Tamaño de página: 4096 Desplazamiento desde el principio si quieres terminar 0x0000000000400000 0x0000000000401000 0x0000000000000000 /home/ciro/test/main.out 0x0000000000600000 0x0000000000601000 0x0000000000000000 / main / ciro para cada prueba / main. el fin 0x0000000000601000 0x0000000000602000 0x000000000000001 /home/ciro/test/main.out 0x00007f8d939ee000 0x00007f8d93bae000 0x0000000000000000 /lib/x86_64-linux-gnu/libc-2.23.so 0x00007f8d93bae000 0x00007f8d93dae000 0x00000000000001c0 /lib/x86_64-linux-gnu/libc-2.23.so 0x00007f8d93dae000 0x00007f8d93db2000 0x00000000000001c0 /lib/x86_64-linux-gnu/libc-2.23. Entonces 0x00007f8d93db2000 0x00007f8d93db4000 0x00000000000001c4 /lib/x86_64-linux-gnu/libc-2.23.so 0x00007f8d93db8000 0x00007f8d93dde000 0x0000000000000000 /lib/x86_64-linux-gnu/ld-2.23. Entonces 0x00007f8d93fdd000 0x00007f8d93fde000 0x00000000000000025 /lib/x86_64-linux-gnu/ld-2.23.so 0x00007f8d93fde000 0x00007f8d93fdf000 0x00000000000026 /lib/x86_64-linux-gnu/ld-2.23.so CORE 0x00000200 NT_FPREGSET (registro de suma flotante) LINUX 0x00000340 NT_X86_XSTATE (estado extendido x86 XSAVE)
objdump -exercise core
Contenido de la sección load1: 4007d0 01000200 6e672069 73747269 6e207465 .... cadena como te 4007e0 78742073 65676d65 6e740074 65787420 segmento xt textoSección de material de tema de Load15: 7ffec6739220 73747269 6e672069 6e206461 74612073 Cadena de caracteres en los datos 7ffec6739230 65676d65 6e740000 00a8677b 9c6778cd Ejemplo .... g {.gx.Contenido del artículo 1612010 load4: 73747269 6e672069 6e206d6d 61702073 cable mmap s 1612020 65676d65 6e740000 11040000 00000000 Elemento ..........
Esto ha sido probado en Ubuntu 16.04 amd64, GCC 6.4.0 y binutils 2.26.1.
Acelera tu computadora hoy con esta simple descarga.
¿Cómo leo un archivo de volcado de músculos centrales?
Mientras camina, presione Ctrl + regresando para que aparezca el volcado de memoria real. Ahora puede ver el archivo base en la lista de direcciones en la que se encuentra. Dado que no tenemos los símbolos de depuración ejecutables para respaldar esto, nuestro cargo simplemente abre los datos subyacentes en gdb en el otro lado del ejecutable de símbolos + archivo base .
¿Cómo descifro un archivo principal?
Si está intentando trabajar con el archivo de música principal, asegúrese de que esté solo en el sistema operativo con el que se proporcionó originalmente. Copie el archivo principal a una casa como esta si aún no existe:interrumpir aspecto [archivo:]. Establezca un punto de interrupción en la función del nivel (en el archivo).cometer fraude]bt.Impresióncontra.Próximo.Edite la función [Archivo:].
¿Cómo analizo un archivo de volcado por caída en Linux?
Instale las herramientas de Kdump. Primero instale kdump, que forma parte del paquete kexec-tools.Coloque el kernel de bloqueo para grub. Conf.Configure la ubicación del vertedero.Configure su colector principal.Reinicie los servicios de kdump.Ejecute manualmente un volcado de claves.Mira los archivos principales.Análisis de Kdump con crash.
How To Interpret A Linux Core Dump File
Comment Interpréter Un Fichier De Vidage De Mémoire Linux
Как интерпретировать файл дампа ядра Linux
Linux 코어 덤프 파일을 해석하는 방법
Jak Zinterpretować Plik Zrzutu Rdzenia Systemu Linux?
So Interpretieren Sie Eine Linux-Core-Dump-Datei
Come Interpretare Un File Dump Del Core Di Linux
Hur Man Tolkar En Linux Core Dump-fil
Hoe Een Linux Core Dump-bestand Te Interpreteren?
Como Interpretar Um Arquivo Linux Core Dump