2012-08-17 8 views
12

Voglio generare System.map da vmlinuz, perché la maggior parte delle macchine non ha il file System.map.In realtà, vmlinuz è compresso in vmlinuz o bzImage.Estrarre vmlinux da vmlinuz o bzImage

È possibile utilizzare qualsiasi strumento o script?

ho provato:

dd if=/boot/vmlinuz skip=`grep -a -b -o -m 1 -e $'\x1f\x8b\x08\x00' /boot/vmlinuz | cut -d: -f 1` bs=1 | zcat > /tmp/vmlinux 

È stato fallito:

zcat: stdin: not in gzip format 
32769+0 records in 
32768+0 records out 
+0

Sei sicuro? Non ci sono simboli nei file estratti ;-( – daisy

+1

https://superuser.com/questions/298826/how-do-i-uncompress-vmlinuz-to-vmlinux –

risposta

14

Per estrarre il kernel non compresso da l'immagine del kernel, è possibile utilizzare lo script extract-vmlinux dalla directory scripts nell'albero del kernel (disponibile almeno nel kernel versione 3.5) (se si verifica un errore come

mktemp: Impossibile creare il file temp/tmp/vmlinux-XXX: Invalid argument

è necessario sostituire $(mktemp /tmp/vmlinux-XXX) dal $(mktemp /tmp/vmlinux-XXXXXX) nello script). Il comando è /path/to/kernel/tree/scripts/extract-vmlinux <kernel image> >vmlinux.

Se il file binario estratto contiene informazioni sui simboli, è necessario essere in grado di creare il file System.map utilizzando lo script mksysmap dalla stessa sottodirectory. Il comando qui è NM=nm /path/to/kernel/tree/scripts/mksysmap vmlinux System.map.

¹ Le immagini del kernel fornite con la mia distribuzione sembrano essere rimosse, quindi la sceneggiatura non è stata in grado di ottenere i simboli.

+0

grazie per il tuo aiuto !! Ho ottenuto lo script da 3.5. 2 e il risultato è [root @ lwq2 test] # ./extract-vmlinux.sh vmlinuz extract-vmlinux.sh: Impossibile trovare vmlinux. – hellolwq

+0

Hm, in realtà ho avuto lo stesso problema prima, la causa era che lo script non riusciva a creare un file temporaneo necessario/tmp/vmlinux-XXX (nel mio caso, avevo bisogno di cambiarlo in/tmp/vmlinux-XXXXXX per farlo funzionare, il numero necessario di X dovrebbe essere menzionato nella pagina di manuale per mktemp) Anche lo script extract-vmlinux dalla versione 3.5.2 utilizza tre X invece di sei, quindi questo potrebbe probabilmente essere il problema ... – Abrixas2

2

Come ha scritto Abrixas2, avrete bisogno di un'immagine del kernel con le informazioni sui simboli per creare file System.map e un'immagine pacchettizzata di Vmlinuz probabilmente non contiene simboli. Posso tuttavia verificare che lo script nel post originale funzioni con "-e" sostituito con "-P" e "$", ovvero

$ dd if=vmlinuz-3.8.0-19-generic skip=`grep -a -b -o -m 1 -P '\x1f\x8b\x08\x00' vmlinuz-3.8.0-19-generic | cut -d: -f 1` bs=1 | zcat > /tmp/vmlinux 
gzip: stdin: decompression OK, trailing garbage ignored 
+0

Questo non sembra funzionare con l'ultima versione di grep –

+0

Funziona per me Eccellente, ho risparmiato molto del mio tempo eed per scaricare la sorgente oi passaggi manuali per decomprimere. –