J'ai déjà essayé de décompresser, gzip et toutes les autres solutions qui apparaissent sous la forme de résultats Google et celles-ci n'ont pas fonctionné pour moi.
Pour obtenir juste la recherche d'image pour 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
. Il suffit ensuite de copier l'image à partir du point et de la décompresser -> 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 ces instructions textuellement sur 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 le fichier non trouvé 0024576 et tous les numéros suivants.
Comment dois-je procéder pour extraire vmlinux de vmlinuz?
Je vous remercie.
EDITÉ: Il s'agit d'une question de rétro-ingénierie. Je n'ai pas accès à la distribution pour installer un RPM ou recompiler. Je commence avec rien mais vmlinuz.
la source
Réponses:
Vous avez peut-être mal compris ce que l'auteur de ce message voulait dire.
Le
vmlinuz
fichier contient d'autres éléments que le contenu compressé, vous devez donc savoir où commence le contenu compressé. Pour ce faire, utilisez:Ce que cela fait, c'est de vous montrer où dans ce fichier vous pouvez trouver l'en-tête gzip. La sortie ressemble à:
Cela signifie que dans
0024576
(au moins pour l'auteur de l'article, le vôtre peut être quelque part complètement différent) dans levmlinuz
fichier, vous trouverez les valeurs binaires "24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
". Vous recherchez1f 8b 08 00
, que vous pouvez trouver à partir du personnage 9 ou à0024576 + 8
(commencer à compter à partir de 0)= 24584
.Maintenant que vous savez où commence le contenu compressé (à la position
24584
), vous pouvez utiliserdd
pour extraire ce contenu compressé et le décompresser. Pour ce faire, utilisez:La première commande cherchera à cette position et copiera tout sur stdout.
zcat
puis décompressera tout ce qu'il obtient de stdin et affichera la chaîne non compressée sur stdout. Ensuite, la>
redirigerazcat
la sortie vers un nouveau fichier nommévmlinux
.la source
od
la sortie de. Utilisez bgrep pour rechercher1f8b0800
. 2) Le noyau est compressé en utilisant un algorithme différent. Essayezfd377a585a00
pour xz ou425a6839
pour bzip2 .Les sources du noyau contiennent maintenant un script pour cela
extract-vmlinux
,. Vous n'avez pas besoin de rouler le vôtre.Voir cette réponse SO .
la source
apt-file search extract-vmlinux
donne plusieurs paquets d'en-tête du noyau linux, etlocate extract-vmlinux
conduit à quelques hits sur ma machine Ubuntu 18.04 locale:/usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinux
bien que rienPATH
n'y semble.En fait, avant de générer le
vmlinuz
fichier, la plupart des symboles sont supprimés. Vous ne pouvez donc pas reconstruire un vrai àvmlinux
partir devmlinuz
, le fichier ne sera pas aussi utile pour le débogage.la source
J'ai rencontré un problème simple - à la recherche d'une version correcte de vmlinux pour un crash. Au lieu d'essayer de décompresser vmlinuz en vmlinux.
La meilleure solution est: installez le RPM
kernel-debuginfo
:, ce RPM contient le fichier vmlinux approprié.Faites attention au nom du rpm, il existe plusieurs noms similaires (déroutants). Doit y avoir:
kernel-debuginfo-$(version).rpm
la source
Les noyaux modernes ne sont pas toujours (en fait, généralement pas) compressés au format gzip. Ils peuvent utiliser bzip2 ou LZMA. Une recherche rapide sur le Web ne m'a pas aidé à trouver les chaînes magiques pour ces méthodes de compression - vous feriez mieux de vérifier plusieurs images du noyau pour trouver l'en-tête invariant qui inclut le code de décompression.
la source
Les lignes de décompression ci-dessus ont fonctionné pour moi et, bien sûr, le noyau a été dépouillé. Par conséquent, aucune bonne information là-bas.
Si vous devez apporter des modifications à votre ancien noyau, comme le mettre dans le débogage, utilisez
uname -r
pour obtenir la révision de votre noyau et obtenir sa source:La source sera dans
/usr/src/linux...
cd
l'arborescence source et:Cela tentera de trouver le fichier contenant la configuration du noyau en cours d'exécution - généralement
et l'utiliser pour cette build recréant ainsi le noyau en cours d'exécution.
Construisez-le comme vous le souhaitez; avoir accès au noyau non dépouillé selon les besoins.
Les coquilles ci-dessus ne trouveront probablement pas le nombre magique gzip en raison de l'espacement. Oui, ils sont toujours compressés de la même manière, même si j'écris un an après la discussion d'origine. Envoyez la sortie à
less
et recherchez1f 8b
ou même1f
. Vérifiez le reste des octets manuellement pour déterminer une correspondance et vérifiez que vous disposez de la première instance. Utilisez le décalage trouvé en vous souvenant qu'il est décimal.la source