Różnica między.dll i.exe?

Chcę poznać dokładną różnicę między plikiem dll i exe.

Author: ЯegDwight, 2009-07-31

15 answers

EXE:

  1. jest to plik wykonywalny
  2. podczas ładowania pliku wykonywalnego nie jest wywoływany żaden eksport, ale tylko punkt wejścia modułu.
  3. gdy system uruchamia nowy program wykonywalny, tworzony jest nowy proces
  4. wątek wejściowy jest wywoływany w kontekście głównego wątku tego procesu.

DLL:

  1. to dynamiczna biblioteka linków
  2. Istnieje wiele eksportowanych symboli.
  3. system wczytuje bibliotekę DLL do kontekstu istniejącego proces.

Więcej Szczegółów: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL

Numer referencyjny: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx

 73
Author: firstthumb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-12 07:57:10

Nie wiem dlaczego wszyscy odpowiadają na to pytanie w kontekście .NET. pytanie było ogólne i nigdzie nie wspominało o. net.

Cóż, główne różnice to:

EXE

  1. exe zawsze działa we własnej przestrzeni adresowej, tzn. jest osobnym procesem.
  2. celem EXE jest uruchomienie oddzielnej aplikacji własnej.

DLL

  1. dll zawsze potrzebuje hosta exe do uruchomienia. tj. nigdy nie może Uruchom we własnej przestrzeni adresowej.
  2. celem biblioteki DLL jest posiadanie kolekcji metod/klas, które mogą być ponownie użyte z innej aplikacji.
  3. DLL jest implementacją biblioteki współdzielonej firmy Microsoft.

Format plików DLL i exe jest zasadniczo taki sam. Windows rozpoznaje różnicę między DLL i EXE poprzez nagłówek PE w pliku. Aby uzyskać szczegółowe informacje na temat nagłówka PE, możesz zajrzeć do tego artykułu na MSDN

 138
Author: Aamir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 07:08:12

Różnica polega na tym, że EXE ma punkt wejścia," główną " metodę, która będzie uruchamiana podczas wykonywania.

Kod w DLL musi być wywołany z innej aplikacji.

 32
Author: Robin Day,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 15:08:05

Jest jeszcze kilka różnic dotyczących struktury, o której mógłbyś wspomnieć.

  1. zarówno DLL, jak i EXE mają tę samą strukturę plików-Portable Executable lub PE. Aby odróżnić te dwa, można zajrzeć do Characteristics członka IMAGE_FILE_HEADER wewnątrz IMAGE_NT_HEADERS. Dla biblioteki DLL jest włączona flaga IMAGE_FILE_DLL (0x2000). Dla EXE jest to znacznik IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. pliki PE składają się z kilku nagłówków i kilku sekcji. Zazwyczaj jest sekcja kodu, sekcja danych, sekcja Lista zaimportowanych funkcji i sekcja zasobów. Niektóre sekcje mogą zawierać więcej niż jedną rzecz. Nagłówek opisuje również listę katalogów danych, które znajdują się w sekcjach. Te katalogi danych są tym, co pozwala Windows znaleźć to, czego potrzebuje w PE. Ale jednym z typów katalogów danych, których EXE nigdy nie będzie miał (chyba że budujesz exe Frankensteina) jest katalog eksportu. To jest, gdzie pliki DLL mają listę funkcji, które eksportują i mogą być używane przez inne EXE lub DLL pliki. Z drugiej strony, każda DLL i EXE ma katalog importu, w którym wymienia funkcje i pliki DLL, których wymaga do uruchomienia.
  3. również w nagłówkach PE (IMAGE_OPTIONAL_HEADER) znajduje się ImageBase członek. Określa wirtualny adres, pod którym PE zakłada, że zostanie załadowany. Jeśli jest załadowany pod innym adresem, niektóre wskaźniki mogą wskazywać na niewłaściwą pamięć. Ponieważ pliki EXE są jednymi z pierwszych, które zostaną załadowane do nowej przestrzeni adresowej, program ładujący Windows może zapewnić stały adres ładowania i to Zwykle 0x00400000. Ten luksus nie istnieje dla DLL. Dwa pliki DLL załadowane do tego samego procesu mogą zażądać tego samego adresu. To dlatego biblioteka DLL ma inny katalog danych o nazwie Katalog relokacji bazy, który zwykle znajduje się we własnej sekcji - .reloc. Ten katalog zawiera listę miejsc w bibliotece DLL, które wymagają zmiany / poprawki, aby wskazywały właściwą pamięć. Większość plików EXE nie ma tego katalogu, ale niektóre stare Kompilatory je generują.

Możesz przeczytać więcej w tym temacie @ MSDN .

 29
Author: kichik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-24 15:55:43

Ta odpowiedź była trochę bardziej szczegółowa niż myślałem, ale przeczytaj ją.

DLL:
W większości przypadków plik DLL jest biblioteką . Istnieje kilka typów bibliotek, dynamicznych i statycznych- przeczytaj o różnicy . DLL oznacza bibliotekę dynamic link co mówi nam, że jest to Część programu, ale NIE całość. Składa się z komponentów oprogramowania wielokrotnego użytku (biblioteka ), których możesz użyć dla więcej niż jednego programu . Należy pamiętać, że kod źródłowy biblioteki jest zawsze możliwy w wielu aplikacjach za pomocą kopiuj-wklej, ale idea biblioteki DLL / statycznej polega na tym, że można zaktualizować kod biblioteki i jednocześnie zaktualizować wszystkie aplikacje za pomocą niego - bez kompilacji.

Na przykład:
Wyobraź sobie, że tworzysz komponent Windows GUI JakButton. W większości przypadków chcesz ponownie użyć kodu, który masz napisane, ponieważ jest to złożony, ale common komponent - chcesz, aby wiele aplikacji GO używało, ale nie chcesz dać im kodu źródłowego nie możesz skopiować-wkleić kodu przycisku w każdym programie, więc zdecydujesz, że chcesz utworzyć DL-Library (DLL).

This "button"library is required by EXE cutables to run, and without it will not run, because they don ' t know how to create the button, only how to talk to it.

Podobnie, a DLL nie może być wykonany - Uruchom, ponieważ jest to tylko część programu, ale nie ma informacji wymaganych do utworzenia "proces" .

EXE:
Wykonywalnym programem jest program . Wie jak utworzyć proces i jak rozmawiać z DLL. It needs DLL to create a button, and without it the application doesn ' t run-ERROR .

Mam nadzieję, że to pomoże....

 22
Author: hannson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:39

Zarówno DLL jak i EXE są formatami Portable Executable (PE)

A Dynamic-link library (DLL) jest biblioteką i dlatego nie może być wykonywana bezpośrednio. Jeśli spróbujesz go uruchomić, pojawi się błąd dotyczący brakującego punktu wejścia. Potrzebuje punktu wejścia (main function) aby zostać wykonanym, tym punktem wejścia może być dowolna aplikacja lub exe. Wiązanie DLL występuje w czasie wykonywania. Dlatego nazywa się biblioteką "Dynamic Link".

An wykonywalny (EXE) na program, który można wykonać. Posiada własny punkt wejścia. Flaga wewnątrz nagłówka PE wskazuje, jakiego typu jest plik (bez znaczenia dla rozszerzenia pliku). Nagłówek PE zawiera pole, w którym znajduje się punkt wejścia dla programu. W bibliotekach DLL nie jest używany (a przynajmniej nie jako punkt wejścia).

Istnieje wiele oprogramowania do sprawdzania informacji nagłówka. Jedyną różnicą powodującą, że oba działają inaczej jest bit w nagłówku, jak pokazano na poniższym diagramie.

nagłówek

