🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #400

Re: Asembler i Windows

#400
From: Paweł Pawlak
Date: Mon, 17 Jul 2006 19:40
65 lines
3942 bytes
Dnia 7/17/2006 6:06 PM, Remek wrote:
> 
>> adres funkcji znany jest dopiero w momencie załadowania programu -
> wypełnia go system w trakcie ładowania exeka.
> 
> Wszystko sie zgadza. Jednak pewne informacje muszą być wcześniej
> umieszczone zarówno w DLL'u, jak i execu. Jak są one wykorzystywane
> bardzo dobrze widać jeśli ładujemy DLL'a "ręcznie", tzn przez
> LoadLibrary i GetProcAddress. Natomiast nie wiem jak to robi
> "automatycznie" sam system. Byłbym Ci wdzięczny za jakiś link
> do opisu tego procesu (oczywiście jeśli znasz i zechcesz podać).
> 

W uproszczeniu: plik wykonywalny zawiera sekcję importów. Składa się ona 
z kilku części zawierających:

a) część określającą nazwę biblioteki

b) część zapełnioną numerami lub nazwami funkcji importowanych (zależy 
od ostatniego bitu - jeśli zapalony to import przez numer, jeśli 
zgaszony - to przez nazwę)

c) część przeznaczoną na adresy zaimportowanych funkcji (IAT - Import 
Address Table)

Loader odczytuje nazwę biblioteki - jeśli jest już w pamięci, to mapuje 
ją do procesu, jeśli nie ma - ładuje i mapuje do procesu (po drodze 
sprawdza sekcję importów tej biblioteki i jeśli ona ma swoje biblioteki 
importowe to sprawdza, czy są w pamięci itd.). Jeśli biblioteka ma być 
przerelokowana, to loader to robi (jest do tego specjalna sekcja). Po 
drodze pewnie buduje tablicę eksportów biblioteki.

Jak już bibliotek jest załadowana i zamapowana, loader odczytuje numer 
lub nazwę funkcji, którą ma zaimportować. Jeśli jest numer, to po prostu 
w tabeli eksportów biblioteki znajduje adres funkcji o podanym numerze i 
wstawia go do IAT. Jeśli import odbywa się przez nazwę, to:

1. loader sprawdza, czy przy nazwie znajduje się tzw. hint, czyli jakby 
numer funkcji o podanej nazwie

a) jeśli tak, to sprawdza, czy pod podanym numerem w tabeli eksportów 
rzeczywiście znajduje się ta funkcja i jeśli tak, to jej adres wstawia 
do IAT

b) jeśli nie, to po prostu wyszukuje funkcję po nazwie

2. jeśli nie ma hinta, to wyszukuje w tabeli eksportów funkcję o podanej 
nazwie

Jeśli funkcja została znaleziona (z użyciem hinta czy bez), to do IAT 
wędruje jej adres. Skoki do importowanych funkcji odbywają się (zwykle) 
właśnie przez IAT.


To tyle w uproszczeniu. Funkcje mogą być jeszcze forwardowane (czyli 
mogą wskazywać na funkcje z innych bibliotek), mogą być ładowane z 
opóźnieniem (delayload).

Jeśli Ci to nie wystarcza, to musisz sam poszukać w sieci odpowiednich 
materiałów - powyższy opis to moje wnioski z gdzieś-tam-kiedyś 
wyczytanych informacji oraz z lektury specyfikacji PE/COFF 
(http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx)

Pozdrawiam,
Morris
Technical Details
Message-ID: <e9gp6i$dla$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <e8lpj6$hfl$1@atlantis.news.tpi.pl> <e8rcht$31e$1@atlantis.news.tpi.pl> <e8vqbr$rn3$1@news.onet.pl> <e96gca$qf4$1@inews.gazeta.pl> <e996em$u9m$1@news.onet.pl> <e9gcb2$pie$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Paweł Pawlak <morr!s@elys!um.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: Asembler i Windows
Date: Mon, 17 Jul 2006 21:40:53 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 65
Message-ID: <e9gp6i$dla$1@inews.gazeta.pl>
References: <e8lpj6$hfl$1@atlantis.news.tpi.pl> <e8rcht$31e$1@atlantis.news.tpi.pl> <e8vqbr$rn3$1@news.onet.pl> <e96gca$qf4$1@inews.gazeta.pl> <e996em$u9m$1@news.onet.pl> <e9gcb2$pie$1@inews.gazeta.pl>
NNTP-Posting-Host: eny189.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1153165330 13994 83.20.14.189 (17 Jul 2006 19:42:10 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Mon, 17 Jul 2006 19:42:10 +0000 (UTC)
X-User: mickey_knox
X-Antivirus: avast! (VPS 0628-5, 2006-07-14), Outbound message
In-Reply-To: <e9gcb2$pie$1@inews.gazeta.pl>
X-Antivirus-Status: Clean
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; pl-PL; rv:1.8.0.2) Gecko/20060404 SeaMonkey/1.0.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit