MCode tutorial
Posted: 03 Oct 2013, 10:01
Dies hier ist ein Tutorial nach dem ich selber gesucht hab.
Man braucht stunden um die Probleme zu entdecken und eine Lösung zu finden
Dies ist der Grund warum ich hier ein Tutorial machen werde, damit ihr alle wisst was MCode ist und es verstehen könnt.
Zuerst werde ich beschreiben was es ist und wofür man es nutzt
Danach sehen wir uns ein paar praktische Beispiele an.
Während wir dass machen werde ich euch über die Probleme von MCode erzählen.
1.Einführung:Was ist MCode?
MCode ist kompilierter Code. Zum Beispiel: wenn man ein C++ Programm schreibt wird diese art von Code automatisch erstellt.
AHK Scripts sind das genaue gegenteil von kompilierten Code. In einem AHK script schaut sich der Interpreter den momentanen Code an und führt danach den entsprechenden Code aus.
In einer Kompilierten Sprache wird solcher Code direkt produziert.
Die CPU ist dann direkt in der Lage diesen Code zu lesen.
MCode ist diese Art von Code innerhalb eines AHK scripts.
Man kann diesen Code per DllCall ausführen lassen.
z.B. der Beispiel Code des Compilers den ich benutze:
1. Einführung:Was kann man mit MCode besser machen als mit AHK?
MCode ist einer der vielen Wege um die Geschwindigkeit deines Scripts/Programms zu erhöhen.
Ganz besonders wenn man mit sehr vielen Daten arbeitet die verarbeitet werden müssen.
Z.B. kann man so Bild effekte für GDI+-Bilder schreiben.
MCode gibt dir ausserdem die Möglichkeit auf einem sehr niedrigen Level zu programmieren (Assembly).
1. Einführung:Hört sich gut an. Was sind die Voraussetzungen?
1. Wissen über C++ und DllCalls C++ and DllCalls:
Wenn du denkst du hast keine Ahnung von DllCalls dann kannst du es vergessen.
Man kann ein richtig gutes C++ tutorial hier finden (auf Englisch)
http://www.cplusplus.com/doc/tutorial/
2. Einen Compiler:
Den Compiler den ich benutze kann man hier finden:
http://bentschi.no-ip.org/mcode/
Ich werde jeden Vorschlag hinzufügen.
3. Eine MCode Funktion:
Ich benutze diese:
Man braucht stunden um die Probleme zu entdecken und eine Lösung zu finden
Dies ist der Grund warum ich hier ein Tutorial machen werde, damit ihr alle wisst was MCode ist und es verstehen könnt.
Zuerst werde ich beschreiben was es ist und wofür man es nutzt
Danach sehen wir uns ein paar praktische Beispiele an.
Während wir dass machen werde ich euch über die Probleme von MCode erzählen.
1.Einführung:Was ist MCode?
MCode ist kompilierter Code. Zum Beispiel: wenn man ein C++ Programm schreibt wird diese art von Code automatisch erstellt.
AHK Scripts sind das genaue gegenteil von kompilierten Code. In einem AHK script schaut sich der Interpreter den momentanen Code an und führt danach den entsprechenden Code aus.
In einer Kompilierten Sprache wird solcher Code direkt produziert.
Die CPU ist dann direkt in der Lage diesen Code zu lesen.
MCode ist diese Art von Code innerhalb eines AHK scripts.
Man kann diesen Code per DllCall ausführen lassen.
z.B. der Beispiel Code des Compilers den ich benutze:
Dies ist eine Funktion die immer 42 zurückgeben wird (Die Antwort auf alle Fragen und alles.).2,x86:aipYww==,x64:uCoAAADD
1. Einführung:Was kann man mit MCode besser machen als mit AHK?
MCode ist einer der vielen Wege um die Geschwindigkeit deines Scripts/Programms zu erhöhen.
Ganz besonders wenn man mit sehr vielen Daten arbeitet die verarbeitet werden müssen.
Z.B. kann man so Bild effekte für GDI+-Bilder schreiben.
MCode gibt dir ausserdem die Möglichkeit auf einem sehr niedrigen Level zu programmieren (Assembly).
1. Einführung:Hört sich gut an. Was sind die Voraussetzungen?
1. Wissen über C++ und DllCalls C++ and DllCalls:
Wenn du denkst du hast keine Ahnung von DllCalls dann kannst du es vergessen.
Man kann ein richtig gutes C++ tutorial hier finden (auf Englisch)
http://www.cplusplus.com/doc/tutorial/
2. Einen Compiler:
http://bentschi.no-ip.org/mcode/
Ich werde jeden Vorschlag hinzufügen.
3. Eine MCode Funktion:
Ich benutze diese:
Code: Select all
MCode(mcode)
{
static e := {1:4, 2:1}, c := (A_PtrSize=8) ? "x64" : "x86"
if (!regexmatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", m))
return
if (!DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", 0, "uint*", s, "ptr", 0, "ptr", 0))
return
p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr")
if (c="x64")
DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", op)
if (DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", p, "uint*", s, "ptr", 0, "ptr", 0))
return p
DllCall("GlobalFree", "ptr", p)
}