Sebastian Śląski fan
Piotr
Głudkowski
Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...
Temat: W jaki sposób można zobaczyć kod programu napisany w C po...
Google: dekompilacja, dekompilator.Ale w ogólności się nie da - zależy, jak został skompilowany.
Znaczy zawsze uzyskasz kod źródłowy, ale niekoniecznie identyczny z oryginalnym kodem źródłowym. Oczywiście ten uzyskany kod da się skompilować i dostaniesz pewnie taką samą binarkę - ale takie źródło czytelne zbyt nie jest.
Dlaczego?
Niektóre z przyczyn:
- kompilator w trakcie kompilacji może przeprowadzać pewne optymalizacje (np. zamieniać instrukcje na miejsca, wyłączać instrukcje z pętli, dodawać pewne zmienne tymczasowe itd). Podczas dekompilacji nie da się odwrócić tych optymalizacji, w związku z czym dostaniesz kod źródłowy "zoptymalizowany", w szczególności mogą pojawić się zmienne, których wcale w oryginalnym kodzie nie było, albo pętla, która miała się wykonać stałą ilośc razy, zostanie "rozwinięta".
- w trakcie kompilacji tworzona jest tablica symboli (nazw zmiennych, funkcji itp), która m.in. odwzorowuje nazwy na adresy. Jeśli skompilowany program tej tabeli nie zawiera w binarce, praktycznie nie ma szansy, żeby zmienne i funkcje po dekompilacji nazywały się tak samo, jak w oryginalnym źródle - zwykle będą to raczej nazwy w stylu var_001, fun_132 itd. Binarka zawierać będzie tą tablicę tylko wtedy, jeśli przy kompilacji została użyta odpowiednia opcja - to jest użyteczne np. przy debugowaniu, ale wersje "produkcyjne" binarek zwykle tablicy symboli nie mają, primo dla tego, że dość znacznie zwiększa to rozmiar binarki, secundo - żeby nie ułatwiać dekompilacji :)Piotr Głudkowski edytował(a) ten post dnia 17.10.11 o godzinie 22:44
konto usunięte
Temat: W jaki sposób można zobaczyć kod programu napisany w C po...
Nie zawsze też wiadomo co jest danymi, a co jest kodem :) Trzeba by mieć dostęp do pełnego pokrycia, czyli wszystkich możliwych scenariuszy użycia softu, żeby to na 100% wiedzieć.Inaczej w przypadku języków kompilowanych do kodu pośredniego (Java, C#), w takim przypadku można już dostać dość dokładnie kod, oczywiście nazwy zmiennych będą mało znaczące, ale pewne małe fragmenty algorytmów/rozwiązań można próbować reverse engineerować.Adam Michalski edytował(a) ten post dnia 17.10.11 o godzinie 22:49
konto usunięte
Temat: W jaki sposób można zobaczyć kod programu napisany w C po...
W sumie to pytanie zadane dość wieloznacznie.Jeśli chodzi Ci o podgląd samej binarki(czyli jak kod C przekłada się na bajty w pliku wykonywalnym) to zrobi to dowolny hex edytor np. hex workshop.
Jeśli krok wyżej, czyli jak kod C przekłada się na pojedyncze instrukcje procesora, to tutaj trzeba deasemblera np. IDA czy gdb.
Jeśli jeszcze wyżej, to tak jak napisali poprzednicy - dekompilator.
Podobne tematy
Następna dyskusja: