Recientemente, escribimos un artículo sobre Cómo desempaquetar initrd o initramfs para ver contenido en LinuxDespués de eso, pensé que debería escribir un artículo sobre la extracción de VMlinuz.
Obviamente, te estarás preguntando, ¿Por qué extraer VMInuz? ¿para qué sirve? La extracción del código ensamblador puede ser útil cuando desea depurar dónde ocurre un problema y cómo se ejecuta una función en particular.
En este artículo, aprenderá cómo extraer y desensamblar (leer) archivos vmlinuz en Linux.
¿Qué es vmlinuz?
Una máquina virtual es un comprimido linux centro imagen capaz bota Esta sistema y cargue el núcleo en la memoria. En última instancia, te ayuda con las aplicaciones diarias.
Además, vmlinux es un Ejecutables vinculados estáticamente, lo que significa que el kernel admite formatos de archivos de objetos como Duende, CAFÉ, y a.fuera.
La gente se confunde entre los dos. máquina virtual y VMlinux Debido al mismo nombre, pero los dos son diferentes. VMlinux es un sin comprimir y no iniciable Versión máquina virtual.
Para explicarte, déjanos bifurcación máquina virtual. Esta máquina virtual acrónimo significa Memoria virtual, y Linuz es un versión comprimida de linux.
usted puede /puesta en marcha Directorios, convenciones de nomenclatura incluidas en las versiones del kernel.Por ejemplo vmlinuz-5.10.0-11-amd64.
El primer y más importante paso es descargar un script que lo ayudará a descomprimir VMLinuz a un formato de archivo de objeto como ELF.
Después de eso, podemos usar volcado de objetos comando para desensamblar VMLinuz.
objdump es parte de GNU Binutils. Primero, verifique si Binutils está instalado. Si no, podemos descargarlo desde el administrador de paquetes.
$ objdump --version
$ sudo apt install binutils // Debian/Ubuntu
$ sudo dnf install binutils // AlmaLinux/Fedora
Ya hay un script disponible en el proyecto Linux en Github, solo necesita pasar algunos comandos para descargar el script que desea usar.
$ wget -O extract-vmlinux https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux
Después de descargar el script, puede refinación documento. antes de que, crear Una temporal contenido Allí extraerás VMLiuz.
$ mkdir /tmp/extract-kernel
$ cd extract-kernel
Después de eso, copie el kernel actual en la carpeta recién creada y verifique file
escribe.
$ sudo cp /boot/vmlinuz-$(uname -r) .
$ file vmlinuz-5.10.0-9-amd64
Output:
vmlinuz-5.10.0-9-amd64: Linux kernel x86 boot executable bzImage, version 5.10.0-9-amd64 ([email protected]) #1 SMP Debian 5.10.70-1 (2021-09-30), RO-rootFS, swap_dev 0x6, Normal VGA
El siguiente y último paso extracción Es a través del siguiente código, primero vamos refinación Esta comprimido centroDespués de eso, comprobará documento escribe.
$ sudo bash extract-vmlinux vmlinuz-$(uname -r) > vmlinuz
$ file vmlinuz
Output:
vmlinuz: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=23eb9b22614b52c9c3e7105ac116a67ce749404d, stripped
De acuerdo con el archivo de salida descomprimido con éxito en Duende Propósito.
Desmonte el archivo vmlinuz usando objdump
No puede leer este archivo usando gato O cualquier otro editor de texto; incluso si lo hiciera, imprimiría datos oscuros que no podemos leer.Entonces, para satisfacer este requisito, podemos usar volcado de objetos, que puede leer el archivo de destino.
Ha extraído el núcleo comprimido de los pasos anteriores para Propósito documento.nos deja leer Archivo de objeto usando el siguiente comando.
$ cd extract-kernel
$ objdump -D vmlinuz | less
No se pierda la canalización de datos a través de menos para leer el contenido.
Output:
vmlinuz: file format elf64-x86-64
Disassembly of section .text:
ffffffff81000000 <.text>:
ffffffff81000000: 48 8d 25 51 3f 60 01 lea 0x1603f51(%rip),%rsp # 0xffffffff82603f58
ffffffff81000007: 48 8d 3d f2 ff ff ff lea -0xe(%rip),%rdi # 0xffffffff81000000
ffffffff8100000e: 56 push %rsi
ffffffff8100000f: e8 4c 04 00 00 callq 0xffffffff81000460
envolver
Esto es extracción y desmontaje. máquina virtual archivos en Linux.
Si tiene alguna dificultad para leer nuestros artículos, háganoslo saber en la sección de comentarios.
Un tipo apasionado por la tecnología, exploró algunas tecnologías increíbles y exploró más, y mientras avanzaba, tuve la oportunidad de trabajar en el desarrollo de Android, Linux, AWS, DevOps usando varias herramientas de código abierto.
Uno de mis lemas de vida es «Sé siempre un estudiante de por vida».