2010-10-01 10 views
6

Moje projekty osadzone mają krok postprocesowy, który zastępuje wartość w pliku wykonywalnym CRC (niektórych sekcji) lampy błyskowej. Ten krok można wykonać tylko po połączeniu, ponieważ jest to pierwsza okazja do wyświetlenia obrazu CRC. W przeszłości format pliku to COFF, a ja utworzyłem niestandardowe narzędzie do łatania.Narzędzie do prostej modyfikacji pliku elfa?

Narzędzie programistyczne zmieniło się na ELF, więc muszę ponownie wdrożyć poprawkę CRC. Zanim to zrobię, pomyślałem, że będę szukał istniejącego narzędzia, aby to zrobić. Kompilator jest oparty na gcc, ale nie widzę żadnej kombinacji ld i nm i readelf, które mogą wykonać zadanie. Wyszukiwarka Google nie była owocna.

Moje obecne narzędzie używa nm, aby znaleźć adres do zainstalowania, i wywołuje narzędzie patchera z adresem, oczekiwaną wartością (aby zapobiec zastąpieniu nieprawidłowych danych) i nową wartością CRC. CRC oblicza się w formacie "hex" pliku wykonywalnego (który również łatam), więc na szczęście nie muszę przerabiać tej części.

Mogę to zaimplementować ponownie z libelf i niestandardowym kodem, ale zanim to zrobię, czy już istnieje?

Czy istnieje lepszy sposób osiągnięcia mojego celu umieszczenia CRC pliku wykonywalnego w pliku wykonywalnym, aby był dostępny dla aplikacji?

Odpowiedz

4

Jeśli mam rozumieć to, co próbujemy zrobić poprawnie, myślę, że będzie działać co następuje:

  • nm daje wykonania wirtualny adres żądanej lokalizacji załatać;
  • readelf -S podaje zarówno wirtualny adres środowiska wykonawczego, jak i przesunięcie w pliku dla początku każdej sekcji;
  • łączenie dwóch razem (np. Z kilkoma liniami ulubionego języka skryptowego) powoduje przesunięcie w pliku do poprawek.
+0

To świetna propozycja, +1. Dam temu szansę. –

0

Nie jestem pewien, czy to zadziała, ale być może uda ci się go tak ustawić, aby pozycja CRC w twoim pliku obiektowym miała być ustawiona na adres zewnętrznego symbolu X. Ten zewnętrzny symbol może być wówczas spełniony przez ostatni etap łączenia przez połączenie w pliku elfa, który nic nie wyszczególnił, że adres był CRC, który obliczyłeś.

To nadal jest dość hacky, i nie jestem pewien, czy jest to łatwe do zrobienia (ponieważ jest to nadużycie narzędzi).

+0

Tak, nie wymyśliłem, jak to zrobić, ponieważ link nie kończy się z brakującymi symbolami, i potrzebuję linka zrobione, abym mógł obliczyć CRC. –

+0

Myślałem, że to nie może być problem, ale wydaje się, że nawet po ponownym połączeniu zbudowanego pliku wykonywalnego (wszystkie zależności spełnione przez ten jeden plik), 'ld' reorganizuje i rozbija rzeczy. Istnieje kilka programów do wczytywania numerów seryjnych do obrazów oprogramowania układowego. Może jest taki jeden na zdjęcia elfów, które można zmienić. – nategoose

Powiązane problemy