Frage zu Disassembler
-
Hi,
ich bin ein ziemlicher Anfänger in Sachen Assembler und habe mal eine Frage. Wenn ich eine exe Datei Disassembliere und dann wieder assembliere, erhalte ich dann die gleiche exe Datei wieder oder geht das gar nicht?MfG
Daniel
-
Das kommt darauf an, was fuer Disassembler/Assembler Du benutzt.
Wenn beide Tools gut miteinander koennen sehe ich da bei normalen .exe-Programmen kein Problem.
-
Ich verwende als Disassembler IDA PRO v4.17.
Wenn ich eine normale exe Datei (Dos Anwendung) disassembliere und wieder versuche mit TASM zu assemblieren erhalte ich eine Menge Fehler. Kann das sein, dass ich irgendwas falsch mache?
-
Ich kenne diesen Disassembler nicht. Du musst natuerlich darauf achten, dass dieser TASM-kompatible Sourcecodes generiert, wenn Du sie mit TASM recompilieren willst.
Ein Tool mit dem das ganz gut laeuft ist der Sourcer von V COMMUNICATIONS, INC.
-
hat nicht funktioniert
-
Um jetzt weiter helfen zu koennen waeren folgende Informationen ganz hilfreich:
Was fuer eine Datei hast Du versucht zu disassemblieren/compilieren?
Was fuer eine Fehlermeldung wird ausgegeben?
Welche Optionen hast Du im Sourcer benutzt?
Und welche Optionen bei TASM?
-
Original erstellt von Nobuo T:
Um jetzt weiter helfen zu koennen waeren folgende Informationen ganz hilfreich:
Was fuer eine Datei hast Du versucht zu disassemblieren/compilieren?
Was fuer eine Fehlermeldung wird ausgegeben?
Welche Optionen hast Du im Sourcer benutzt?
Und welche Optionen bei TASM?Ich habe versucht meine hello World Anwendung zu disassemblieren und dann wieder zu compilieren. Die 1. Fehlermeldung lautet: 32-bit segments not allowed without .386.
Ich habe den Sourcer nicht gefunden, welche Optionen sollten eingestellt sein? Derjenige, der als letzers mit meinem Namen gepostet hat, war ich nicht. Ab jetzt poste ich nur noch angemeldet
Ich habe bei TASM keine Optionen eingestellt, ich rufe den folgendermaßen auf:
C:\TASM\BIN\TASM32.EXE test.asm
bzw.
C:\TASM\BIN\TASM.EXE test.asm
Was bei den beiden Programmen der unterschied ist und welches ich brauche weiß ich nicht
Ich sollte vielleicht noch erwähnen, dass ich bei meinem Disassembler folgende Warnung bekomme: The imports segment could be destroyed (uncheck 'make imports section' at the loading time).Vielen Dank für deine Hilfe
Daniel
-
Die knappe Antwort kam mir doch gleich ein bissel komisch vor... haette auch nicht damit gerechnet, dass Du den sourcer so schnell finden koenntest (Ist auch schon ein bissel aelter...)
Erstmal die Unterschiede zwischen den TASM compilern:
TASM.EXE Produziert 16 und 32Bit Objekt-Dateien mit 16Bit Debuginformationen. Verwendet den 640K DOS RealMode-Speicher
TASMX.EXE Produziert 16 und 32Bit Objekt-Dateien mit 16Bit Debuginformationen. Verwendet RTM.EXE/DPMI
TASM32.EXE Produziert 16 und 32Bit Objektdateien mit 32Bit Debuginformationen. Verwendet IMHO ebenfalls RTM/DPMI
Kurz: Solange Du dir keine Debuginformationen generieren laesst ist es egal, welchen compiler Du benutzt.
Original erstellt von Danielxx:
The imports segment could be destroyed (uncheck 'make imports section' at the loading time).War das Programm, das Du disassembliert hast eine Win32-Anwendung?
Wenn ja, solltest Du dem Ratschlag dieses Programms einfach mal Folge leisten.Original erstellt von Danielxx:
32-bit segments not allowed without .386.Das deutet darauf hin, dass wenigstens der Disassembler mehr oder weniger versucht hat einen Quellcode fuer eine Win32-Anwendung zu erstellen.
Also: Als was wurde das Hello World-Programm urspruenglich compiliert? DOS oder Win32?
-
Hi,
ich habe jetzt mal meine hello world Anwendung als Dos compiliert und disassembliert und erhalte keine Fehlermeldungen mehr. Das Problem ist nur, es wird nicht mehr hello World ausgegeben, sondern sinnlose Zeichen, die aber insgesamt die selbe länge habe wie hello world.
Wenn ich nun eine Win32 Anwendung disassemblieren will und wieder compilieren will, was muss ich dann anders machen, bzw. welche Parameter muss ich setzen?Daniel
-
Wenn statt vernuenftiger Text nur Zeichenwirrwar ausgegeben wird, musst Du halt schaun, wo in dem disassemblierten Quellcode der Fehler liegt. (sollte bei einem HW-Programm nun nicht sonderlich schwierig sein...)
Wenn Du eine Win-Anwendung compilieren willst, solltest Du erstmal das model flat benutzen, 32Bit-Segmente und natuerlich 386-CPU oder besser (Daher die Fehlermeldung mit dem .386...)
Nur merkwuerdig, dass der Disassembler das anscheinend nicht gesetzt hat.
Beim compilieren bleibt sonst alles beim Alten.
Beim Linken musst Du aber mit "/Twe" und "/3" angeben, dass eine Win32 exe erstellt werden soll. (schau dir dazu mit "/?" am besten nochmal die Optionen an)
-
Hi,
vielen Dank für deine Hilfe, ich konnte jetzt die Fehler beheben.
Ich erhalte nur noch beim compilieren so einen komischen Fehler:Assembling file: hello.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 0 bytes
**Fatal** Out of memoryWoran kann das liegen?
MfG
Daniel
-
Ich vermute, dass Du TASM.EXE benutzt hast?
Ist zwar ein wenig merkwuerdig, dass hier der Speicher schon fuer ein solches Programm zu klein ist, aber dann musst Du wohl oder uebel auf TASMX oder TASM32 umsteigen...
-
Danke, jetzt hat auch das geklappt