
एक उपकरण जो कर्नेल प्रतीक तालिका (kallsyms) निकालकर कच्चे कर्नेल से पूरी तरह विश्लेषण-योग्य .ELF पुनर्प्राप्त करता है।
यह टूल एक vmlinux/vmlinuz/bzImage/zImage कर्नेल इमेज (चाहे वह रॉ बाइनरी ब्लॉब हो या पहले से मौजूद लेकिन स्ट्रिप किया गया .ELF फ़ाइल) से पूरी तरह विश्लेषण योग्य .ELF फ़ाइल प्राप्त करने की अनुमति देता है, जिसमें पुनर्प्राप्त फ़ंक्शन और वेरिएबल प्रतीक शामिल होते हैं।
इसके लिए, यह आपके कर्नेल में एक कर्नेल प्रतीक तालिका (kallsyms) खोजता है, एक संपीड़ित प्रतीक तालिका जो लगभग हर कर्नेल में मौजूद होती है, अधिकांशतः अपरिवर्तित।
चूँकि संबंधित प्रतीक तालिका मूल रूप से संपीड़ित होती है, इसे उन स्ट्रिंग्स को पुनर्प्राप्त करना चाहिए जो मूल बाइनरी में दिखाई नहीं देती हैं।
यह एक .ELF फ़ाइल उत्पन्न करता है जिसका आप IDA Pro और Ghidra का उपयोग करके विश्लेषण कर सकते हैं। इसलिए यह टूल एम्बेडेड सिस्टम रिवर्स इंजीनियरिंग के लिए उपयोगी है।
उपयोग:
# Command line:
vmlinux-to-elf <input_kernel.bin> <output_kernel.elf>
# Command line, list symbol addresses only:
kallsyms-finder <input_kernel.bin> # If installed with uv
vmlinux-to-elf.kallsyms-finder # If installed with snap
# Command line, just decompress the kernel:
vmlinuz-decompressor <input_kernel.bin> <output_kernel.bin> # If installed with uv
vmlinux-to-elf.vmlinuz-decompressor # If installed with snap
# Graphical:
vmlinux-to-elf-gui # If installed with uv
vmlinux-to-elf.gui # If installed with snap
flatpak run re.fossplant.vmlinux-to-elf # If installed with flatpak
स्थापना:
# Install CLI+GUI with Snap (recommended on Ubuntu)
sudo snap install vmlinux-to-elf
# Install CLI+GUI with yay (recommended on Arch, Manjaro)
yay -S vmlinux-to-elf libadwaita python-gobject
# Install CLI+GUI with uv (example with Fedora)
sudo dnf install -y uv glib2-devel libadwaita-devel gtk4-devel \
gobject-introspection-devel python3-gobject-devel \
python3-devel cairo-devel @development-tools
uv tool install vmlinux-to-elf[gui]
vmlinux-to-elf-gui --install-metadata # Install .desktop file
# Install CLI with uv and GUI with Flatpak (recommended on
# distributions with libadwaita < 1.6)
sudo dnf install -y uv flatpak @development-tools
uv tool install vmlinux-to-elf
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install re.fossplant.vmlinux-to-elf
स्थानीय विकास वातावरण सेटअप:
sudo snap install --classic astral-uv
sudo apt install git
git clone [email protected]:marin-m/vmlinux-to-elf.git
# Dependencies for the GTK-4 GUI
sudo apt install libgirepository-2.0-dev libadwaita-1-dev \
gir1.2-adw-1 gir1.2-gtk-4.0 python3-dev blueprint-compiler
cd vmlinux-to-elf
cp -a .github/hooks/* .git/hooks/
# Download Python modules and initialize virtualenv (creates ".venv",
# call "source .venv/bin/activate" to set up)
uv sync --extra gui
# Add vmlinux-to-elf to $PATH, so that the commands are callable
# system-wide (creates a symlink to the source in "~/.local/bin")
uv tool install -e .[gui]
ANDROID! या UNCOMPRESSED_IMG मैजिक से शुरू होने वाली कुछ प्रकार की Android boot.img फ़ाइलों को अनपैक करें [OK]"kallsyms" प्रतीक तालिका का एक संक्षिप्त इतिहास "kallsyms.py" फ़ाइल के शीर्ष पर पाया जा सकता है। संक्षेप में, इसे लगभग 2004 में Linux कर्नेल में इसके वर्तमान रूप में पेश किया गया था और अन्य चीजों के अलावा "Kernel oops" संदेशों को प्रिंट करने के लिए उपयोग किया जाता है।
इसमें "प्रतीक नाम", "प्रतीक पता", "प्रतीक प्रकार" के टुपल्स होते हैं (प्रतीक प्रकार nm उपयोगिता के समान शैली में एक अकेले अक्षर से निर्दिष्ट किए जाते हैं), यह जानकारी एक साधारण संपीड़न एल्गोरिथ्म के साथ कसकर पैक की जाती है।
नीचे दिया गया स्कीमा दिखाता है कि यह जानकारी कर्नेल में कैसे क्रमबद्ध की जाती है, प्रत्येक संरचना का ऑफसेट vmlinux-to-elf द्वारा ह्यूरिस्टिक्स के माध्यम से पता लगाया जाता है: