2009-10-24 13 views

Odpowiedz

10

Executables są pliki binarne, które są rozumiane przez system operacyjny. Plik wykonywalny będzie zawierał sekcje, które zawierają w sobie dane. Windows używa PE format. Format PE ma sekcję zawierającą instrukcje machine. Te instrukcje są po prostu liczbami uporządkowanymi w sekwencji i zrozumiałymi dla procesora.

Połączenie funkcja MessageBox(), to być sekwencja instrukcji, które

1) posiada adres funkcji, która jest w DLL. Ten adres zostanie wprowadzony przez kompilator

2) instrukcje do „push” parametrów na stosie

3) rzeczywistej wywołania funkcji

4) jakiegoś sprzątania (w zależności od konwencji wywołującego).

Ważne jest, aby pamiętać, że pliki EXE to tylko specjalnie sformatowane pliki. Nie mam dla ciebie demontażu, ale możesz spróbować skompilować swój kod, a następnie otworzyć plik EXE w studio graficznym, aby zobaczyć demontaż.

+0

Dziękuję za odpowiedź, ale Wikipedia mówi, że plik DLL również używa formatu PE. Dlaczego? –

+0

A jak dokładnie "wypycha" te parametry? Wiem z PE Explorer, że DLL zapisuje funkcję i rozmiar jej parametrów, na przykład 8 bajtów może być int, int. –

+2

DLL może również zawierać kod wykonywalny, którego EXE mogą używać w czasie wykonywania - stąd nazwa "biblioteka linków dynamicznych". –

-4

To zależy od języka, w którym pracujesz. Ale dla wielu jest to tak proste, jak ...

msgbox("Your message goes here") 

lub

alert("Your message goes here") 
+3

Naprawdę nie sądziłem, że rozumiesz moje pytanie, miałem na myśli po kompilacji, jak te instrukcje wyglądają? –

2

Bez względu na to, jaki kod został napisany (czy to w języku C, czy w jakimś innym języku), kompilator jest kompilowany do specjalnego języka zwanego zestawem (no dobrze, kod maszynowy, ale są bardzo blisko). Assembly jest językiem bardzo niskiego poziomu, który CPU wykonuje natywnie. Zwykle nie programujesz w złożeniu, ponieważ jest on tak niski (na przykład nie chcesz zajmować się ciągnięciem bitów z pamięci).

Nie mogę powiedzieć o konkretnej funkcji MessageBox, ale domyślam się, że jest to LOT instrukcji. Pomyśl o tym: musi narysować pudełko i nadać mu styl, ale twój komputer go styluje i podpiąć nawet instrukcję obsługi, aby coś się stało, gdy użytkownik kliknie przycisk, powie Windows (lub innego systemu operacyjnego), aby dodać go do pasek zadań (lub dok, itp.) i wiele innych rzeczy.

4

To jest nadęte pytanie, czy kiedykolwiek widziałem. ALE, postaram się jak najlepiej dać przegląd. W binarnym pliku wykonywalnym są te rzeczy zwane "kodami bajtów", kody bajtów są tylko heksadecymalną instrukcją. Zwykle można "wyszukać" kody bajtów i przekonwertować je na instrukcje montażu. Na przykład: instrukcją:

mov ax, 2h 

Ma reprezentację kodu bajtowego:

B8 02 00 

Kody bajt ładowane do pamięci RAM i wykonywane przez processer jako że jest jego „język”.Nikt nie przy zdrowych zmysłach, że znam programy w kodzie bajtowym, byłoby to po prostu skomplikowane. Zgromadzenie jest ... wystarczająco zabawne, jak jest. Za każdym razem, gdy kompilujesz program w języku wyższego poziomu, musisz wziąć swój kod i zamienić go w instrukcje montażu, po prostu wyobrażasz sobie, w jaki sposób twój kod będzie wyglądał po jego kompilacji. Nie zrozum mnie źle, kompilatory są świetne, ale zdemontuj program C++ z oprogramowaniem IDA Pro Freeware, a zobaczysz, o czym mówię. To są pliki wykonywalne w pigułce, są na pewno książki napisane na ten temat. Nie jestem ekspertem od Windows API, ale ktoś inny może ci pokazać, jak powinna wyglądać instrukcja wywoływania interfejsu API Windows "MessageBox". Powinno to być tylko kilka linii Zgromadzenia.

Powiązane problemy