2012-01-12 6 views
5

Mam cross-toolchain toolchain dla systemu wbudowanego (mipsel) na moim systemie x86 Linux. Wiem, jak zbudować własne jądro (nazwijmy obraz „vmlinux”) dla niego i jak rozebrać ten obraz poprzezOkreśl adres ładowania i punkt wejściowy usuniętego obrazu jądra systemu Linux

objcopy -S -O binary vmlinux vmlinux.bin 

Dla dalszego przetwarzania muszę również adres obciążenia oraz punkt wejścia obrazu. Przed stripping to nie ma problemu, aby określić je poprzez scripts/mksysmap lub bardziej wyraźny, poprzez

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

Wtedy mogę określić adres obciążenia oraz punkt wejścia poprzez

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

Teraz wyzwaniem jest to, że czasami Nie buduję jądra samodzielnie, ale otrzymuję gotowe jądro po zostało już pozbawione jego symboli poprzez objcopy. Czy ktoś może mi powiedzieć, jak to zrobić? Nie jestem biegły w budowaniu jądra i używaniu toolchain. Zarówno nm i objdump nie podoba się uproszczoną obraz, mówiąc

vmlinux.bin: File format not recognized 

Odpowiedz

1

Od objcopy manual page

może objcopy być używany do generowania surowy plik binarny przez użyciem cel wyjścia binarne (np użyj -O binarny). Gdy objcopy generuje surowy plik binarny, generuje on w zasadzie zrzut pamięci zawartości wejściowego pliku obiektów. Wszystkie symbole i dane dotyczące przeniesienia zostaną odrzucone. Zrzut pamięci rozpocznie się od wirtualnego adresu najniższej sekcji skopiowanej do pliku wyjściowego.

Oto przykład, który może być stosowany na architekturze PowerPC:

oryginalny vmlinux

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

pozbawiony vmlinux jest uważany za "dane" plik

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

Konwersja binarna do formatu ELF dla Powe rPC

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

wyjście vmlinux jest obecnie uważany za plik 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 

Musisz przekazać parametr -I, -B i -O. Możesz uzyskać te parametry z dokumentacji objcopy.

Ale odkąd twój plik binarny jest rozebrany już próbuje dekompilować, może to nie być opłacalne, ponieważ informacje o sekcji są niedostępne. Wszystkie dane w pliku zostaną zrzucone do sekcji .data.

+0

Opłakane dzięki za tę odpowiedź.Niestety nie otrzymałem powiadomienia o odpowiedzi przez e-mail, przepraszam. Właściwie udało mi się znaleźć inny sposób na znalezienie adresu ładowania i punktu wejścia, ale moje rozwiązanie było specyficzne dla sytuacji i nie można go zastosować ogólnie, więc nie cytuję go tutaj. Powiem tylko, że proponowane przez ciebie rozwiązanie tworzy plik ELF, ale plik nie zawiera pożądanych informacji o relokacji. W związku z tym informacji nie można wyodrębnić z niego za pomocą 'nm -n'. Dzięki za odpowiedź mimo to. – kriegaex

Powiązane problemy