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 45
entonces 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/s
Obtuve 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
vmlinuz
archivo 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 elvmlinuz
archivo, 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 usarlodd
para extraer ese contenido comprimido y descomprimirlo. Para hacer eso, use:El primer comando buscará esa posición y copiará todo a stdout.
zcat
luego descomprimirá todo lo que obtiene de stdin y enviará la cadena sin comprimir a stdout. Luego>
, redirigirázcat
la salida a un nuevo archivo llamadovmlinux
.fuente
od
la salida de '. Use bgrep para buscar1f8b0800
. 2) El núcleo se comprime usando un algoritmo diferente. Pruebafd377a585a00
con xz o425a6839
con 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-vmlinux
ofrece varios paquetes de encabezado de kernel de Linux ylocate extract-vmlinux
genera algunos resultados en mi máquina Ubuntu 18.04 local:/usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinux
aunque nadaPATH
parece.En realidad, antes de generar el
vmlinuz
archivo, la mayoría de los símbolos se eliminan. Por lo tanto, no puede reconstruir un verdaderovmlinux
desdevmlinuz
, 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-debuginfo
ese RPM contiene el archivo vmlinux adecuado.Presta atención al nombre de rpm, hay varios nombres similares (confusos). Tiene que ser:
kernel-debuginfo-$(version).rpm
fuente
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 -r
para obtener la revisión de su núcleo y obtener su fuente:La fuente estará en
/usr/src/linux...
cd
el á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
less
y busque1f 8b
o 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