Ya he intentado descomprimir, gzip y todas las demás soluciones que aparecen como resultados de google y estas no me han funcionado.
Para obtener solo la imagen, busque la firma GZ -
1f 8b 08 00.> od -A d -t x1 vmlinuz | grep '1f 8b 08 00' 0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45entonces la imagen comienza en
24576+8 => 24584. Luego simplemente copie la imagen desde el punto y descomprímalo.> dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux 1450414+0 records in 1450414+0 records out 1450414 bytes (1.5 MB) copied, 6.78127 s, 214 kB/sObtuve estas instrucciones textualmente de un foro en línea: http://www.codeguru.com/forum/showthread.php?t=415186
Este proceso no funciona para mí y termina dando errores que indican el archivo no encontrado 0024576 y todos los números posteriores.
¿Cómo procedo a extraer vmlinux de vmlinuz?
Gracias.
EDITADO: Esta es una pregunta de ingeniería inversa. No tengo acceso a la distribución para instalar ningún RPM o recompilar. Empiezo con nada más que vmlinuz.
fuente

Respuestas:
Quizás entendiste mal lo que quería decir el autor de esa publicación.
El
vmlinuzarchivo contiene otras cosas además del contenido comprimido, por lo que debe averiguar dónde comienza el contenido comprimido. Para hacer eso, use:Lo que esto hace es mostrarle dónde en ese archivo puede encontrar el encabezado gzip. El resultado se ve así:
Esto significa que al
0024576(en elvmlinuzarchivo, al menos para el autor de la publicación, el tuyo podría ser completamente diferente) , encontrarás los valores binarios "24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45". Estás buscando1f 8b 08 00, que se puede encontrar desde el personaje 9 en adelante, o, en0024576 + 8(comienza a contar desde 0)= 24584.Ahora que sabe dónde comienza el contenido comprimido (en la posición
24584), puede usarloddpara extraer ese contenido comprimido y descomprimirlo. Para hacer eso, use:El primer comando buscará esa posición y copiará todo a stdout.
zcatluego descomprimirá todo lo que obtiene de stdin y enviará la cadena sin comprimir a stdout. Luego>, redirigirázcatla salida a un nuevo archivo llamadovmlinux.fuente
odla salida de '. Use bgrep para buscar1f8b0800. 2) El núcleo se comprime usando un algoritmo diferente. Pruebafd377a585a00con xz o425a6839con bzip2 .Las fuentes del núcleo ahora contienen un script para esto
extract-vmlinux,. No necesitas rodar el tuyo.Ver esta respuesta SO .
fuente
apt-file search extract-vmlinuxofrece varios paquetes de encabezado de kernel de Linux ylocate extract-vmlinuxgenera algunos resultados en mi máquina Ubuntu 18.04 local:/usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinuxaunque nadaPATHparece.En realidad, antes de generar el
vmlinuzarchivo, la mayoría de los símbolos se eliminan. Por lo tanto, no puede reconstruir un verdaderovmlinuxdesdevmlinuz, el archivo no será tan útil para la depuración.fuente
Me encontré con un problema simple: buscaba la versión correcta de vmlinux para el bloqueo. En lugar de intentar descomprimir vmlinuz a vmlinux.
La mejor solución es: instalar RPM:
kernel-debuginfoese RPM contiene el archivo vmlinux adecuado.Presta atención al nombre de rpm, hay varios nombres similares (confusos). Tiene que ser:
kernel-debuginfo-$(version).rpmfuente
Los núcleos modernos no siempre están (de hecho, no generalmente) comprimidos con gzip. Pueden usar bzip2 o LZMA. Una búsqueda rápida en la web no me ayudó a encontrar las cadenas mágicas para esos métodos de compresión; es mejor que verifique varias imágenes del kernel para encontrar el encabezado invariable que incluye el código de descompresión.
fuente
Las líneas de descompresión anteriores funcionaron para mí y, por supuesto, el núcleo fue despojado. Por lo tanto, no hay buena información allí.
Si necesita hacer cambios en su núcleo anterior, como ponerlo en depuración, use
uname -rpara obtener la revisión de su núcleo y obtener su fuente:La fuente estará en
/usr/src/linux...cdel árbol fuente y:Esto intentará encontrar el archivo que contiene la configuración para el núcleo actualmente en ejecución, generalmente
y úselo para esta compilación recreando así el núcleo en ejecución.
Construye eso de la manera que quieras; tener acceso al núcleo sin tirar según sea necesario.
Los proyectiles anteriores probablemente no encontrarán el número mágico gzip debido al espaciado. Sí, todavía están comprimidos de la misma manera, aunque estoy escribiendo un año después de la discusión original. Envíe la salida
lessy busque1f 8bo incluso1f. Verifique el resto de los bytes manualmente para determinar una coincidencia y verifique que tenga la primera instancia. Use el desplazamiento encontrado recordando que es decimal.fuente