//UPDATE 04.09.2016 Bugfix in Anzeige XMM-Register 2xDOUBLE
//UPDATE 26.08.2016
Debugger jetzt "schöner" mit eigener Schrift (Monospaced) und im Fenster, bitte Anmerkungen hier unten im Text dazu beachten , bitte Rückinfo bzgl. gewünschter Erweiterungen/Bugs.
Bitte auf verschiedenen BS testen und ggf. Screenshots posten, falls bzgl. Anzeige/Fensterinhalt etwas nicht stimmt.
Bei den Listviews sollte nur das untere einen waagrechten Scrollbalken haben
Debugger AssembleIt.jpg
Hi zusammen,
seit einiger Zeit geistert die AssembleIt2_64 durchs Forum, hier die aktuelle
Version 1.08:
AssembleIt2_64.zip
Wer noch "alte" Versionen von AssembleIt() benutzt, sollte umsteigen
Der FASM-Assembler ist in Form einer direkt aus dem Speicher (also nicht als Datei beigelegten!) ausgeführten DLL integriert, daher reduziert sich der Overhead der AssembleIt2()-Funktion beim Ausführen auf einige Millisekunden!
Der ASM-Code wird im AutoIt-Script einfach zwischen die #cs und #ce-Tags geschrieben, es genügt ein einfaches RET, AssembleIt sorgt intern für das Aufräumen des Stack.
Im ASM-Code können, soweit sinnvoll, auch AutoIt-Variablen als Datenquelle eingesetzt werden. MOV EAX,$AutoItvariable funktioniert, MOV $AutoItvariable,EAX "natürlich" nicht...
Mit der Funktion _AssembleIt2("retbinary", "asm_Funktion") wird der assemblierte Code zurückgegeben, dieser kann dann per DllCallAddress() aufgerufen werden, wenn es mal "richtig schnell" gehen muss.
Der Debugger ist noch der "alte", bitte das Debugger-Beispiel testen und anschauen, damit man sehen kann, was damit "geht". Bei jedem Aufruf von _ASMDBG_() im Code wird in Scite die entsprechende Zeile im ASM-Code angesprungen. Es macht also Sinn, beim Debuggen das Debuggerfenster links, und rechts daneben Scite geöffnet zu haben.
man kann _ASMDBG_() auch mehrere parameter in Form von Registern mitgeben, es wird dann das Programm so lange laufen, bis der Ausdruck TRUE ist.
Bei _ASMDBG_("$EAX=12345 or $EBX=0xFF00FF") läuft der Code also so lange bis entweder der Registerinhalt von EAX=12345 ist, oder EBX=0xFF00FF. Da während dieser Abfragen der Debugger bei jedem _ASMDBG_() aufgerufen wird, "flackert" dessen GUI und das Programm läuft entsprechend "langsam. Ich würde also nicht EAX von 1e6 runterzählen und mit dieser Methode warten wollen, bis EAX=0 ist....
Ich habe mittlerweile schon am neuen Debugger angefangen, der wird, so hoffe ich, irgendwann mal fertig und bietet auch neue Features....Anregungen dazu sind gern gesehen!!!
Bitte die Beispiele testen, vor allem der 64-Bit-Modus sollte nun problemlos laufen. Dort wird, da die FASM-DLL nur im 32-Bit-Modus assemblieren kann, eine Hilfsdatei AssembleIt64_Helper.exe (im 32-Bit-Modus) erstellt, welche das assemblieren übernimmt und den so assemblierten Code ins Script überträgt. Diese Hilfsdatei muss nur ein einziges Mal erstellt werden. Bitte in den 64-Bit-Scripten darauf achten, daß, wie in den Beispielen gezeigt, dieser Prozess auch zusammen mit dem AutoIt-Script beendet wird!
Macros können nun auch verwendet werden, siehe Beispiele.
SSE-Befehle sind bis zu SSE4 (nicht 4.2) im Assembler enthalten, AVX fehlt auch ....ich weiß nicht, ob diese jemals als Assembler-DLL integriert werden. Ist imho auch unnötig!
Wer irgendwelche esoterischen ASM-Befehle benutzen will, welche zzt. nicht unterstützt werden, muss eben, wie die Profis, die OPcodes "hartcodieren"
Und weil ich es seit 30 Jahren runterbete, hier nochmal: "Mit ca. 10-12 ASM-Befehlen ist JEDES programmiertechnische Problem umzusetzen..."
Viel Spass damit!