2012-08-17 28 views
12

Tôi muốn tạo System.map từ vmlinuz, khiến hầu hết các máy không có tệp System.map.In, vmlinuz được nén thành vmlinuz hoặc bzImage.Trích xuất vmlinux từ vmlinuz hoặc bzImage

Có bất kỳ công cụ hoặc tập lệnh nào có thể thực hiện việc này không?

tôi đã cố gắng:

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 

Nó được thất bại:

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

Bạn có chắc không? Không có biểu tượng nào trong các tệp được trích xuất ;-( – daisy

+1

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

Trả lời

14

Để trích xuất hạt nhân không nén từ hình ảnh hạt nhân, bạn có thể sử dụng kịch bản extract-vmlinux từ thư mục scripts trong cây hạt nhân (có sẵn ít nhất trong phiên bản kernel 3.5) (nếu bạn gặp lỗi như

mktemp: Không thể tạo tệp tạm thời/tmp/vmlinux-XXX: Đối số không hợp lệ

bạn cần thay thế $(mktemp /tmp/vmlinux-XXX) bởi $(mktemp /tmp/vmlinux-XXXXXX) trong tập lệnh). Lệnh là /path/to/kernel/tree/scripts/extract-vmlinux <kernel image> >vmlinux.

Nếu nhị phân hạt nhân được trích xuất chứa thông tin biểu tượng, bạn nên¹ có thể tạo tệp System.map bằng cách sử dụng tập lệnh mksysmap từ cùng một thư mục con. Lệnh ở đây là NM=nm /path/to/kernel/tree/scripts/mksysmap vmlinux System.map.

¹ Hình ảnh hạt nhân được phân phối với bản phân phối của tôi dường như bị tước đi, do đó tập lệnh không thể nhận được biểu tượng.

+0

cảm ơn sự giúp đỡ của bạn !! Tôi đã nhận được tập lệnh từ 3.5. 2 và kết quả là [root @ lwq2 test] # ./extract-vmlinux.sh vmlinuz extract-vmlinux.sh: Không thể tìm thấy vmlinux. – hellolwq

+0

Hm, tôi thực sự đã có cùng một vấn đề đầu tiên, nguyên nhân là kịch bản không thành công tạo một tập tin tạm thời cần thiết/tmp/vmlinux-XXX (trong trường hợp của tôi, tôi cần thay đổi nó thành/tmp/vmlinux-XXXXXX để làm cho nó hoạt động, số lượng X'es cần thiết được đề cập trong trang hướng dẫn sử dụng cho mktemp) Đoạn mã vmlinux trích xuất từ ​​phiên bản 3.5.2 cũng sử dụng ba chữ X'es thay vì sáu, vì vậy điều này có thể là vấn đề ... – Abrixas2

2

Như Abrixas2 đã viết, bạn sẽ cần một hình ảnh hạt nhân với thông tin biểu tượng để tạo tệp System.map và hình ảnh vmlinuz được đóng gói không có khả năng có biểu tượng trong đó. Tuy nhiên, tôi có thể xác minh rằng tập lệnh trong bài đăng gốc của bạn hoạt động với '-e' được thay thế bằng '-P' và '$' bị bỏ, tức là,

$ 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

Điều này dường như không hoạt động với phiên bản grep mới nhất. –

+0

Tuyệt vời. Tiết kiệm rất nhiều thời gian của tôi. eed để tải xuống mã nguồn hoặc các bước thủ công để giải nén. –