Was macht ein Disassembler
-
hi,
sorry wenn die frage für euch zu einfach ist. ich bin ein absoluter neuling und habe noch nicht viel erfahrung. ich habe heute etwas über einen sog. disassembler gelesen udn würde gerne wissen welche aufgabe der hat und wie man soetwas programmieren könnte.
auch in assembler oder sollte man lieber c++ nutzen?
danke für eure hilfe
-
Ein Disassembler wandelt den EXE- Code zurück in Assembler Code. Damit kann man dadurch das Programm nicht nachprogrammieren oder das Programm verändern bzw. ähnlich gestalten.
Die meisten Programmieren wandeln das Programm aber in noch ein Programm oder irgendwieso unter (mit Hilfe EXE- Maker oder EXE- Binder, die das EXE Programm geschickt dann im System auspacken, sodass Disassembler keine Chance haben und nur unnützigen Code liefern).Tja, wie man so ein Disassembler schreibt, weiß ich selbst nicht genau, weil ich es noch nicht probiert habe. Dissassembliere doch einfach einen Disassembler
Ich stell mir das so vor, dass das Programm zuerst den Hexadezimal- Code (oder in einemanderen Code) und aus diesem Code dann den Assembler Code erzeugen. Kannst ja nach Tutorials unter Google nachsehen.
Lern aber vorerst noch lieber mehr über Assembler, solltest du etwas neuer in Assembler sein.
Wichtig ist vor allem, dass du dich mit Ein-Segment programmen (COM- Dateien) auskennst, weil die meisten Dissassmbler den Assembler Code in einem Segment liefern, wie beispielsweise der Disassembler von Visual C++.
-
Das Prinzip ist ganz einfach:
Du musst zuerst mal den EXE-Header auslesen. google einfach mal etwas.
Hier findest relevante Daten über Dateigröße, etc.
Jetzt brauchst Du eine Tabelle, die dir sagt, hinter welchem OPCode sich welcher Assemblerbefehl verbirgt und wieviele Parameter in welcher Länge er hat. nun musst Du nur noch für jeden Befehl in der Datei, der nach dem Header kommt den richtigen Namen finden.
Problem hierbei : Daten sind nicht leicht zu identifizieren. Meist werden sie aber vor alles andere Geschrieben. Das heißt, als erstes taucht ein Sprungbefehl auf und alles zwischen Sprungbefehl und zu bespringender Adresse ist wahrscheinlich Datensatz. - oder Unterprogramm..Was langsamer wäre, wäre einfach, sämtlichen Sprungbefehlen zu folgen und die entsprechenden Passagen zu disassemblieren. Der Rest ist dan Datensatz...
-
hi,
danke für die schnelle antwort. ich glaub ich hab es soweit verstanden.
ciao