Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Budowa pliku EXE

Ostatnio zmodyfikowano 2012-02-12 22:10
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
Budowa pliku EXE
» 2012-02-11 15:41:36
Witam. Zamieszczam ten tema tutaj bo chce w c++ napisać prościutki kompilator. Nie wiem za dużo o budowie exeka (jedynie ze na poczatku programu jest MZ itd). Moze ktos z was wie jak jest zbudowany program exe. Oczywiscie nie chce zrobic kompilatora asm'a. Chce poprostu zrobic kompilator do tłumaczenia kilku komend. Dużo na forach ludzie mówią że trzeba znać troche assemblera ale nie wiem dlaczego. Podobno jest bardzo podobny do maszynówki. Ale po co asm jezeli nie wiadomo jak wygladaja komendy maszynowy. Przecież jezeli komenda asm'a wyglada "mov ..., ..." to równie dobrze w maszynowce moze wygladac "mav". Nie wiem czy dobrze mówie. Chce aby ktoś mi to wytłumaczył. Dla mnie to też dziwne jest bo jeżeli maszynowka ma 01010 etc. to czy odczyta bity zakodowane znakami i na odwrot. Mowie jestem kompletnie zielony w tej dziedzinie. O i jeszcze, jezeli program to jedynki i zera to dlaczego gdy otwieram plik (chodzby notatnikiem) to nie ma 01110110010101010101(czy cos takiego). I z kąd program wie że 1000101 to nie 100 i 0101 bo przeciez program to ciag bitow i nie ma odstepow. (Moglem nagadać glupot ale nie smiac sie :)). Nie chce odpowiedzi typu "Jezeli nie wiesz tego to nie zrobisz kompilatora" bo nawet jesli nie zrobie to chyba wkoncu chce sie dowiedziec tego. Dzieki!!
P-50516
pekfos
» 2012-02-11 15:45:55
Pobierz dokumentację formatu EXE i COFF (takie 2 w jednym na MSDN jest). Koniec tematu.

I z kąd program wie że 1000101 to nie 100 i 0101 bo przeciez program to ciag bitow i nie ma odstepow.
Bo wie, że gdzie co jest i jakiej jest to długości.
P-50518
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-02-11 15:48:12
Moze jakis link? (Umiem uzywac google i nie znalazlem)
P-50520
pekfos
» 2012-02-11 15:49:55
P-50523
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-02-11 15:51:36
Emm wpisałem złe słowa kluczowe "format documentation exe coff msdn"
P-50525
pekfos
» 2012-02-11 15:54:47
Podałem link. Użyj go łaskawie -.-

Dużo na forach ludzie mówią że trzeba znać troche assemblera ale nie wiem dlaczego.
Może dlatego, że kod maszynowy to zapisany binarnie kod asemblera?
P-50526
npHard
» 2012-02-12 22:10:05
Dużo na forach ludzie mówią że trzeba znać troche assemblera ale nie wiem dlaczego.

Hmm... możesz nie znać assemblera. Wystarczy, że poznasz kod maszynowy. No śmiało! Do nauki zer i jedynek : )

Skąd program wie że 1000101 to nie 100 i 0101 bo przeciez program to ciag bitow i nie ma odstepow.

Program nic nie wie. To procesor po kolei wczytuje rozkazy z pamięci ram i je odpowiednio interpretuje. Instrukcje mogą mieć różną długość ale procesor rozpoznaje to(każdy rozkaz ma swój kod maszynowy, tzw. opcode) i wczytuje odpowiednią ilość bajtów potrzebną do wykonania danej instrukcji. Każda instrukcja składa się właśnie z kodu operacji oraz operandów, którymi mogą być numery rejestrów, adresy pamięci lub jakieś stałe. Może właśnie po to "trzeba znać troche assemblera" żeby zrozumieć jak to działa?

Jak już zrozumiesz jak działa procesor, czym jest kod maszynowy i czym są rozkazy to poczytaj o formatach plików PE i ELF. Są to kolejno formaty plików wykonywalnych w Windowsie i Linuksie. W ogólności składają się z nagłówków zawierających różne informacje oraz sekcji. Są sekcje zawierające kod, są sekcje zawierające dane, są sekcje zawierające informacje o wykorzystywanych funkcjach bibliotecznych itp. Potem dowiedz się jak przebiega proces ładowania programu do pamięci. Uzbrojony w tą wiedzę pozostanie Ci tylko ogarnąć temat konstrukcji kompilatorów, automatów, gramatyk itp...

Potem zabierz się za pisanie kompilatora.
P-50617
« 1 »
  Strona 1 z 1