Plik EXE ma tylko jeden główny wpis oznacza to, że jest izolowana aplikacja, gdy system uruchamia exe, nowy Proces jest tworzony, podczas gdy biblioteki DLL mają wiele punktów wejścia, więc gdy aplikacja używa go żaden nowy proces nie został uruchomiony, DLL może być ponownie użyty i wersjonowany. DLL zmniejsza przestrzeń dyskową, ponieważ różne programy mogą używać tej samej biblioteki dll.

 17
Author: Zaheer Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-10 11:24:49

Dll V / S Exe

1) plik DLL jest biblioteką dynamicznych linków, która może być używana w plikach exe i inne pliki dll.
Plik EXE jest plikiem wykonywalnym, który działa w oddzielnym proces, który jest zarządzany przez OS.

2) biblioteki DLL nie są bezpośrednio wykonywalne . Są to oddzielne pliki zawierające funkcje, które mogą być wywoływane przez programy i inne biblioteki DLL do wykonywania obliczeń i funkcji.
EXE to program, który można wykonać . Ex: program Windows

3)Reusability
DLL: Można je ponownie wykorzystać do innych zastosowań. Tak długo, jak koder zna nazwy i parametry funkcji i procedur w pliku DLL .
EXE: tylko do określonego celu .

4) DLL dzieliłby ten sam proces i przestrzeń pamięci aplikacji wywołującej, podczas gdy
EXE tworzy swój oddzielny proces i przestrzeń pamięci.

5)zastosowania
DLL: chcesz, aby wiele aplikacji GO używało, ale nie chcesz dać im kodu źródłowego nie możesz skopiować-wklej kod do przycisk w każdym programie, więc zdecydujesz, że chcesz utworzyć DL-bibliotekę (DLL).

EXE: gdy pracujemy z szablonami projektów, takimi jak Aplikacje Windows Forms, Aplikacje Konsolowe, aplikacje WPF i usługi Windows, generują one Zgromadzenie exe po skompilowaniu.

6)podobieństwa:
Zarówno DLL, jak i EXE są plikami binarnymi o złożonej strukturze zagnieżdżonej zdefiniowanej przez przenośny format wykonywalny i nie są przeznaczone do edycji przez użytkowników.

 6
Author: skanda93,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 12:05:55

Dwie rzeczy: rozszerzenie i flaga nagłówka zapisane w pliku.

Oba pliki są plikami PE. Oba zawierają dokładnie ten sam układ. Biblioteka DLL jest biblioteką i dlatego nie może być wykonana. Jeśli spróbujesz go uruchomić, pojawi się błąd dotyczący brakującego punktu wejścia. EXE to program, który można wykonać. Ma wejście. Flaga wewnątrz nagłówka PE wskazuje, jakiego typu jest plik (bez względu na rozszerzenie pliku). W nagłówku PE Znajduje się pole, w którym punkt wejścia dla programu / align = "left" / W bibliotekach DLL nie jest używany (a przynajmniej nie jako punkt wejścia).

Mała różnica polega na tym, że w większości przypadków biblioteki DLL mają sekcję eksportu, w której eksportowane są symbole. Exe nigdy nie powinny mieć sekcji eksportu, ponieważ nie są bibliotekami, ale nic nie stoi na przeszkodzie, aby to się stało. Win32 loader nie obchodzi tak czy inaczej.

Poza tym są identyczne. Podsumowując, pliki exe są programami wykonywalnymi, podczas gdy biblioteki DLL są bibliotekami załadowanymi do procesu i zawierają jakiś rodzaj przydatnych funkcji, takich jak bezpieczeństwo, dostęp do bazy danych czy coś.

 4
Author: judy smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 02:55:34

The .exe to program. The .dll jest biblioteką, że .exe (lub inny .dll) może wywołać.

To, co mówi sakthivignesh, może być prawdą .exe moĹźe uĺźywaä ‡ innej, jak gdyby byĹ 'a bibliotekÄ..., i jest to robione (na przykĹ' ad) z niektăłrymi komponentami COM. W tym przypadku, "niewolnik".exe jest osobnym programem (ściśle mówiąc, osobnym procesem-być może działającym na osobnej maszynie), ale takim, który akceptuje i obsługuje żądania innych programów/komponentów/cokolwiek.

Jednak, jeśli wybierzesz przypadkowy .exe i .dll z folderu w plikach programu, istnieje prawdopodobieństwo, że COM nie ma znaczenia - są to tylko program i jego dynamicznie połączone biblioteki.

Używając API Win32, program może ładować i używać biblioteki DLL za pomocą funkcji API LoadLibrary i GetProcAddress, IIRC. Były podobne funkcje w Win16.

COM jest pod wieloma względami ewolucją idei DLL, pierwotnie conceived jako podstawa OLE2, podczas gdy. NET jest potomkiem COM. DLLs zostały około Od Windows 1, IIRC. Pierwotnie były one sposobem dzielenia się kodem binarnym (szczególnie systemowymi API) między wieloma uruchomionymi programami w celu zminimalizowania zużycia pamięci.

 3
Author: Steve314,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 15:25:32

EXE jest widoczny dla systemu jako zwykły plik wykonywalny Win32. Its entry punkt odnosi się do małego loadera, który inicjalizuje. NET runtime i mówi to załadować i wykonać zespół zawarty w EXE. DLL jest widoczny dla systemu jako DLL Win32, ale najprawdopodobniej bez żadnych punkty wejścia. Runtime. NET przechowuje informacje o zawartych montaż we własnym nagłówku.

Dll jest zbiorem wielokrotnego użytku funkcje gdzie jako .exe jest wykonywalny, który może nazwijmy to functions

 2
Author: rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-26 13:24:12

Exe jest programem wykonywalnym, podczas gdy DLL jest plikiem, który może być ładowany i uruchamiany przez programy dynamicznie.

 1
Author: Bhushan Bhangale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 06:06:13

● .exe i dll są skompilowaną wersją kodu c#, które są również wywoływane jako / align = "left" /

● .exe jest samodzielnym plikiem wykonywalnym, co oznacza, że może być wykonywany bezpośrednio.

● .dll jest komponentem wielokrotnego użytku, który nie może być wykonywany bezpośrednio i wymaga inne programy do jego wykonania.

 1
Author: Kedarnath M S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 13:19:35

Różnica w DLL i EXE:

1) DLL jest komponentem w procesie, co oznacza, że działa w tej samej przestrzeni pamięci, co proces klienta. EXE jest komponentem Out-Process, co oznacza, że działa we własnej oddzielnej przestrzeni pamięci.

2) DLL zawiera funkcje i procedury, które inne programy mogą używać (Promuje reuability), podczas gdy EXE nie mogą być współdzielone z innymi programami.

3) DLL nie mogą być bezpośrednio wykonywane, ponieważ są one przeznaczone do ładowania i uruchamiania przez inne programy. EXE jest programem wykonywanym bezpośrednio.

 0
Author: rahul sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-04 21:39:34

Dla szukających zwięzłej odpowiedzi,

  • Jeśli assembly jest skompilowany jako Biblioteka klas I udostępnia typy dla innych zestawów, to ma rozszerzenie ifle.dll (dynamic link library), i nie może być wykonywana samodzielnie.

  • Podobnie, Jeśli assembly jest skompilowany jako aplikacja, to ma rozszerzenie pliku.exe (wykonywalny) i może być wykonywany samodzielnie. Przed. NET Core 3.0, aplikacje konsolowe opracowano na podstawie materiału źródłowego .dll fles i musiał być wykonywany przez polecenie dotnet run lub plik wykonywalny hosta. - Źródło

 0
Author: snr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-10 12:19:15

Główna różnica między DLL i EXE, że DLL nie ma punktu wejścia, a EXE robi. Jeśli jesteś zaznajomiony z c++ widać, że build EXE ma funkcję main (), a DLL nie:)

 -2
Author: faya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 06:11:27