मैं vmlinuz को vmlinux में कैसे अनसुना कर सकता हूं?


20

मैंने पहले से ही Google के परिणामों के रूप में आने वाले सभी अन्य समाधानों, गज़िप और अन्य समाधानों को आज़माया है और ये मेरे लिए काम नहीं किए हैं।

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

तो छवि शुरू होती है 24576+8 => 24584। फिर बस बिंदु से छवि की प्रतिलिपि बनाएँ और इसे विघटित करें -

> 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

एक मंच से इन निर्देशों को शब्दशः प्राप्त करें: http://www.codeguru.com/forum/showthread.php?t=415186

यह प्रक्रिया मेरे लिए काम नहीं करती है और उन त्रुटियों को समाप्त करती है जो राज्यों को 0024576 और बाद के सभी नंबरों को दर्ज नहीं करती हैं।

मैं कैसे vmlinuz से vmlinux निकालने को आगे बढ़ाऊं?

धन्यवाद।

EDITED: यह एक रिवर्स इंजीनियरिंग प्रश्न है। किसी भी RPM या recompile को स्थापित करने के लिए मेरे पास डिस्ट्रो की कोई पहुँच नहीं है। मैं कुछ नहीं बल्कि vmlinuz से शुरू करता हूं।


2
तुम ऐसा क्यों करना चाहते हो?
फ्लिम्ज

यह वास्तव में एक दोस्त के लिए है जिसे इसके साथ कुछ करना था। सवाल दिलचस्प लगा और मैंने इसे अपने अकादमिक हित के लिए अपनाया। इसका एक विकल्प कर्नेल का निर्माण करना है: - /

ठीक है, अकादमिक रुचि के लिए, मुझे नहीं पता कि क्या यह आसानी से संभव है। मेरा मानना ​​है कि एक vmlinuz कर्नेल में एक निष्पादन योग्य प्रस्तावना है - यह अनिवार्य रूप से एक आत्म-निकालने वाला संग्रह है। इसीलिए स्ट्रेट गनजिप का इस्तेमाल करना आपके काम नहीं आया। उद्धृत विधि पिछले प्रस्ताव को छोड़ देने का प्रयास करती है। यह काम क्यों नहीं करता, मुझे यकीन नहीं है। हो सकता है कि इसी तरह के अकादमिक हितों के साथ कोई और आपको उपयोगी उत्तर दे सके। :)
टिमटिमाते हुए

जवाबों:


30

हो सकता है आपने गलत समझा हो कि उस पोस्ट के लेखक का क्या मतलब था।

  1. vmlinuzफ़ाइल ताकि आप जहां Gzipped सामग्री शुरू होता है पता लगाने के लिए की जरूरत है, Gzipped सामग्री के अलावा अन्य चीजों में शामिल है। ऐसा करने के लिए, उपयोग करें:

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

    यह क्या करता है आपको यह दिखाने के लिए कि उस फ़ाइल में आप gzip हेडर कहां पा सकते हैं। आउटपुट जैसा दिखता है:

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

    इसका मतलब यह है कि 0024576कम से कम (पोस्ट के लेखक के लिए, आपका vmlinuzफ़ाइल में कहीं और पूरी तरह से अलग हो सकता है) , आपको द्विआधारी मान मिलेगा " 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45"। आप खोज रहे हैं 1f 8b 08 00, जो कि चरित्र 9 के बाद से पाया जा सकता है, या, 0024576 + 8(0 से गिनती शुरू) = 24584

  2. अब जब आप जानते हैं कि gzipped सामग्री कहाँ शुरू होती है (स्थिति में 24584) तो आप ddउस gzipped सामग्री को निकालने के लिए उपयोग कर सकते हैं और उसे अनजिप कर सकते हैं। ऐसा करने के लिए, उपयोग करें:

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

    पहला कमांड उस स्थिति की तलाश करेगा और सब कुछ stdout में कॉपी करेगा। zcatतब यह सब कुछ स्टड से प्राप्त होगा और असम्पीडित स्ट्रिंग को स्टडआउट में आउटपुट करेगा। फिर एक नई फ़ाइल के नाम से आउटपुट को >रीडायरेक्ट करेगा ।zcatvmlinux


धन्यवाद! यह अब समझ में आता है। हालाँकि, '1 एफ 8 बी 08 00' ने निष्पादन के कुछ सेकंड के बाद मेरे कर्नेल के लिए कुछ भी नहीं लौटाया। जाहिरा तौर पर कोड बदल गया है। मैजिक नंबरों का नया सेट कैसे प्राप्त करें, इस बारे में कोई सुझाव?

@ लॉर्ड लोह: दो संभावनाएं: 1) जादू की संख्या सीमा रेखा के odआउटपुट में है। खोज के लिए bgrep का उपयोग करें 1f8b0800। 2) कर्नेल को एक अलग एल्गोरिथ्म का उपयोग करके संपीड़ित किया जाता है। प्रयास करें fd377a585a00के लिए XZ या 425a6839के लिए bzip2
user1686

@ ग्रेविटी - उत्तर के लिए धन्यवाद। मैंने वह कोशिश की। न तो 1f8b0800, fd377a585a00 और न ही 425a6839 ने कोई परिणाम नहीं दिया। इसलिए मैंने कुछ परिणाम मिलने तक बाइट द्वारा मैजिक स्ट्रिंग बाइट को काटना शुरू कर दिया, और वे सैकड़ों मैच थे :-( इसलिए मैं अभी भी सफलता के बिना हूं।
भगवान लोह।

LZMA मिनिममोडिंग . com/ / के अनुसार "5 डी 00 00 80" है । फिर भी मेरे लिए काम नहीं किया।
सैम ब्राइटमैन

27

कर्नेल के सूत्रों अब, इस के लिए एक स्क्रिप्ट शामिलextract-vmlinux । आपको अपना स्वयं का रोल करने की आवश्यकता नहीं है।

इस SO उत्तर को देखें ।


1
क्या यह Ubuntu 14.04 में उपलब्ध है? मैंने इसे git रेपो में देखा, मैं इसे किस ubuntu पैकेज में ढूँढ सकता हूँ? - धन्यवाद :-)
भगवान लोह।

@LordLoh apt-file search extract-vmlinuxकई लाइनक्स कर्नेल हेडर पैकेज देता है, और locate extract-vmlinuxमेरे स्थानीय Ubuntu 18.04 मशीन पर कुछ हिट करता है: /usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinuxहालांकि इसमें कुछ भी नहीं PATHलगता है।
सिरो सेंटिल्ली 新疆 i i i 事件 '15

ARM के लिए यह "Extract-vmlinux: can’t find vmlinux": unix.stackexchange.com/questions/352215/…
Ciro Santilli 新疆

7

दरअसल, vmlinuzफाइल जेनरेट करने से पहले ज्यादातर सिंबल छीन लिए जाते हैं। तो आप एक सच्चे vmlinuxसे पुनर्निर्माण नहीं कर सकते vmlinuz, फ़ाइल डीबगिंग के लिए उपयोगी नहीं होगी।


2

मैं सरल समस्या में भाग गया - दुर्घटना के लिए vmlinux के सही संस्करण की तलाश में। इसके बजाय vmlinux से vmlinux को विघटित करने की कोशिश कर रहा है।

बेहतर समाधान है: RPM स्थापित करें:, kernel-debuginfoRPM में उचित vmlinux फ़ाइल है।

आरपीएम नाम पर ध्यान दें, कई समान (भ्रमित) नाम हैं। होना चाहिए:kernel-debuginfo-$(version).rpm


1

आधुनिक कर्नेल हमेशा (वास्तव में, आमतौर पर नहीं) गज़िप संकुचित होते हैं। वे bzip2 या LZMA का उपयोग कर सकते हैं। एक त्वरित वेब खोज ने मुझे उन संपीड़न विधियों के लिए जादू के तार खोजने में मदद नहीं की - आप अनियंत्रित शीर्ष लेख को खोजने के लिए कई कर्नेल छवियों की जांच करना बेहतर समझ सकते हैं जिसमें डिकंप्रेसन कोड शामिल है।


1

ऊपर विघटित लाइनों ने मेरे लिए काम किया और निश्चित रूप से, कर्नेल छीन लिया गया। इसलिए वहां कोई अच्छी जानकारी नहीं है।

यदि आपको अपने पुराने कर्नेल में परिवर्तन करने की आवश्यकता है, जैसे इसे डीबग में रखें, uname -rअपने कर्नेल के संशोधन को प्राप्त करने के लिए उपयोग करें और अपना स्रोत प्राप्त करें:

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

स्रोत /usr/src/linux... cdस्रोत वृक्ष के लिए होगा और:

make oldconfig
make

यह वर्तमान में चल रहे कर्नेल के लिए कॉन्फिग युक्त फाइल को खोजने का प्रयास करेगा - आमतौर पर

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

और इस निर्माण के लिए इसका उपयोग इस प्रकार चल रहे कर्नेल को फिर से बनाना।

जिस तरह से आप इसे चाहते हैं का निर्माण; जरूरत के अनुसार बिना गिरे कर्नेल तक पहुंच है।

ऊपर के गोले को संभवतः स्पेस के कारण गज़िप मैजिक नंबर नहीं मिलेगा। हां, वे अभी भी उसी तरह संकुचित हैं, हालांकि मैं मूल चर्चा के एक साल बाद लिख रहा हूं। आउटपुट भेजें lessऔर 1f 8bयहां तक ​​कि खोजें 1f। एक मैच का निर्धारण करने के लिए मैन्युअल रूप से बाइट्स की जाँच करें और सत्यापित करें कि आपके पास पहला उदाहरण है। याद रहे ऑफसेट का उपयोग करें यह दशमलव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.