Zitat von
Arnulf:
warum durchsuchst du nur die readable sections?
Es gibt (theoretisch) Speicherbereiche, welche nicht lesbar sind (zum Beispiel nur schreibbar).
Zitat von
Arnulf:
welche sections muss ich durchsuchen um nur die code section eines programms zu durchsuchen.
Das hängt von dem Programm ab, um das es geht.
Grundsätzlich alle, die "ausführbar" sind.
Zitat von
Arnulf:
Also wie finde ich code section bzw. data section oder den heap - wie unterscheide ich das.
Anhand der Eigenschaften des Speicherbereichs.
Wenn du genauere Informationen zu den Speicherbereichen des Moduls benötigst (die Klasse interessiert sich für nichts anderes, also auch kein Heap, etc), dann darfst du den
PE-Header im Speicher auslesen (die RVAs wurden vom Windows-Loader bereits in VAs "übersetzt").
Zitat von
Arnulf:
dh. reine code sections sind einfach nur readable und nicht writeable.
Sie muss nur "ausführbar" sein.
Wenn man den Bereich untersuchen will, dann braucht man natürlich auch die Möglichkeit den Bereich lesen zu können
Es gibt genug Beispiele in denen Code-Sections schreibbar sind (bzw. Copy-on-Write).
Zitat von
Arnulf:
Strings sind hier string literale und werden vielleicht in der data section abgelegt.
Damit könnte es natürlich sein, dass ich alle sections durchsuchen muss die readable sind aber nicht writeable und executeable?
Grundsätzlich wirst du alle lesbaren Bereiche untersuchen müssen. Auch "ausführbare" Bereiche enthalten (sehr oft konstante) Daten.
ps: Es handelt sich ingesamt um ein komplexes Thema, welches bei jedem Projekt neue Fragen aufwirft und entsprechend andere Lösungen erfordert. Der Prototyp diente nur als eine Vorlage, um die grundlegenden Mittel zur Verfügung zu haben, die man in solchen Fällen öfter braucht. Alles außer der ImgUtils.pas bezieht sich nur auf The Witcher - und selbst diese
Unit ist teilweise spezialisiert, weil sie diverse Informationen nicht zur Verfügung stellt.