web-dev-qa-db-fra.com

Comment puis-je découvrir Vmlinuz à vmlinux?

J'ai déjà essayé de décompresser, GZIP et toutes les autres solutions proposées comme des résultats de Google et ceux-ci n'ont pas fonctionné pour moi.

Pour obtenir juste la recherche de l'image de la signature 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

donc, l'image commence à 24576+8 => 24584. Puis copiez simplement l'image du point et décompressez-la -

> 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

Vous avez obtenu ces instructions à Verbatim à partir d'un forum en ligne: http://www.codeguru.com/forum/showthread.php?t=415186

Ce processus ne fonctionne pas pour moi et finit par donner des erreurs qui indiquent que le fichier indique non pas 0024576 et tous les numéros ultérieurs.

Comment procéder à Vmlinux de Vmlinuz?

Merci.

Edité: C'est une question ingénierie inverse. Je n'ai pas accès à la distribution d'installer de RPM ni de recompiler. Je commence avec rien mais vmlinuz.

20
Lord Loh.

Peut-être que vous avez mal compris ce que l'auteur de cette post signifiait.

  1. Le fichier vmlinuz contient d'autres éléments en dehors du contenu gzippé, vous devez donc savoir où le contenu gzippé commence. Pour ce faire, utilisez:

    od -A d -t x1 vmlinuz | grep '1f 8b 08 00'
    

    Ce que cela fait est de vous montrer où dans ce fichier, vous pouvez trouver l'en-tête GZIP. La sortie ressemble à:

    0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
    

    Cela signifie qu'à 0024576 (au moins pour l'auteur de l'article, le vôtre pourrait être quelque part complètement différent) dans le fichier vmlinuz, vous trouverez les valeurs binaires "24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45". Vous cherchez 1f 8b 08 00, qui peut être trouvé du personnage 9 à partir ou, à l'adresse 0024576 + 8 (commencez à compter de 0) = 24584.

  2. Maintenant que vous savez où le contenu gzippé commence (en position 24584) Vous pouvez utiliser dd pour extraire ce contenu gzippé et le nongzip. Pour ce faire, utilisez:

    dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux
    

    La première commande cherchera à cette position et tout copiera tout sur stdout. zcat puis décompressera tout ce qu'il gagne de STDIN et ira la chaîne non compressée à STDOUT. Puis le > Rediriger zcat 's sortie à un nouveau fichier nommé vmlinux.

31
rid
28
Craig Ringer

J'ai couru dans un simple problème - à la recherche de la version correcte de Vmlinux pour crash. Au lieu d'essayer de décompresser Vmlinuz à Vmlinux.

La meilleure solution est la suivante: Installez le RPM: kernel-debuginfo, Ce RPM contient un fichier vmlinux approprié.

Faites attention au nom du RPM, il existe plusieurs noms similaires (déroutants). Dois être: kernel-debuginfo-$(version).rpm

2
Henry

Les noyaux modernes ne sont pas toujours (en fait, pas généralement) gzip comprimé. Ils peuvent utiliser BZIP2 ou LZMA. Une recherche sur le Web rapide n'a pas aidé à trouver les chaînes magiques pour ces méthodes de compression - vous pourriez mieux vérifier plusieurs images du noyau pour trouver l'en-tête invariant qui inclut le code de décompression.

1
CarlF

Les lignes de décompression ci-dessus ont fonctionné pour moi et, bien sûr, le noyau a été dépouillé. Par conséquent, pas de bonne information là-bas.

Si vous avez besoin de modifier votre ancien noyau, comme le mettre en débogage, utilisez uname -r Pour obtenir la révision de votre noyau et obtenir sa source:

Sudo apt-get source linux-image-\`uname -r\`

La source sera dans /usr/src/linux...cd à l'arborescence source et:

make oldconfig
make

Cela tentera de trouver le fichier contenant la configuration du noyau actuellement exécutant - généralement

/boot/config-\`uname -r\` 

et utilisez-le pour cette construction recréant ainsi le noyau en cours d'exécution.

Construisez cela comme vous le souhaitez; avoir accès au noyau non filtrué au besoin.

Les coquilles ci-dessus ne trouveront probablement pas le numéro de magie GZIP en raison de l'espacement. Oui, ils sont toujours compressés de la même manière, bien que j'écris un an après la discussion initiale. Envoyez la sortie à less et recherchez 1f 8b ou même 1f. Vérifiez le reste des octets manuellement pour déterminer une correspondance et vérifier que vous avez la première instance. Utilisez le décalage trouvé en mémoire que c'est décimal.

1
kdm