Rozjaśnijmy jeden po drugim opcje Pan wspomniał:
- Compiling > Stack frames: ramki stosu są potrzebne tylko do debugowania (a może generować ślady stosu dla raportowania błędów, jak wspomniano przez @DavidHeffernan w komentarze). Nawet jeśli włączysz to w kompilacjach wersji, nie będzie to zbyt pomocne w inżynierii wstecznej.
- : Przy tej opcji zestaw informacji debugowania jest kompilowany wewnątrz jednostek DCU, aby pomóc w debugowaniu wewnątrz IDE. Nie jest podłączony do exe, więc jest oczywiste, że nie pomoże to w inżynierii wstecznej.
- Debugging > Local symbols: Z tego zestawu opcji, kompilator zawiera podstawowe informacje na symbol w informacji debugowania, ale znowu, to tylko pomaga podczas debugowania na IDE i nie jest powiązana w końcowy exe.
- Debugging > Symbol reference info > Reference info: Dodatkowo do poprzedniej opcji, ten zawiera szczegółowe informacje o jednostkowych lokalnego symboli (zmienne, stałe klas i tak dalej) do pomocy w debugowanie. Nie są również powiązani z ostatecznym exe.
- Linking > Map file > Detailed: Z tego zestawu opcji, łącznik stworzą szczegółowy
.map
plik zawierający wszystkie informacje (typ, nazwa, adres, wielkość itd) o symbolach programu, tak, oczywiście byłoby pomocne dla odwrocie inżynieria IF rozpowszechniasz ten plik wraz ze swoim exe (zgodnie z @RemyLebeau w komentarzach).
Istnieje również możliwość generowania zdalnych symbole debugowania, jak wskazano przez @dummzeuch:
- Linker > Include remote debug symbols: Ta opcja mówi łącznik, aby wygenerować plik
.rsm
, to odpowiednik Delphi Microsoft .pdb
Program Database Files. Jeśli rozpowszechnisz ten plik, możesz mieć poważne kłopoty, ponieważ można łatwo debugować aplikację, wizualizować symbole, funkcje i procedury, jeden krok kodu i tak dalej.
Ponadto uważam, że ważne jest, aby stwierdzić, że pliki .map
nie są równoważne plikom .pdb
. Dla Delphi Win32, odpowiednikiem jest .rsm
. Nie pracowałem z Delphi od lat, ale o ile pamiętam, żadna wersja Delphi Win32 nie może generować plików .pdb
. Tylko Delphi dla .NET może.
Powiedział, wróćmy do pytania:
zastanawiam ile różnica to sprawia, że jeśli ktoś ma plik mapy?
Inżynieria odwrotna byłaby znacznie łatwiejsza dzięki plikowi .map
. W przeszłości widziałem niektóre narzędzia, które mogą nawet przekonwertować plik .map
na plik .dbg
do użytku z debugerem.
Czy łatwiej inżynierii wstecznej lub przerwać program Delphi, jeśli plik exe został skompilowany z ustawieniami debugowania kompilatora?
Cóż, jedną ważną (i być może najbardziej zauważalną) cechą kompilacji debugowania jest większy rozmiar exe. Dzieje się tak głównie dlatego, że w konfiguracji debugowania kompilator wyłącza szereg optymalizacji kodu w celu ułatwienia debugowania kodu. Istnieje również wiele kodowania debug-warunkowego (np .: w dyrektywach {$IFDEF DEBUG}
), który zostaje połączony z plikiem EXE.
Jako efekt uboczny, kod generowany przez kompilację debugowania jest o wiele łatwiejszy do inżynierii wstecznej, ponieważ jest prostszy do zrozumienia.
W przypadku pliku mapy użytkownik ma rzeczywiste nazwy funkcji i przesunięcia pamięci. Bez tego użytkownik musi nadawać nazwy wszystkim funkcjom, które wybiera dezasembler. –
Zawsze kompiluję do wydania z pełnymi informacjami debugowania, szczegółowym plikiem mapy itp. Jest to potrzebne do tworzenia śladów stosu dla raportów o błędach. Ale nie wysyłam pliku mapy do klienta ani żadnych informacji debugowania. –
Jakiej wersji Delphi używasz? – Vasek