2012-01-12 26 views
5

Tôi có một chuỗi công cụ crosscompiling cho một hệ thống nhúng (mipsel) trên x86 Linux của tôi. Tôi biết làm thế nào để xây dựng một kernel tùy chỉnh (chúng ta hãy gọi hình ảnh "vmlinux") cho nó và làm thế nào để gỡ bỏ hình ảnh đó quaXác định địa chỉ tải và điểm vào của hình ảnh hạt nhân Linux bị tước

objcopy -S -O binary vmlinux vmlinux.bin 

Đối với chế biến tiếp Tôi cũng cần địa chỉ tải và điểm nhập cảnh của hình ảnh. Trước tước nó là không có vấn đề để xác định chúng qua scripts/mksysmap hoặc, một cách rõ ràng hơn, qua

nm -n vmlinux | grep -v '\([aNUw] \)\|\(__crc_\)\|\(\$[adt]\)' > System.map 

Sau đó, tôi có thể xác định địa chỉ tải và điểm nhập cảnh qua

awk '/A _text/ { print "0x"$1; }' < _System.map 
awk '/T kernel_entry/ { print "0x"$1; }' < System.map 

Bây giờ thách thức là đôi khi Tôi không tự xây dựng hạt nhân, nhưng có được một hạt nhân được xây dựng sẵn sau nó đã bị tước bỏ các biểu tượng của nó thông qua objcopy. Ai có thể cho tôi biết làm thế nào để làm điều này? Tôi không phải là rất thành thạo trong xây dựng hạt nhân và sử dụng toolchain. Cả hai nmobjdump không thích những hình ảnh lột, nói

vmlinux.bin: File format not recognized 

Trả lời

1

Từ objcopy manual page

objcopy thể được sử dụng để tạo ra một tập tin nhị phân thô bằng cách sử dụng một mục tiêu sản lượng nhị phân (ví dụ, sử dụng -O nhị phân). Khi objcopy tạo ra một tệp nhị phân thô, về cơ bản nó sẽ tạo ra một kết xuất bộ nhớ của nội dung của tệp đối tượng đầu vào. Tất cả các biểu tượng và thông tin di dời sẽ bị loại bỏ. Kết xuất bộ nhớ sẽ bắt đầu tại địa chỉ ảo của phần thấp nhất được sao chép vào tệp đầu ra.

Dưới đây là một ví dụ mà có thể được sử dụng trên kiến ​​trúc PowerPC:

gốc vmlinux

bash-3.2$ file vmlinux 
vmlinux: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped 

vmlinux lột được coi là một "dữ liệu" nộp

bash-3.2$ file vmlinux.bin 
vmlinux.bin: data 

chuyển đổi nhị phân sang định dạng ELF cho Powe RPC

bash-3.2$ powerpc-440fp-linux-objcopy -I binary vmlinux.bin -B powerpc -O elf32-powerpc vmlinux.bin.x 

sản lượng vmlinux hiện được coi là một tập tin ELF

bash-3.2$ file vmlinux.bin.x 
vmlinux.bin.x: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped 

Bạn phải vượt qua các tham số -Tôi, -B-O. Bạn có thể lấy thông số này từ tài liệu objcopy của bạn.

Nhưng kể từ khi nhị phân của bạn bị tước đã cố gắng để dịch ngược nó có thể không đáng giá vì thông tin phần không có sẵn. Tất cả các dữ liệu trong tập tin sẽ được đổ vào secata .data.

+0

Cảm ơn bạn đã biết câu trả lời đó.Thật không may tôi đã không nhận được thông báo về câu trả lời qua e-mail, xin lỗi. Trên thực tế, tôi đã tìm cách khác để tìm ra địa chỉ tải và điểm vào, nhưng giải pháp của tôi là cụ thể cho tình huống và không thể áp dụng chung, vì vậy tôi không trích dẫn nó ở đây. Hãy để tôi chỉ nói rằng giải pháp được đề xuất của bạn không tạo tệp ELF, nhưng tệp không chứa thông tin di chuyển mong muốn. Do đó, thông tin không thể được trích xuất từ ​​nó thông qua 'nm -n'. Cảm ơn bạn đã trả lời. – kriegaex

Các vấn đề liên quan