Exe czy relokuja kod

0

Witam
mam takie pytanko czy plik Exe aby na pewno relokuje kod czytalem sobie o budowie takowego i w oczy rzucilo mi sie cos takiego (To pole jest obecne w naglowkach sekcji):

"PointerToRelocations, ponieważ w plikach EXE wszystkie relokację zostają przeprowadzone na etapie linkowania, to pole to jest bezużyteczne i jest ustawione na 0."

Rzecz dziwna bo specyfikacja Exekow przewiduje w swojej strukturze sekcje .reloc zakladam ze to wlasnie tam powinna znalezc sie tablica relokacji.
Probowalem to nawet sprawdzic pod hexedytorem, napisalem sobie taki ktorki kodzik, aby zobaczyc wygladaja adresy w pliku.

.386
model flat
.data
   dana dd 0
.code
   start:
      mov eax, dana
   end start

Skompilowalem jako Win-Pe otworzylem HexEditem i co widze
A1 00 20 40 00
odpowiada to instrukcji mov eax, [402000h]
i mysle osbie ale kanal, to jednak nie widows w trakcie ladowania dodaje do entry point 401000h, ale linker.

Wlasciwie to szukam tylko potwierdzenia, lub zaprzeczenia na postawione przeze mnie pytanie Niepewnosc pozostawia istnienie sekcji .reloc, po co ja utryzmywac skoro wszystko wylicza itak linker. A moze jednak ona czemus sluzy.

Pozdrawiam

0

w plikach exe relokacje nie sa konieczne - zwykle nawet jesli linker je wygeneruje to robi sie strip'a i po problemie. Exec'i sa ladowane do pamieci przed dll'kami, zaalokowaniem stosu itd wiec jezeli cos koliduje to jest to dll, ocx czy inne takie /'nowy' kolidujacy element podlega relokacji ze wzgledu na powiazania 'starego' z innymi juz ustniejacymi - ale to chyba oczywiste/. Wszystkie /chyba/ exepacker'y wywalaja relokacje z exec'ow - adres bazowy /IMAGE_BASE/ jest staly i ze wzgledu na wspomniane dzialanie loadera niezmienny. Jedyny wyjatek to exec'i pod Win16 lub exec ladowany w przestrzen innego programu /ale to juz sa takie rozne cuda :P/

0

Jestem niepocieszony - szkoda troche - chlopaki piszacy kompilatory, linkery zabardzo polegaja na istnieniu pamieci wirtualnej - i tym ze kazdy proces ma swoja prywatna przestrzen adresowa. Chcialem sobie uzyc execa do stworzenia jadra systemu operacyjnego, ale w takim wypadku....

Myslalem tez o uzyciu linuxowych plikow ELF, ale cos nie ma dobrej dokumentacji do tego formatu w PL, a po angielsku nie bede sie przebijal przez 50 stron i tak nielatwego tematu.

Chyba zrobie tak ze do Dos-Stuba wpakuje program dzialajacy w RealMode, przelaczajacy w tryb chroniony, wypelniajacy tablice deskryptorow, i robiacy jeszcze kilka innyc pozytecznych rzeczy, a za Dos-Stubem juz we wlasciwej sekcji .text pliku bedzie sobie poczciwy kodzik jadra. - Po przelaczeniu w Pmode adresy w tej sekcji powinny juz byc poprawne.

Jesli ktos sadzi ze mozna to zrobic inaczej, lepiej, to prosze o rady.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0