;Version 1.01 vom 28.12.2015

;wenn AutoIt im 64-Bit-Modus gestartet wird, dann wird die Datei AssembleIt2_Helper64.EXE erstellt,
;welche den ASM-Sourcecode im 32-Bit-Modus (aufgrund der 32-Bit-DLL) assembliert und diesen Code
;an das aufrufende Script zurückgibt.
;

;by Andy (AutoIt.de)

#include-once
#include <WinAPI.au3>
#include <memory.au3>
#include <asmdbg64_neu.au3>

;Dll öffnen
If Not @AutoItX64 Then                                            ;32 bit, dll laden
    Global $Fasmdll = _DllFromMemory(_Fasmdll())                  ;lädt die dll in den speicher
    If @error Then Exit (MsgBox(0, "FASM.dll", "Error loading FASM.dll"))
    ;Version auslesen
    $version = DllCall($Fasmdll, "ptr", "fasm_GetVersion")
    ConsoleWrite('FASM.dll Version = ' & $version[0] & @CRLF & @CRLF)
Else                                                              ;64Bit, externen Assembler laden
    Global $AssembleIt2_Helper64ret, $AssembleIt2_Helper64pid
    $AssembleIt2_Helper64pid = WinGetProcess("AssembleIt2_Helper64") ;existiert der Prozess?

    If $AssembleIt2_Helper64pid = -1 Then                         ;prozess starten
        Run("assembleit2_helper64.exe")
    EndIf
    $AssembleIt2_Helper64hwnd = WinWait("AssembleIt2_Helper64", "", 2) ;maximal 2 sekunden warten

    If Not $AssembleIt2_Helper64hwnd Then                         ;kein laufender Prozess/fenster gefunden
        $Ret = MsgBox(4, "AssembleIt2_64", "AssembleIt2_Helper_64.exe konnte nicht gestartet werden bzw. existiert nicht!" & @CRLF & "Soll versucht werden, die Datei AssembleIt2_Helper64.exe zu erstellen?")
        If $Ret = 6 Then                                          ;ja, neue datei erstellen
            $sFile = @ScriptDir & "\AssembleIt2_Helper64.au3"     ;in diesem Verzeichnis
            $sPath = RegRead("HKEY_LOCAL_MACHINE64\SOFTWARE\AutoIt v3\AutoIt", "InstallDir");treffer?
            If $sPath = "" Then                                   ;nicht gefunden
                $sPath = RegRead("HKEY_CLASSES_ROOT64\AutoIt3Script\Shell\CompileX86\Command", "");zweiter versuch
                If $sPath <> "" Then                              ;Pfad gefunden
                    $sPath = StringSplit($sPath, '"', 3)[1]       ;splitten
                    $sCommand = StringFormat('"%s" /in "%s" /comp 2 /nopack /x86', $sPath, $sFile)
                    $iCode = RunWait($sCommand)                   ;aufrufen
                    If @error Then                                ;es wurde keine EXE erstellt
                        Exit (MsgBox(0, "AssembleIt2_64", "Es konnte kein Dateipfad zur Aut2Exe gefunden werden, bitte die AssembleIt2_Helper_64.exe als 32-Bit-Anwendung compilieren und ins Scriptverzeichnis kopieren!"))
                    Else                                          ;es wurde die EXE erstellt
                        Run("assembleit2_helper64.exe")
                        $AssembleIt2_Helper64hwnd = WinWait("AssembleIt2_Helper64", "", 3) ;maximal 2 sekunden warten
                        ;Msgbox(0,"","Datei erstellt!",1)
;~                         ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $AssembleIt2_Helper64hwnd = ' & $AssembleIt2_Helper64hwnd & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                    EndIf
                Else                                              ;kein pfad gefunden in der Registry
                    Exit (MsgBox(0, "AssembleIt2_64", "Es konnte kein Dateipfad zur Aut2Exe gefunden werden, bitte die AssembleIt2_Helper_64.exe als 32-Bit-Anwendung compilieren und ins Scriptverzeichnis kopieren!"))
                EndIf
            Else                                                  ;pfad gefunden, damit versuchen
                $sCommand = StringFormat('%s\Aut2exe\Aut2exe.exe" /in "%s" /comp 2 /nopack /x86', $sPath, $sFile)
                $iCode = RunWait($sCommand)
                If @error Then                                    ;es wurde keine EXE erstellt
                    Exit (MsgBox(0, "AssembleIt2_64", "Es konnte kein Dateipfad zur Aut2Exe gefunden werden, bitte die AssembleIt2_Helper_64.exe als 32-Bit-Anwendung compilieren und ins Scriptverzeichnis kopieren!"))
                Else                                              ;es wurde die EXE erstellt
                    Run("assembleit2_helper64.exe")
                    $AssembleIt2_Helper64hwnd = WinWait("AssembleIt2_Helper64", "", 3) ;maximal 2 sekunden warten
                    ;Msgbox(0,"","Datei erstellt!",1)
                EndIf
            EndIf
        Else
            Exit
        EndIf
    EndIf


    ;kontakt zum Assembler_Helpfile herstellen
    $AssembleIt2_Helper64pid = WinGetProcess("AssembleIt2_Helper64")
    If $AssembleIt2_Helper64pid = -1 Then Exit (MsgBox(0, "AssembleIt2_64", "Es konnte kein Prozess AssembleIt2_Helper64 erstellt werden! Programm beendet"))
    $AssembleIt2_Helper64ret = ControlGetText($AssembleIt2_Helper64hwnd, "", "[CLASS:Static; INSTANCE:1]")
    $split = StringSplit($AssembleIt2_Helper64ret, "|", 3)

    ;Variablen
    Global $AssembleIt2_Helper64_sourcecode_ptr = Number($split[0])
    Global $AssembleIt2_Helper64_asm_ptr = Number($split[1])
    Global $AssembleIt2_Helper64_runasm_ptr = Number($split[2])
    Global $AssembleIt2_Helper64_readasm_ptr = Number($split[3])

    Global $AssembleIt2_Helper64_set_runasm_struct = DllStructCreate("uint")
    Global $AssembleIt2_Helper64_set_runasm_ptr = DllStructGetPtr($AssembleIt2_Helper64_set_runasm_struct)

    Global $AssembleIt2_Helper64_set_readasm_struct = DllStructCreate("uint")
    Global $AssembleIt2_Helper64_set_readasm_ptr = DllStructGetPtr($AssembleIt2_Helper64_set_readasm_struct)

    $AssembleIt2_Helper64_process = _WinAPI_OpenProcess(0xFFFF, False, $AssembleIt2_Helper64pid) ;Helper-Prozess öffnen
;~     ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $AssembleIt2_Helper64_process = ' & $AssembleIt2_Helper64_process & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
EndIf

;globale Variablen und Structs

Global $AssembleIt2_asm_codestruct = _dllstructcreate64("byte[10000]") ;ausführbarer code, um Adresse für ORG zu erhalten
Global $AssembleIt2_asm_codestruct_ptr = DllStructGetPtr($AssembleIt2_asm_codestruct)

Global $AssembleIt2_len_mem = 800000                              ;Platz für den assemblierten Code, Rückgabe aus Helper64, wenn 64Bit
Global $AssembleIt2_struct_mem = _dllstructcreate64("byte [" & $AssembleIt2_len_mem & "]")
Global $AssembleIt2_struct_mem_ptr = DllStructGetPtr($AssembleIt2_struct_mem)




Func _AssembleIt2($Returntype, $sFunc, $Type1 = "", $Param1 = 0, $Type2 = "", $Param2 = 0, $Type3 = "", $Param3 = 0, $Type4 = "", $Param4 = 0, $Type5 = "", $Param5 = 0, $Type6 = "", $Param6 = 0, $Type7 = "", $Param7 = 0, $Type8 = "", $Param8 = 0, $Type9 = "", $Param9 = 0, $Type10 = "", $Param10 = 0, $Type11 = "", $Param11 = 0, $Type12 = "", $Param12 = 0, $Type13 = "", $Param13 = 0, $Type14 = "", $Param14 = 0, $Type15 = "", $Param15 = 0, $Type16 = "", $Param16 = 0, $Type17 = "", $Param17 = 0, $Type18 = "", $Param18 = 0, $Type19 = "", $Param19 = 0, $Type20 = "", $Param20 = 0) ;assembles the code      if @AutoItX64 then exit(Msgbox(64,"_AssembleIt()","Sorry, not possible in 64Bit-Mode, use"&@crlf&@crlf&"#AutoIt3Wrapper_UseX64=n"))

    Local $returntypeflag = 0

    Local $asm = _StringBetweenXX(FileRead(@ScriptFullPath), "#cs " & $sFunc & @CRLF, "#ce")
;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $asm = ' & $asm & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $startline = @extended                                        ;zeile, in der die funktion beginnt
    If Not IsArray($asm) Or $sFunc = "" Then Return MsgBox(1, "AssembleIt2 Error", "Error loading Function: " & $sFunc)
    Local $sourcetext = $asm[0]

    ;asm-code in speicher schreiben
    Local $struct_source = DllStructCreate("byte [10000]")        ;sollte reichen^^
    Local $ptr_source_asmcode = DllStructGetPtr($struct_source)



    ;$_DBG_trace=1 trägt nach jeder Zeile im ASM-Code ein
    If $_DBG_trace = 2 Then

        $Ret = StringRegExpReplace($sourcetext, "(?i)", 1)

    EndIf


    If StringRegExp($sourcetext, "(?i)\A\s*(use(32|64))", 0) = 0 Then ;wenn USE32/64 am Anfang des Codes nicht verwendet?
        Exit MsgBox(4096, "AssembleIt2", "Please use USE32 for 32-Bit, or USE64 for 64-Bit-Code!" & @CRLF & "Program will be terminated!")
    EndIf

    If @AutoItX64 Then                                            ;USE32 in 64-Bit-Modus?
        If StringInStr($sourcetext, "use32") Then
            If MsgBox(4096 + 4, "AssembleIt2", "USE32 is wrong in 64-Bit-AutoItcode!" & @CRLF & "USE64 is used instead!" & @CRLF & "Continue AssembleIt?") <> 6 Then Exit
            $sourcetext = StringReplace($sourcetext, "use32", "use64")
        EndIf
    Else                                                          ; 32 Bit
        If StringInStr($sourcetext, "use64") Then
            If MsgBox(4096 + 4, "AssembleIt2", "USE64 is wrong in 32-Bit-AutoItcode!" & @CRLF & "USE32 is used instead!" & @CRLF & "Continue AssembleIt?") <> 6 Then Exit
            $sourcetext = StringReplace($sourcetext, "use64", "use32")
        EndIf
    EndIf

;~     ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sourcetext = ' & $sourcetext & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console


    If StringInStr($sourcetext, "_asmdbg_(") Then
        If StringInStr($sourcetext, "$PTR_SOURCE_ASMCODE") = 0 Then ;kein pointer enthalten?
            ;dann einsetzen
            $sourcetext = StringRegExpReplace($sourcetext, "(?i)(use(32|64))", "$1" & @CRLF & "org $PTR_SOURCE_ASMCODE" & @CRLF)
;~             ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
;~              exit(msgbox(0,0,$sourcetext))
        EndIf

        If $Returntype = "retBinary" Then                         ;NOT Possible because of the wrong (ORG-) Adresses in the assembled and the executed Code
            MsgBox(4096, "AssembleIt", "_asmdbg_() will be removed from the Code, it is not possible to combine _asmdbg_() with the via RETBINARY assembled Code!")
            $sourcetext = StringRegExpReplace($sourcetext, "(?i)(_asmdbg_\((.*)\))", ";")
;~         stringreplace($sourcetext,"_asmdbg_(",";")
        EndIf
        If @AutoItX64 Then
            Exit MsgBox(4096, "AssembleIt2", "Combining _asmdbg() and 64-Bit-Code is not possible!" & @CRLF & "Program will be terminated!")
        EndIf

    EndIf

    ;ORG pointer_auf_asmcode im asmcode ersetzen
    $sourcetext = StringReplace($sourcetext, "$PTR_SOURCE_ASMCODE", $AssembleIt2_asm_codestruct_ptr)


    If StringInStr($sourcetext, "_asmdbg_(") Then                 ;debugger aktivieren
        If StringInStr($sourcetext, "org 0x") = 0 Then            ;keine ORG-Direktive gefunden, eintragen
            MsgBox(4096, "AssembleIt2", "Es wurde keine ORG Direktive im Quelltext gefunden, obwohl der Debug-Befehl _ASMDBG_() verwendet wurde!" & @CRLF & "ORG $PTR_SOURCE_ASMCODE wird nun vorübergehend in den Quellcode eingefügt!")
            $sourcetext = StringRegExpReplace($sourcetext, "(?i)(use(32|64))", '$1' & @CRLF & "ORG " & $AssembleIt2_asm_codestruct_ptr & @CRLF)
;~             ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sourcetext = ' & $sourcetext & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

        EndIf



        ;Debug-Code in ASM-Code finden und Zeilennummern merken
        Local $debug_array = StringSplit($sourcetext, @CRLF, 3)
        Local $debug_linenumber_array[UBound($debug_array)]       ;maximale anzahl zeilennummern
        $sourcetext_copy = ""
        $debug_linenumber = 0
        For $s = 0 To UBound($debug_array) - 1
            If StringInStr($debug_array[$s], "_asmdbg_(") Then
                $a = StringRegExp($debug_array[$s], "(?i)(_asmdbg_\((.*)\))", 3)
                $debug_linenumber_array[$debug_linenumber] = $s + $startline + 1 ;zeilennummer von _asmdbg_( merken
                $debug_array[$s] = StringRegExpReplace($debug_array[$s], "(?i)(_asmdbg_\((.*)\))", "\0_" & $debug_linenumber_array[$debug_linenumber])
                $debug_linenumber += 1
            EndIf
            $sourcetext_copy &= $debug_array[$s] & @CRLF
        Next
        $sourcetext = $sourcetext_copy

        ;_asmdbg_in ASM-Code durch Debug-Code ersetzen
        Local $debug_msg = StringRegExp($sourcetext, "(?i)_asmdbg_\((.*)\)", 3)

;~ _arraydisplay($debug_msg)
        For $s = 0 To UBound($debug_msg) - 1
            $_asm_debugwindow = ""
            _asmdbg_($debug_msg[$s], $debug_linenumber_array[$s])
            $dbg_txt = "_asmdbg_(" & $debug_msg[$s] & ")_" & $debug_linenumber_array[$s]
            $sourcetext = StringReplace($sourcetext, $dbg_txt, $_asm_debugwindow, 0, 0)
        Next

    EndIf

    ;AutoItvariablen im ASM-Code ersetzen
    Local $vars = StringRegExp($sourcetext, "(?:\$\w*)", 3)
;~     _arraydisplay($vars)
    For $s = 0 To UBound($vars) - 1
        $sourcetext = StringReplace($sourcetext, $vars[$s], Eval(StringTrimLeft($vars[$s], 1)), 0, 1)
    Next

;~  consolewrite($sourcetext&@crlf)

    DllStructSetData($struct_source, 1, StringToBinary($sourcetext)) ;sourcetext in struct speichern

    ;FASM_STATE-struct, siehe FASM.ASH
    Local $struct_state = DllStructCreate("dword condition; int output_lenght; ptr error_code;ptr output_data; long error_line", $AssembleIt2_struct_mem_ptr)
    Local $ptr_state = DllStructGetPtr($struct_state)

    ;Assembler aufrufen
    If $Returntype = "retbinary" Then                             ;nur code soll zurückgegeben werden
        $returntypeflag = 1
        $Returntype = "int"
    EndIf

    ;assemblieren, ggf mit externer EXE bei 64 bit!
    If @AutoItX64 Then                                            ;Exit (MsgBox(64, "_AssembleIt2()", "Sorry, not possible in 64Bit-Mode, use" & @CRLF & @CRLF & "#AutoIt3Wrapper_UseX64=n"))

        Local $t = TimerInit()

        DllStructSetData($AssembleIt2_Helper64_set_runasm_struct, 1, 1) ;flag=1 setzen
        $bytes = 0
        _WinAPI_WriteProcessMemory($AssembleIt2_Helper64_process, $AssembleIt2_Helper64_runasm_ptr, $AssembleIt2_Helper64_set_runasm_ptr, StringLen($sourcetext), $bytes)
        _WinAPI_WriteProcessMemory($AssembleIt2_Helper64_process, $AssembleIt2_Helper64_sourcecode_ptr, $ptr_source_asmcode, StringLen(StringToBinary($sourcetext)), $bytes)
        ;ist fertig assembliert?
        $offset = 0                                               ;offset des codes von externer struct
        While $offset = 0                                         ;warteschleife
            $offset = DllStructGetData($AssembleIt2_Helper64_set_readasm_struct, 1) ;wenn 1, dann bincode auslesen
            $x = _WinAPI_ReadProcessMemory($AssembleIt2_Helper64_process, $AssembleIt2_Helper64_readasm_ptr, $AssembleIt2_Helper64_set_readasm_ptr, 4, $bytes)
        WEnd
;~         MsgBox(0, 0, "func_3")
        ;assemblierten Code aus externer datei auslesen
        _WinAPI_ReadProcessMemory($AssembleIt2_Helper64_process, $AssembleIt2_Helper64_asm_ptr, $AssembleIt2_struct_mem_ptr, $AssembleIt2_len_mem, $bytes)
        ;adresse anpassen!
        DllStructSetData($struct_state, "error_code", $offset + $AssembleIt2_struct_mem_ptr)
;~         MsgBox(0, 0, "func_4")
        ;flag resetten in EXE
        DllStructSetData($AssembleIt2_Helper64_set_readasm_struct, 1, 0)
        _WinAPI_WriteProcessMemory($AssembleIt2_Helper64_process, $AssembleIt2_Helper64_readasm_ptr, $AssembleIt2_Helper64_set_readasm_ptr, 4, $bytes)
;~         MsgBox(0, 0, "func_5")
;~ local $m=timerdiff($t)
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console


        ;MsgBox(0, $a, "fertig assembliert  " & $c)
    Else                                                          ;32-Bitversion

        Local $Ret = DllCall($Fasmdll, $Returntype, "fasm_Assemble", "ptr", $ptr_source_asmcode, "ptr", $AssembleIt2_struct_mem_ptr, "dword", $AssembleIt2_len_mem, "dword", 100, "dword", 0)

    EndIf

;~     $AssembleIt2_struct_mem = 0
;~     $rr = _MemVirtualFree($AssembleIt2_struct_mem_ptr, $AssembleIt2_len_mem, $MEM_RELEASE)
;~     MsgBox(0, 0, "func_stop")
    If @error Then
        MsgBox(0, "FASM.dll", "Error calling FASM.dll (fasm_Assemble)")
        DllClose($Fasmdll)
        Exit
    EndIf
    ;FASM_STATE-struct auslesen
    $err_state_condition = DllStructGetData($struct_state, "condition")
;~      ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $err_state_condition = ' & $err_state_condition & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $err_state_output_length = DllStructGetData($struct_state, "output_lenght")
;~     ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $err_state_output_length = ' & $err_state_output_length & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $err_state_error_code = DllStructGetData($struct_state, "error_code")
;~    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $err_state_error_code = ' & ($err_state_error_code) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $err_state_output_data = DllStructGetData($struct_state, "output_data")
;~      ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $err_state_output_data = ' & $err_state_output_data & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $err_state_error_line = DllStructGetData($struct_state, "error_line")
;~     ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $err_state_error_line = ' & $err_state_error_line & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console


    ;
    If $err_state_condition = 0 Then                              ;kein Fehler aufgetreten
        ;assemblierten code auslesen...
        $code_struct = DllStructCreate("byte [" & $err_state_output_length & "]", $err_state_error_code)
        $code_ptr = DllStructGetPtr($code_struct)
        $code = DllStructGetData($code_struct, 1)
        DllStructSetData($AssembleIt2_asm_codestruct, 1, $code)

        ;code anzeigen
;~         ConsoleWrite('$code = ' & $code & @CRLF & @CRLF)

        $code_struct = 0
        $struct_state = 0
        $struct_source = 0
        $AssembleIt2_struct_mem = 0


        If $returntypeflag = 1 Then                               ; $returntype="retbinary" nur code soll zurückgegeben werden
            Return $code
        EndIf



        ;DllCallAddress() generieren
        $scriptstring = "DllCallAddress($Returntype&':cdecl',$AssembleIt2_asm_codestruct_ptr"
;~         ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Returntype = ' & $Returntype & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
        For $n = 1 To @NumParams / 2 - 1
            If Eval("Type" & $n) <> "" Then $scriptstring &= ",'" & Eval("Type" & $n) & "'," & Eval("Param" & $n);parameter gefunden
        Next
        $scriptstring &= ")"
;~          ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $scriptstring = ' & $scriptstring & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

        ;...und aufrufen
        $Ret = Execute($scriptstring)                             ;dllcalladdress aufrufen
;~         ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Ret = ' & $Ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
        If @error Then Exit (MsgBox(0, "FASM.dll", "Error executing: " & @CRLF & $scriptstring))
        ;Ergebnis=Rückgabe aus code
        ;SetExtended($code)

        GUISetState(@SW_HIDE, $_DBG_GUI)


        $code_struct = 0
        $struct_state = 0
        $struct_source = 0
        $AssembleIt2_struct_mem = 0

        If IsArray($Ret) Then
            Return $Ret[0]
        Else
            Exit (MsgBox(0, "AssembleIt2_64", "Fehler im Execute, Programm wird abgebrochen!"))
        EndIf
    Else                                                          ;Fehler aufgetreten
        ;s. FASM.ASH
        $struct_LINE_HEADER = DllStructCreate("dword file_path;dword line_number;dword file_offset;dword macro_callin_line; dword macro_line", $err_state_error_code)
        $file_path = DllStructGetData($struct_LINE_HEADER, "file_path")
        $line_number = DllStructGetData($struct_LINE_HEADER, "line_number")
        $error_line = StringMid($sourcetext, StringInStr($sourcetext, @CRLF, 1, $line_number - 1), StringInStr($sourcetext, @CRLF, 1, $line_number) - StringInStr($sourcetext, @CRLF, 1, $line_number - 1))
;~         $file = FileRead(@ScriptFullPath)
;~         StringReplace(StringLeft($file, StringInStr($file, $sourcetext)), @CRLF, @CRLF) ;anzahl @crlf in extended
        _GoToLineCol($startline + $line_number, -1)               ;springt in scite in die fehlerzeile
        Exit (MsgBox(0, "Fasm.dll", "Error " & _fasmdll_errcode($err_state_output_length) & " in Line " & $line_number + $startline & @CRLF & $error_line))

    EndIf

EndFunc                                                           ;==>_AssembleIt2


Func _fasmdll_errcode($errcode)

    Local $FASMerrtext = "unknown Error"

    Switch $errcode
        Case 0
            $FASMerrtext = "OK"                                   ;
        Case 1
            $FASMerrtext = "WORKING"                              ;
        Case 2
            $FASMerrtext = "ERROR"
        Case -1
            $FASMerrtext = "INVALID_PARAMETER"                    ;1
        Case -2
            $FASMerrtext = "OUT_OF_MEMORY"                        ;2
        Case -3
            $FASMerrtext = "STACK_OVERFLOW"                       ;3
        Case -4
            $FASMerrtext = "SOURCE_NOT_FOUND"                     ;4
        Case -5
            $FASMerrtext = "UNEXPECTED_END_OF_SOURCE"             ;5
        Case -6
            $FASMerrtext = "CANNOT_GENERATE_CODE"                 ;6
        Case -7
            $FASMerrtext = "FORMAT_LIMITATIONS_EXCEDDED"          ;7
        Case -8
            $FASMerrtext = "WRITE_FAILED"                         ;8

            ; Error codes for FASM_ERROR condition
        Case -101
            $FASMerrtext = "FILE_NOT_FOUND"                       ;101
        Case -102
            $FASMerrtext = "ERROR_READING_FILE"                   ;102
        Case -103
            $FASMerrtext = "INVALID_FILE_FORMAT"                  ;103
        Case -104
            $FASMerrtext = "INVALID_MACRO_ARGUMENTS"              ;104
        Case -105
            $FASMerrtext = "INCOMPLETE_MACRO"                     ;105
        Case -106
            $FASMerrtext = "UNEXPECTED_CHARACTERS"                ;106
        Case -107
            $FASMerrtext = "INVALID_ARGUMENT"                     ;107
        Case -108
            $FASMerrtext = "ILLEGAL_INSTRUCTION"                  ;108
        Case -109
            $FASMerrtext = "INVALID_OPERAND"                      ;109
        Case -110
            $FASMerrtext = "INVALID_OPERAND_SIZE"                 ;110
        Case -111
            $FASMerrtext = "OPERAND_SIZE_NOT_SPECIFIED"           ;111
        Case -112
            $FASMerrtext = "OPERAND_SIZES_DO_NOT_MATCH"           ;112
        Case -113
            $FASMerrtext = "INVALID_ADDRESS_SIZE"                 ;113
        Case -114
            $FASMerrtext = "ADDRESS_SIZES_DO_NOT_AGREE"           ;114
        Case -115
            $FASMerrtext = "DISALLOWED_COMBINATION_OF_REGISTERS"  ;115
        Case -116
            $FASMerrtext = "LONG_IMMEDIATE_NOT_ENCODABLE"         ;116
        Case -117
            $FASMerrtext = "RELATIVE_JUMP_OUT_OF_RANGE"           ;117
        Case -118
            $FASMerrtext = "INVALID_EXPRESSION"                   ;118
        Case -119
            $FASMerrtext = "INVALID_ADDRESS"                      ;119
        Case -120
            $FASMerrtext = "INVALID_VALUE"                        ;120
        Case -121
            $FASMerrtext = "VALUE_OUT_OF_RANGE"                   ;121
        Case -122
            $FASMerrtext = "UNDEFINED_SYMBOL"                     ;122
        Case -123
            $FASMerrtext = "INVALID_USE_OF_SYMBOL"                ;123
        Case -124
            $FASMerrtext = "NAME_TOO_LONG"                        ;124
        Case -125
            $FASMerrtext = "INVALID_NAME"                         ;125
        Case -126
            $FASMerrtext = "RESERVED_WORD_USED_AS_SYMBOL"         ;126
        Case -127
            $FASMerrtext = "SYMBOL_ALREADY_DEFINED"               ;127
        Case -128
            $FASMerrtext = "MISSING_END_QUOTE"                    ;128
        Case -129
            $FASMerrtext = "MISSING_END_DIRECTIVE"                ;129
        Case -130
            $FASMerrtext = "UNEXPECTED_INSTRUCTION"               ;130
        Case -131
            $FASMerrtext = "EXTRA_CHARACTERS_ON_LINE"             ;131
        Case -132
            $FASMerrtext = "SECTION_NOT_ALIGNED_ENOUGH"           ;132
        Case -133
            $FASMerrtext = "SETTING_ALREADY_SPECIFIED"            ;133
        Case -134
            $FASMerrtext = "DATA_ALREADY_DEFINED"                 ;134
        Case -135
            $FASMerrtext = "TOO_MANY_REPEATS"                     ;135
        Case -136
            $FASMerrtext = "SYMBOL_OUT_OF_SCOPE"                  ;136
        Case -140
            $FASMerrtext = "USER_ERROR"                           ;140
        Case -141
            $FASMerrtext = "ASSERTION_FAILED"                     ;141
    EndSwitch
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $FASMerrtext = ' & $FASMerrtext & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console


    Return $FASMerrtext

EndFunc                                                           ;==>_fasmdll_errcode




; by Jos
Func SendSciTE_Command($sCmd, $Wait_For_Return_Info = 0)
    Local $WM_COPYDATA = 74
    Local $WM_GETTEXT = 0x000D
    Local $WM_GETTEXTLENGTH = 0x000E224
    Local Const $SCI_GETLINE = 2153
    Local $Scite_hwnd = WinGetHandle("DirectorExtension")         ; Get SciTE DIrector Handle
    Local $My_Hwnd = GUICreate("AutoIt3-SciTE interface")         ; Create GUI to receive SciTE info
    Local $My_Dec_Hwnd = Dec(StringTrimLeft($My_Hwnd, 2))         ; Convert my Gui Handle to decimal
    $sCmd = ":" & $My_Dec_Hwnd & ":" & $sCmd                      ; Add dec my gui handle to commandline to tell SciTE where to send the return info
    Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
    DllStructSetData($CmdStruct, 1, $sCmd)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
    DllStructSetData($COPYDATA, 1, 1)
    DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
    DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
    DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
            'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
            'Ptr', DllStructGetPtr($COPYDATA))
    GUIDelete($My_Hwnd)
EndFunc                                                           ;==>SendSciTE_Command


;===============================================================================
; Function Name....: _GoToLineCol
; Description......: Setzt den Cursor auf die übergebene Zeilen und (optional)
; .................: Spaltenposition. Zeile: 1-basiert, Spalte: 0-basiert
; .................: Ist an dieser Position ein Wort, wird es selektiert
; Parameter(s).....: Zeile, optional Spalte
; Return Value(s)..: keine
; Author(s)........: BugFix ( bugfix@autoit.de )
;===============================================================================
Func _GoToLineCol($_iLine, $_iCol = -1)
    Local $iCol = ""
    If $_iCol > -1 Then $iCol = "," & $_iCol
    SendSciTE_Command("goto:" & $_iLine & $iCol)
EndFunc                                                           ;==>_GoToLineCol


Func _StringBetweenXX($s_String, $s_Start, $s_End, $v_Case = -1)

    ; Set case type
    Local $s_case = ""
    If $v_Case = Default Or $v_Case = -1 Then $s_case = "(?i)"

    ;auskommentierten code entfernen
    $s_String = StringRegExpReplace($s_String, "(?m)(\s*;.*$)", "")

    ; Escape characters
    Local $s_pattern_escape = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)"
    $s_Start = StringRegExpReplace($s_Start, $s_pattern_escape, "\\$1")
    $s_End = StringRegExpReplace($s_End, $s_pattern_escape, "\\$1")

    ; If you want data from beginning then replace blank start with beginning of string
    If $s_Start = "" Then $s_Start = "\A"

    ; If you want data from a start to an end then replace blank with end of string
    If $s_End = "" Then $s_End = "\z"

    Local $a_ret = StringRegExp($s_String, "(?s)" & $s_case & $s_Start & "(.*?)" & $s_End, 3)

    If @error Then Return SetError(1, 0, 0)

    $startline = 0
    $mid = StringMid($s_String, 1, StringInStr($s_String, $s_Start, 0, 1))
    StringReplace($mid, @CRLF, @CRLF, 0, 1)
    SetExtended(@extended)
    Return $a_ret
EndFunc                                                           ;==>_StringBetweenXX




; SUBROGATION FUNCTIONS by trancexx

Func _DllFromMemory($bBinaryImage, $sSubrogor = "explorer.exe")
    ; Make structure out of binary data that was passed
    Local $tBinary = DllStructCreate("byte[" & BinaryLen($bBinaryImage) & "]")
    DllStructSetData($tBinary, 1, $bBinaryImage)                  ; fill the structure
    ; Get pointer to it
    Local $pPointer = DllStructGetPtr($tBinary)
    ; Start processing passed binary data. 'Reading' PE format follows.
    Local $tIMAGE_DOS_HEADER = DllStructCreate("char Magic[2];" & _
            "word BytesOnLastPage;" & _
            "word Pages;" & _
            "word Relocations;" & _
            "word SizeofHeader;" & _
            "word MinimumExtra;" & _
            "word MaximumExtra;" & _
            "word SS;" & _
            "word SP;" & _
            "word Checksum;" & _
            "word IP;" & _
            "word CS;" & _
            "word Relocation;" & _
            "word Overlay;" & _
            "char Reserved[8];" & _
            "word OEMIdentifier;" & _
            "word OEMInformation;" & _
            "char Reserved2[20];" & _
            "dword AddressOfNewExeHeader", _
            $pPointer)
    ; Move pointer
    $pPointer += DllStructGetData($tIMAGE_DOS_HEADER, "AddressOfNewExeHeader") ; move to PE file header
    Local $sMagic = DllStructGetData($tIMAGE_DOS_HEADER, "Magic")
    ; Check if it's valid format
    If Not ($sMagic == "MZ") Then
        Return SetError(1, 0, 0)                                  ; MS-DOS header missing. Btw 'MZ' are the initials of Mark Zbikowski in case you didn't know.
    EndIf
    Local $tIMAGE_NT_SIGNATURE = DllStructCreate("dword Signature", $pPointer)
    ; Move pointer
    $pPointer += 4                                                ; size of $tIMAGE_NT_SIGNATURE structure
    ; Check signature
    If DllStructGetData($tIMAGE_NT_SIGNATURE, "Signature") <> 17744 Then ; IMAGE_NT_SIGNATURE
        Return SetError(2, 0, 0)                                  ; wrong signature. For PE image should be "PE\0\0" or 17744 dword.
    EndIf
    ; In place of IMAGE_FILE_HEADER structure
    Local $tIMAGE_FILE_HEADER = DllStructCreate("word Machine;" & _
            "word NumberOfSections;" & _
            "dword TimeDateStamp;" & _
            "dword PointerToSymbolTable;" & _
            "dword NumberOfSymbols;" & _
            "word SizeOfOptionalHeader;" & _
            "word Characteristics", _
            $pPointer)
    ; Get number of sections
    Local $iNumberOfSections = DllStructGetData($tIMAGE_FILE_HEADER, "NumberOfSections")
    ; Move pointer
    $pPointer += 20                                               ; size of $tIMAGE_FILE_HEADER structure
    ; Determine the type
    Local $tMagic = DllStructCreate("word Magic;", $pPointer)
    Local $iMagic = DllStructGetData($tMagic, 1)
    Local $tIMAGE_OPTIONAL_HEADER
    If $iMagic = 267 Then                                         ; x86 version
        If @AutoItX64 Then Return SetError(3, 0, 0)               ; uncompatible versions
        $tIMAGE_OPTIONAL_HEADER = DllStructCreate("word Magic;" & _
                "byte MajorLinkerVersion;" & _
                "byte MinorLinkerVersion;" & _
                "dword SizeOfCode;" & _
                "dword SizeOfInitializedData;" & _
                "dword SizeOfUninitializedData;" & _
                "dword AddressOfEntryPoint;" & _
                "dword BaseOfCode;" & _
                "dword BaseOfData;" & _
                "dword ImageBase;" & _
                "dword SectionAlignment;" & _
                "dword FileAlignment;" & _
                "word MajorOperatingSystemVersion;" & _
                "word MinorOperatingSystemVersion;" & _
                "word MajorImageVersion;" & _
                "word MinorImageVersion;" & _
                "word MajorSubsystemVersion;" & _
                "word MinorSubsystemVersion;" & _
                "dword Win32VersionValue;" & _
                "dword SizeOfImage;" & _
                "dword SizeOfHeaders;" & _
                "dword CheckSum;" & _
                "word Subsystem;" & _
                "word DllCharacteristics;" & _
                "dword SizeOfStackReserve;" & _
                "dword SizeOfStackCommit;" & _
                "dword SizeOfHeapReserve;" & _
                "dword SizeOfHeapCommit;" & _
                "dword LoaderFlags;" & _
                "dword NumberOfRvaAndSizes", _
                $pPointer)
        ; Move pointer
        $pPointer += 96                                           ; size of $tIMAGE_OPTIONAL_HEADER
    ElseIf $iMagic = 523 Then                                     ; x64 version
        If Not @AutoItX64 Then Return SetError(3, 0, 0)           ; uncompatible versions
        $tIMAGE_OPTIONAL_HEADER = DllStructCreate("word Magic;" & _
                "byte MajorLinkerVersion;" & _
                "byte MinorLinkerVersion;" & _
                "dword SizeOfCode;" & _
                "dword SizeOfInitializedData;" & _
                "dword SizeOfUninitializedData;" & _
                "dword AddressOfEntryPoint;" & _
                "dword BaseOfCode;" & _
                "uint64 ImageBase;" & _
                "dword SectionAlignment;" & _
                "dword FileAlignment;" & _
                "word MajorOperatingSystemVersion;" & _
                "word MinorOperatingSystemVersion;" & _
                "word MajorImageVersion;" & _
                "word MinorImageVersion;" & _
                "word MajorSubsystemVersion;" & _
                "word MinorSubsystemVersion;" & _
                "dword Win32VersionValue;" & _
                "dword SizeOfImage;" & _
                "dword SizeOfHeaders;" & _
                "dword CheckSum;" & _
                "word Subsystem;" & _
                "word DllCharacteristics;" & _
                "uint64 SizeOfStackReserve;" & _
                "uint64 SizeOfStackCommit;" & _
                "uint64 SizeOfHeapReserve;" & _
                "uint64 SizeOfHeapCommit;" & _
                "dword LoaderFlags;" & _
                "dword NumberOfRvaAndSizes", _
                $pPointer)
        ; Move pointer
        $pPointer += 112                                          ; size of $tIMAGE_OPTIONAL_HEADER
    Else
        Return SetError(3, 0, 0)                                  ; uncompatible versions
    EndIf
    ; Extract data
    Local $iEntryPoint = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "AddressOfEntryPoint") ; if loaded binary image would start executing at this address
    Local $pOptionalHeaderImageBase = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "ImageBase") ; address of the first byte of the image when it's loaded in memory
    $pPointer += 8                                                ; skipping IMAGE_DIRECTORY_ENTRY_EXPORT
    ; Import Directory
    Local $tIMAGE_DIRECTORY_ENTRY_IMPORT = DllStructCreate("dword VirtualAddress; dword Size", $pPointer)
    ; Collect data
    Local $pAddressImport = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_IMPORT, "VirtualAddress")
    Local $iSizeImport = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_IMPORT, "Size")
    $pPointer += 8                                                ; size of $tIMAGE_DIRECTORY_ENTRY_IMPORT
    $pPointer += 24                                               ; skipping IMAGE_DIRECTORY_ENTRY_RESOURCE, IMAGE_DIRECTORY_ENTRY_EXCEPTION, IMAGE_DIRECTORY_ENTRY_SECURITY
    ; Base Relocation Directory
    Local $tIMAGE_DIRECTORY_ENTRY_BASERELOC = DllStructCreate("dword VirtualAddress; dword Size", $pPointer)
    ; Collect data
    Local $pAddressNewBaseReloc = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_BASERELOC, "VirtualAddress")
    Local $iSizeBaseReloc = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_BASERELOC, "Size")
    $pPointer += 8                                                ; size of IMAGE_DIRECTORY_ENTRY_BASERELOC
    $pPointer += 40                                               ; skipping IMAGE_DIRECTORY_ENTRY_DEBUG, IMAGE_DIRECTORY_ENTRY_COPYRIGHT, IMAGE_DIRECTORY_ENTRY_GLOBALPTR, IMAGE_DIRECTORY_ENTRY_TLS, IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
    $pPointer += 40                                               ; skipping five more unused data directories
    ; Load the victim
    Local $pBaseAddress = _WinAPI_LoadLibraryEx($sSubrogor, 1)    ; "lighter" loading
    If @error Then Return SetError(4, 0, 0)                       ; Couldn't load subrogor
    Local $pHeadersNew = DllStructGetPtr($tIMAGE_DOS_HEADER)      ; starting address of binary image headers
    Local $iOptionalHeaderSizeOfHeaders = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "SizeOfHeaders") ; the size of the MS-DOS stub, the PE header, and the section headers
    ; Set proper memory protection for writing
    Local $aCall = DllCall("kernel32.dll", "bool", "VirtualProtect", _
            "ptr", $pBaseAddress, _
            "dword_ptr", $iOptionalHeaderSizeOfHeaders, _
            "dword", 4, _                                         ; PAGE_READWRITE
            "dword*", 0)
    If @error Or Not $aCall[0] Then Return SetError(5, 0, 0)      ; Couldn't set writing right
    ; Write NEW headers
    DllStructSetData(DllStructCreate("byte[" & $iOptionalHeaderSizeOfHeaders & "]", $pBaseAddress), 1, DllStructGetData(DllStructCreate("byte[" & $iOptionalHeaderSizeOfHeaders & "]", $pHeadersNew), 1))
    ; Dealing with sections. Will write them.
    Local $tIMAGE_SECTION_HEADER
    Local $iSizeOfRawData, $pPointerToRawData
    Local $iVirtualSize, $iVirtualAddress
    Local $tImpRaw, $tRelocRaw
    For $i = 1 To $iNumberOfSections
        $tIMAGE_SECTION_HEADER = DllStructCreate("char Name[8];" & _
                "dword UnionOfVirtualSizeAndPhysicalAddress;" & _
                "dword VirtualAddress;" & _
                "dword SizeOfRawData;" & _
                "dword PointerToRawData;" & _
                "dword PointerToRelocations;" & _
                "dword PointerToLinenumbers;" & _
                "word NumberOfRelocations;" & _
                "word NumberOfLinenumbers;" & _
                "dword Characteristics", _
                $pPointer)
        ; Collect data
        $iSizeOfRawData = DllStructGetData($tIMAGE_SECTION_HEADER, "SizeOfRawData")
        $pPointerToRawData = $pHeadersNew + DllStructGetData($tIMAGE_SECTION_HEADER, "PointerToRawData")
        $iVirtualAddress = DllStructGetData($tIMAGE_SECTION_HEADER, "VirtualAddress")
        $iVirtualSize = DllStructGetData($tIMAGE_SECTION_HEADER, "UnionOfVirtualSizeAndPhysicalAddress")
        If $iVirtualSize And $iVirtualSize < $iSizeOfRawData Then $iSizeOfRawData = $iVirtualSize
        ; Set MEM_EXECUTE_READWRITE for sections (PAGE_EXECUTE_READWRITE for all for simplicity)
        $aCall = DllCall("kernel32.dll", "bool", "VirtualProtect", _
                "ptr", $pBaseAddress + $iVirtualAddress, _
                "dword_ptr", $iVirtualSize, _
                "dword", 64, _                                    ; PAGE_EXECUTE_READWRITE
                "dword*", 0)
        If @error Or Not $aCall[0] Then                           ; unavailable space. Will skip it and see what happens.
            $pPointer += 40                                       ; size of $tIMAGE_SECTION_HEADER structure
            ContinueLoop
        EndIf
        ; Clean the space
        DllStructSetData(DllStructCreate("byte[" & $iVirtualSize & "]", $pBaseAddress + $iVirtualAddress), 1, DllStructGetData(DllStructCreate("byte[" & $iVirtualSize & "]"), 1))
        ; If there is data to write, write it
        If $iSizeOfRawData Then
            DllStructSetData(DllStructCreate("byte[" & $iSizeOfRawData & "]", $pBaseAddress + $iVirtualAddress), 1, DllStructGetData(DllStructCreate("byte[" & $iSizeOfRawData & "]", $pPointerToRawData), 1))
        EndIf
        ; Imports
        If $iVirtualAddress <= $pAddressImport And $iVirtualAddress + $iSizeOfRawData > $pAddressImport Then
            $tImpRaw = DllStructCreate("byte[" & $iSizeImport & "]", $pPointerToRawData + ($pAddressImport - $iVirtualAddress))
            _FixImports($tImpRaw, $pBaseAddress)
        EndIf
        ; Relocations
        If $iVirtualAddress <= $pAddressNewBaseReloc And $iVirtualAddress + $iSizeOfRawData > $pAddressNewBaseReloc Then
            $tRelocRaw = DllStructCreate("byte[" & $iSizeBaseReloc & "]", $pPointerToRawData + ($pAddressNewBaseReloc - $iVirtualAddress))
        EndIf
        ; Move pointer
        $pPointer += 40                                           ; size of $tIMAGE_SECTION_HEADER structure
    Next
    ; Fix relocations
    If $pAddressNewBaseReloc And $iSizeBaseReloc Then _FixReloc($tRelocRaw, $pBaseAddress, $pOptionalHeaderImageBase, $iMagic = 523)
    ; Entry point address
    Local $pEntryFunc = $pBaseAddress + $iEntryPoint
    ; DllMain simulation
    _DllCallPointer("bool", $pEntryFunc, "ptr", $pBaseAddress, "dword", 1, "ptr", 0) ; DLL_PROCESS_ATTACH
    ; Get pseudo-handle
    Local $hPseudo = DllOpen($sSubrogor)
    _WinAPI_FreeLibrary($pBaseAddress)                            ; decrement reference count
    Return $hPseudo
EndFunc                                                           ;==>_DllFromMemory


Func _FixReloc($tData, $pAddressNew, $pAddressOld, $fImageX64)
    Local $iDelta = $pAddressNew - $pAddressOld                   ; dislocation value
    Local $iSize = DllStructGetSize($tData)                       ; size of data
    Local $pData = DllStructGetPtr($tData)                        ; addres of the data structure
    Local $tIMAGE_BASE_RELOCATION, $iRelativeMove
    Local $iVirtualAddress, $iSizeofBlock, $iNumberOfEntries
    Local $tEnries, $iData, $tAddress
    Local $iFlag = 3 + 7 * $fImageX64                             ; IMAGE_REL_BASED_HIGHLOW = 3 or IMAGE_REL_BASED_DIR64 = 10
    While $iRelativeMove < $iSize                                 ; for all data available
        $tIMAGE_BASE_RELOCATION = DllStructCreate("dword VirtualAddress; dword SizeOfBlock", $pData + $iRelativeMove)
        $iVirtualAddress = DllStructGetData($tIMAGE_BASE_RELOCATION, "VirtualAddress")
        $iSizeofBlock = DllStructGetData($tIMAGE_BASE_RELOCATION, "SizeOfBlock")
        $iNumberOfEntries = ($iSizeofBlock - 8) / 2
        $tEnries = DllStructCreate("word[" & $iNumberOfEntries & "]", DllStructGetPtr($tIMAGE_BASE_RELOCATION) + 8)
        ; Go through all entries
        For $i = 1 To $iNumberOfEntries
            $iData = DllStructGetData($tEnries, 1, $i)
            If BitShift($iData, 12) = $iFlag Then                 ; check type
                $tAddress = DllStructCreate("ptr", $pAddressNew + $iVirtualAddress + BitAND($iData, 0xFFF)) ; the rest of $iData is offset
                DllStructSetData($tAddress, 1, DllStructGetData($tAddress, 1) + $iDelta) ; this is what's this all about
            EndIf
        Next
        $iRelativeMove += $iSizeofBlock
    WEnd
    Return 1                                                      ; all OK!
EndFunc                                                           ;==>_FixReloc


Func _FixImports($tData, $hInstance)
    Local $pImportDirectory = DllStructGetPtr($tData)
    Local $hModule, $tFuncName, $sFuncName, $pFuncAddress
    Local $tIMAGE_IMPORT_MODULE_DIRECTORY, $tModuleName
    Local $tBufferOffset2, $iBufferOffset2
    Local $iInitialOffset, $iInitialOffset2, $iOffset
    Local Const $iPtrSize = DllStructGetSize(DllStructCreate("ptr"))
    While 1
        $tIMAGE_IMPORT_MODULE_DIRECTORY = DllStructCreate("dword RVAOriginalFirstThunk;" & _
                "dword TimeDateStamp;" & _
                "dword ForwarderChain;" & _
                "dword RVAModuleName;" & _
                "dword RVAFirstThunk", _
                $pImportDirectory)
        If Not DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAFirstThunk") Then ExitLoop ; the end
        $tModuleName = DllStructCreate("char Name[64]", $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAModuleName"))
        $hModule = _WinAPI_LoadLibrary(DllStructGetData($tModuleName, "Name")) ; load the module
        $iInitialOffset = $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAFirstThunk")
        $iInitialOffset2 = $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAOriginalFirstThunk")
        If $iInitialOffset2 < $iInitialOffset Then $iInitialOffset2 = $iInitialOffset
        $iOffset = 0                                              ; back to 0
        While 1
            $tBufferOffset2 = DllStructCreate("ptr", $iInitialOffset2 + $iOffset)
            $iBufferOffset2 = DllStructGetData($tBufferOffset2, 1) ; value at that address
            If Not $iBufferOffset2 Then ExitLoop                  ; zero value is the end
            If Number(BinaryMid($iBufferOffset2, $iPtrSize, 1)) Then ; MSB is set for imports by ordinal, otherwise not
                $pFuncAddress = _GetAddress($hModule, BitAND($iBufferOffset2, 0xFFFFFF)) ; the rest is ordinal value
            Else
                $tFuncName = DllStructCreate("word Ordinal; char Name[64]", $hInstance + $iBufferOffset2)
                $sFuncName = DllStructGetData($tFuncName, "Name")
                $pFuncAddress = _GetAddress($hModule, $sFuncName)
            EndIf
            DllStructSetData(DllStructCreate("ptr", $iInitialOffset + $iOffset), 1, $pFuncAddress) ; and this is what's this all about
            $iOffset += $iPtrSize                                 ; size of $tBufferOffset2
        WEnd
        $pImportDirectory += 20                                   ; size of $tIMAGE_IMPORT_MODULE_DIRECTORY
    WEnd
    Return 1                                                      ; all OK!
EndFunc                                                           ;==>_FixImports


Func _GetAddress($hModule, $vFuncName)
    Local $sType = "str"
    If IsNumber($vFuncName) Then $sType = "int"                   ; if ordinal value passed
    Local $aCall = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", $hModule, $sType, $vFuncName)
    If @error Or Not $aCall[0] Then Return SetError(1, 0, 0)
    Return $aCall[0]
EndFunc                                                           ;==>_GetAddress


Func _DllCallPointer($sRetType, $pAddress, $sType1 = "", $vParam1 = 0, $sType2 = "", $vParam2 = 0, $sType3 = "", $vParam3 = 0, $sType4 = "", $vParam4 = 0, $sType5 = "", $vParam5 = 0, $sType6 = "", $vParam6 = 0, $sType7 = "", $vParam7 = 0, $sType8 = "", $vParam8 = 0, $sType9 = "", $vParam9 = 0, $sType10 = "", $vParam10 = 0, $sType11 = "", $vParam11 = 0, $sType12 = "", $vParam12 = 0, $sType13 = "", $vParam13 = 0, $sType14 = "", $vParam14 = 0, $sType15 = "", $vParam15 = 0, $sType16 = "", $vParam16 = 0, $sType17 = "", $vParam17 = 0, $sType18 = "", $vParam18 = 0, $sType19 = "", $vParam19 = 0, $sType20 = "", $vParam20 = 0)
    ; Author: Ward, Prog@ndy, trancexx
    Local Static $pHook, $hPseudo, $tPtr, $sDll, $sFuncName
    If $pAddress Then
        If Not $pHook Then
            Local $iX64 = @AutoItX64
            $hPseudo = DllOpen($sDll)
            If $hPseudo = -1 Then
                $sDll = "kernel32.dll"
                $sFuncName = "GlobalFix"
                $hPseudo = DllOpen($sDll)
            EndIf
            Local $aCall = DllCall("kernel32.dll", "ptr", "GetModuleHandleW", "wstr", $sDll)
            If @error Or Not $aCall[0] Then Return SetError(7, @error, 0) ; Couldn't get dll handle
            Local $hModuleHandle = $aCall[0]
            $aCall = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", $hModuleHandle, "str", $sFuncName)
            If @error Then Return SetError(8, @error, 0)          ; Wanted function not found
            $pHook = $aCall[0]
            $aCall = DllCall("kernel32.dll", "bool", "VirtualProtect", "ptr", $pHook, "dword_ptr", 7 + 5 * $iX64, "dword", 64, "dword*", 0)
            If @error Or Not $aCall[0] Then Return SetError(9, @error, 0) ; Unable to set MEM_EXECUTE_READWRITE
            If $iX64 Then
                DllStructSetData(DllStructCreate("word", $pHook), 1, 0xB848)
                DllStructSetData(DllStructCreate("word", $pHook + 10), 1, 0xE0FF)
            Else
                DllStructSetData(DllStructCreate("byte", $pHook), 1, 0xB8)
                DllStructSetData(DllStructCreate("word", $pHook + 5), 1, 0xE0FF)
            EndIf
            $tPtr = DllStructCreate("ptr", $pHook + 1 + $iX64)
        EndIf
        DllStructSetData($tPtr, 1, $pAddress)
        Local $aRet
        Switch @NumParams
            Case 2
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName)
            Case 4
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1)
            Case 6
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2)
            Case 8
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3)
            Case 10
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4)
            Case 12
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5)
            Case 14
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6)
            Case 16
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7)
            Case 18
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8)
            Case 20
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9)
            Case 22
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10)
            Case 24
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11)
            Case 26
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12)
            Case 28
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13)
            Case 30
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14)
            Case 32
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15)
            Case 34
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15, $sType16, $vParam16)
            Case 36
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15, $sType16, $vParam16, $sType17, $vParam17)
            Case 38
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15, $sType16, $vParam16, $sType17, $vParam17, $sType18, $vParam18)
            Case 40
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15, $sType16, $vParam16, $sType17, $vParam17, $sType18, $vParam18, $sType19, $vParam19)
            Case 42
                $aRet = DllCall($hPseudo, $sRetType, $sFuncName, $sType1, $vParam1, $sType2, $vParam2, $sType3, $vParam3, $sType4, $vParam4, $sType5, $vParam5, $sType6, $vParam6, $sType7, $vParam7, $sType8, $vParam8, $sType9, $vParam9, $sType10, $vParam10, $sType11, $vParam11, $sType12, $vParam12, $sType13, $vParam13, $sType14, $vParam14, $sType15, $vParam15, $sType16, $vParam16, $sType17, $vParam17, $sType18, $vParam18, $sType19, $vParam19, $sType20, $vParam20)
            Case Else
                If Mod(@NumParams, 2) Then Return SetError(4, 0, 0) ; Bad number of parameters
                Return SetError(5, 0, 0)                          ; Max number of parameters exceeded
        EndSwitch
        Return SetError(@error, @extended, $aRet)                 ; All went well. Error description and return values like with DllCall()
    EndIf
    Return SetError(6, 0, 0)                                      ; Null address specified
EndFunc                                                           ;==>_DllCallPointer



; EMBEDDED DLL
Func _BinDll($sFile)
    ; Binary here
    Local $hFile = FileOpen($sFile, 16)
    Local $bBinary = FileRead($hFile)
    FileClose($hFile)
    Return $bBinary
EndFunc                                                           ;==>_BinDll


;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2013-03-25
;thx to UEZ!!!
Func _Fasmdll($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Fasmdll
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= 'AlRmkDEIdvJTFYZXhkGgAYXAD4hqcABQ0+Q0MgjhSuEEB4MV4wQW2CAB4QTGcADojo8V5wQIEQQocRDCW7CAyKpmidhmq3GhlNOg2DCGUAPrKVYQCndBBNPgBesV6LvFYQAOFZAF6M2BE2IrAk5gbGM8D3RfrCzofCASAG0K0Q0F6WpMtAg6YQSLuAinDasboAGBCY9wAMXnBWYJaMB0EpFh8TAG46Ytk1AKkyjo3EAB6R3wAGFDFY2s6AZQB2Ea0lJJ4RBEPGkavjABMHTAhkITUPDPwAHxGqcjYAETSf/oI+ADWKJJAQLoDbEFB+jBS3SAFDwDdBkEsLk6tOsdgwDEYduBAMWmElpMsgd84QWQCEjSALoqO5kINDABgHIIAqyU6FN0CB9AAeiiwAABcyMEdA08BnQTQDwKdBnpDqEBRVGwCel255AATJEAbAGRAFM9J7oAAADpYuf//6IAYxFAAKzoBzwAAAA8EA+E6AABADhbD4XLSP//BOhOAFBSU1GgWBEAiFDGBQEYAKw8ECwPha0AdKzo0yI7AFYodD0AboWbQQEiPBEPhZIAEFgAWVtaPAF0GHIAEegAPQAAxgVCYABy0+nz5gCmN4jq//8DINLp4gAQAQJcCMB0CDwBDySFXwF1HY0AlcAQBEAABEYycivouYkAiYA9ARQBdBEDPpDB6PRCAMNYngVPCNHpkgFg1un//1EMKsDoyQEqLQYq0ATpZwAqrOhdOgCQAGaJwwlt0kcBDNb4AAwAbTQBbcCBCAFtErcABIj4gEgR6CnbgEcFa/aAooVo6oAFimhCjYAZU+hKjIAcwiJbAh4q6OyAm4D6KAF0FAVkroAmiNDQqumMnYdloIAkCBIowOiJBBJnBhLQ6aJ7Bj0PomGC4z8BXJWA46KE4wOAP+iGAApTgOOCb/JGgW8YAxOFwuRCA1Y5AADDgUEIEtDABIjgxERQrOjW7EAHwEIlwQu0wQvBQiarAALBZ+gfADP+BVEBH+kT5Qw/kAAJ6CROi4hz6PAAHug7kkFAY5+cgR7bOIkeWlWCI3sBHAAbR0IDuRlACIodgQjCCYjgUJpTwgopQAcFbuhIwygqI4ENEMUoBwACW1gs6H2AHEQoSw2c7kWJQCisikJnWOhTASemIQA0wVn/m81W40AixQEYrwANrOghRS5AJC0CJJiABQYkt8IKdEUVwWB/ARkCQChYiiUBAh/kdCY4xA+DAnHABYD8AXQPgGD8Ag+FY0ADgynoosvACunF40ANCQB4AOvvrOi0NwAAqFuG2EENO0QNCkANUHQP6SwBF5oBDG5ZgF/okEACBDtewAOikcEvrOgpRC71REEuBmcAE0IugPwID4W262EC4RfYAAHmF/dgBJXgFy3hF78AA+hCQAhEgD2hAwR0DQMBAKgPha5BAwehDxbAFQis6AzABoD8BA+EhZUAA4jD6OygBgjp1eTEjMDgAwRGg4IpBCus6I/iDA9UhKjkVVMBCtaAAlAF5FVCAAKAPih0MwCAPhF1BoB+AkAodCis6FjDBoUyJAIaljYEGiBMiOAE6IyBDobi//8wLMCG4hmAWCcBBigPKIXzQyxA7AAC6KrGiGVUwAIZ6EsACEAJQsbiKLrojD7gCfAKmeAEekAq6+Ws6NIlAA6Iw+ITouAH4RPCMOcTJazouAAE4RNChKADrOj2NUZF6DLvABHpw4AlhhNTrKzoicEFoBNVrRNOoRO2DKUTQFSwwAflEnfAFGKg4QKq6VKgEwkr6JId4ClyD2IJ6HxBDqR24aF66HBhAURiNdIUZBTgQqEBUmUUohpazGIC8mACgEAPATOmySAC6D1ABvjD4B8AAxiIw/kAp6EN9sYFoQEHBazowQMGMgEGOokBBgwABoIQAJ8XcigQ6PHgAf6CBunlSuDgAylAQ+nbIAGsCOjRNEBHPix0GBCIw4jgwAUL6MQthwWSoDmiE0ZgLQ+ERDMBYQURdQrhLQ9EhCTAAazoRIIP'
    $Fasmdll &= 'D6yEH6ABARAIARCLgALrQJ8BCyCjIW6gCoI7AiURYymv6VdgEEas6CYAYQgAMcxBBDE8AqGgGQR0cDwgZcGAAiiAPWwjX/CAAegNiWAJ6F4gK4A9byFjCA+D2cAC60zo0gHgCOjdhv//ZqMjATTDAwB1FcQHdQwAZoP4gHwGZj0QgAB8VaYRaeg0UYC86YWXQAuhIQjjFyAIFAjhBwfABwAAfGoUCAgNAQhEAAhmAmtk6MwgmukwYALDqE7A6yes6GMzIThhEdoaUCFawAYMESBQDQARpu9wAgERu0AHETMAEVp3ARGwQAEGEd/AAOhi/EAcU+hMwBQWEcchcAHrU+jAkgHKhbEgWWaJwv8MCBFgxQwClmAJZonQ6PyuoYAUq+ltlhAGiXcEa28EahEZZQRPYARQBLaxUASr6ShABIURNmEsxaBeFDABrOgEoQ7wMETQP9EAQjIAUDgP7IXC0QAhMbmAAKBeFlIW1QACIGdB8C4F6ZyhUgIiD4WTgABY0CtSInASCDyAUIwAAehG+qAFQwft6GEADOkAopX//7DsqumWmnAACj9d4QIbhAFpVWEEJWUERXEBs2YE5SzoGmAEsQtYkQTkqkWhAE2gAKzoPXMJbaWhDAVlCfw+VAzzgAAtJgwSoQJgAt7RAehQujETD9DQABI4NgzIEAFE6DbGB+/onbAA6YTelJAH7qrp1nAAZToMmeECV4MxDDIHfy05B55QBjEHajIH3DCtMwdcNQcGD1RBBMIACnEzB+foKREr8Y9hB+atAg9coACzRwJTAujTK6ia6xVjAQRjAeljAWbqoG/QB+gbIQhgQ3grgEIDAv9xQw90Q9A9hdErZ2ABAQ+EucAAJOhGAAOJwjUOITwQAg+Ey/FqBA+EApFxAAZ0YjwIdIA2PAp0d+mc1gMIA3RDgwACdAXotEDfYQF40ACQBo5AAxHDACB0bsQCD4RiQ5IDUQFAD4VBwADphMLbRgN0JOiPUAhRBAUPhDXwAf4yDukSnFAC6IPAAevh6KpaYQDa9Qfw9QcJVQSi3gUGhOA8UAM84AKs6VxSBkQI3WEBFGEBkkVgAfYFYxCFvGABMKzoLi9BQ3AaAnRqNTBAGjFArJABVguLkcAA6ebcFwGEefEEktVQHunPYAHoupEAgsUBAj4uD4TUwAEgifNO6KcgoofzwIA7Og+EmpFdxQjGRvABREcPhK0SF0ApaAh0cSEjM4YHEBWQURYVQHRTxgcQwQeHA4AodAJ1BMYHZkci6LGxmeiuEXJQiWDCg+oDcQCNJAMjSyEHISGqEEOEqhFD9lKRGA69OyAFRCAF6IJc8AOJ0Zk5ylCkBUEBXvAAc7CIxLCK66BKwjAD6P2C5xtFkwcoMAKYmeiQLAAcctXESxCY4AOJwkoLZQfgA4PgA4PHAoskLZCwX+jGwE6D7wQCw0QpdCJ3HoBaPeIudIBPE1AMMk9yYjbwT3Mx+KAC8gEP6IT5OjEIdjICUA4UBw55EAeRApNScwL5w1iDPaigBqABCKAHoYpEsACjAQHHBaxQAGQ9NWAm75BlIsAYrGtiBTQTlcAAoAE20qbogOZ///9QRqxRY4aFkQExB1D/NfBhbI1RH95BAVIdBHQVsDMKRdEcZQYFEHU06IKjIASJw+iMLtA6AjFAJ2aJ2Oj3qElBYI8FcQRYokEFWCTo4zIB6VSgCei3tTMDaTED/UAAIAPE4AFIq+vMRLBrLagl69o5IAMSEAFhCt7AAKIJ1kOmCTAOtwcneJJgUQJVBSeaCCdalhCfUQUWAoENJzH+//+Z6FI9UAByVwEnBAgnsgkgA4olEQqAxBCwKA9mq3AnDHEL6X5Kj3gnRZEFzIBAAORW/XAOcyd2QQHm8ABzWKmIxOIjwBBHYAPotoKQAqsnrWACoCe4YAAEctKBID66AEAAAA+FcDn/AP+JwmaD6gKKACVgEUAAgMQQALAPZquJ0GarAOn+jv//gD14QQBUQA+EsTgFMBAg'
    $Fasmdll &= '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'
    $Fasmdll &= 'D4eAIYAAswHpz1AZ6PyjwAJTMQR0EfCNElEximnxBx+wFunRzQULiNzpxbAArOgL0gdJZgV0ZSAFdGAwCj2A9sQGdAeANYEBigEiHhhgBKzoPuIIiA+FCtIAzCEAAA3QD4X8LocFRuEhAQOi50ABrOgNBAPZ0gCSmwADiMPEDekboAKAiMSAzMCw2QChxO2EtA+s6NhgAqETUqRAA+gnRg0CoD4E1HQNEQeUkQFK0BKzBBDa6fXMtQDe6emLsACUBI6RBBB0btEE2lYxA9kAASUSFSASwUNqJREFQtEB+BAJUwTZROmjFgXd6ZewAKCBEQU8AHQP/g2SAKADdAXpDUADgEIfIgWjAtvpbKACrOhMsiDCUONGcww1BSnbMB81BR2wAFQK6NACEQoUtC0wCDcWCgJ0ISuEHBIKoNEBVhYK2+lCARYK3+n1yxUKAWh0JHI5CmlgAzoK32zpyMACZQi8sABkCGG1ZAgtgQawwAAVKwlAEtgF6SBgARUEhlUDNBcgifKs6CLhAxB0KAmJ1vAoP/Ilqx/TYRDiINgsAQH+AAHhIFrK0gCM0ACRDbzQAOkiDRADZrjeoSDigimhANrpoADXoQC62QAB6wpmut8A6wAEst2IxonzrATotYIEdBoI9g8EhH3gA4newOYDUIDOwWbCxaFQA6wM6C0wAlABCMaAzgrAcwGJcAHGB5tHSfQY6zfBAOiDgAvrquyiAImhAOGiAH6hALoPogBioQCQuIUD3QQTpjBBCAAT/CsAE3/AAIvTdZDP9BAB6WHK0wZBiBLZrOj7HkMDx61BA0pAA1cWAlAWupEDYieQA7CbqtQGZmHAUaEDEHQk4QOI4QMLJe4De+ED6MnhD94doAAAZj0AAGdcQAGQZrjf4BAQh4EzCVCIxLDb4AB44AC2ANrrBrbb6wK2QN+IwqzoXDIGD8SFKDADrOjqMAQgOgA+LHQLANSI8AUQA0YQAwjkD4UITfABRjAW5AL5KuECu1viApQCHKEGmmgAxALMRcICoMAC6OMDeWSzrYIB2YABYA4SYQ6hEAGk6CRwA+kTQg1rEQbYw+ngoRW6BaRCAzDnVSIERLEFh7oFV4ABxovCe9ACdiMGrzwocBMgW3Sd6TlxBgFvQVAtwBBAAPZyAv5ID4WQYAGKHREGiADYwOsEJA8EcIHyBoDrDNDjhtJtDOhOQRhRA6rpKYAlbQkNZAnZKWEJSxzRIYAEdBamfMtwAVBteA+FwoAAhCIzCjELo61SA8lQAzEEldIAadAAYIjD6KoC4SZBBsUQdE3p0MARU1FSsDDJhg3RA8IDZuICUozgAvbEoAxh4ACIi9IBsfFJ0ADoEW70DqBaWVvoBAFoaGHpkn3gFugFwO3pWeAA1fkIEyIFOSUFDuAAwQQE/ChQA8Rt//+qAsPVenu4ABFAAA+s6A8cAAAAPBAPhdsoAP//rOivGwAAgOjyAQAAomMA8AjGBVgAFACsPCwoD4W7AnzhAHw8EIB0LDxbD4WpACIk6CwAfIA9AkwPhBAd////AxgCD4USlAA86QsAIqzo94IaAEj8BA+FgAAmEIjD6T0AKsYFZpEAJwiiWwAF6wwDDSIQAg3GBWABmsYFQmEABnCs6G0Ccw+UhTkCgQ0ADTolAS24D4UxABECqAKhGQIfqj8DoRIBoQcBoYoAEGjpg/4BG9EAhwB+vkMADApkfqzoCAMbTakBG9AnABtTAAj2gn+w+w+FyIAICYaugAdYrOjUACcBTKCCBnQRgAbotwAEnekHxgEACjywc0Po+RmlhH6ChyKIw4IjZoIcaoyEI1iCBiyABgIh6GJqACbpmccBGoFSbrToEQExVAUxCUgdAh1SQwIkdB8BYgsBYo6LAAgGYgOACOlwxQEUUmYFSe8mAmQ0ABmAJD1dgRN1EUNwEHWQB8YFWgACZsMEBEgPhbdAC8YFwWhmYsMEUKzozsASAB1iJQEdlgAI6BkGHfcPrIWOggwHKnTAA6wB'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= 'ARsAFskA9R28AAkAJosAjSxCAOcAL1cAqTRMAB0AOQoAvTkSAO8AOgEAATsBAGIAdARYZWlmABQACGluAPlpamFAd9RvamJygABjSYEAZXSAAGd/gABsknyAAG9wgABweoAAFHN4gAB6oANvcggA9kdhYWE3rUYgYWFk1bJgAW3UiaEAcz8gAmRjEKADCGRkAKAAbmQg9gBHYnNmvLtmYghzcr2gAHRjB1ggZWJ0cgahAHMFAFhlY2J3mNxGAGNkcZkDR2NsAGP4ukZjbGT8iaEAafqgAG1j9aEAAHA49kdjcW+ZABtHY3dkmdxGIGRhYSetoABzLwGgAGVjAbtcZGkAdga8S2VuZAAACwplcnIAwRIAZmxkAGp7ZnMAdAJqe2hsdPQAukZpbmMAu1xAaW5zbPx0YCvNQIJHamFlc6EfZZJ2gR5lfaEeZX6gAABtcADIa2puYUnhAm5iYQRuY6IAZUp1oQBnYQRubOEFbiRvcaEAcHuhAHN5JaEAemEEcGWBJnBvA+ACQGYCk3dsZHMAA0xgbGVhAPAgX2xlcwBgAWZzIgSgAGdzBaAAc2wiA2AEc3MCYAF0cggDlHYAQgAiTG0AdWwEvEtuZWeCA6AAb3CQunkAQQACvEtvcmcAIEAAb3V0AMCADHAIAEpaoFrr8X5yAGNsAvFgcmNyggOgAGVw809H4EeAwnJfcm9sACACCG9yAaAAc22qRABHc2FsBPFgcwhhcgegAGJiGPaIR3NoIgJocgWgAAB0Y/m6RnN0ZBL9oQBp+6EAcgHwAHZzdWIo9kd1AGQyC0RHeG9yAjBhPWN4ZuSXYRBkb3jzwABuZG4A8oO2YXJwbAAAul1ibGNpJuASusAAcxPBAHNpAyTXtcAAcgHAAHpoAGn13bZjYWxsSACxayBAZZjAO2wAYWPKQJhjbGcEad3BAHRzBkRHIeA/c6YqdEA/ZZgEA0ehvADmJGRwIHBkQdeNwABzQADXjWVsc2UAjAAIZW1tc3dERwBmYWJzIRJ7ZgHBUCR6ZmJsZASAl3xmY2hzIIACEGNvbQKAAmNvcw4/oAHhRqABZW5p4BCGfmZpYEYQfGaGaYBGwABsZDEoQASwbGR6LsAAIDEBIAWFgDAQoAFzaW4+wQCIdHADgUx1YgRgAxB0c3QkQAF4YW0CJWEAY2gANn1ogGVhcACkFmmABhAHvEtpUAQALmcJMChibAEpc2RtAyJHYAB3bdzQAHQxIvFBAXQzzGIAb84CrWAAdmQIREdpAVAczxJHamN4eijjD3GAKWWxOm5iImXBO25nZaE6bmwCZWA7bGFoZp+6AEZsZ2R0Aid3oGxpZHQDYABs0AAolHZs0BEWYABvYQBkAIABbG9jawDwT0dsb2RzrABEc2xvb3DiTUJxUCdkAOeBYABxCAAog2AAc6RFcgFAC3j2c7ZvcnAQZFY1hmAAc1YigoawJ3NulnVwEB8A2/F+cGRlcPUAc7ZwZXh09XxCthApYWGtRmAAZEIEkSlwZp260QBxEgjSAHcCYAB1c2hQAKFWcEAk72ArZSRwZbIqcHojK2TCRElfYABmymRhAG5BESxldHHCOmEAdwTCXfAscnjw6LcKc9AOnrApYWxj1oKtYAByePfEtiBUAHOusHNzZXRhSJdhXWAAYpJiAGNJYwBllGIAZ59iAGySnGIAb5BiAHCaYgA0c5hiAHqRAoAUACdCd7AxZKSyYmAAeMj31rYwMmSs0QDwBmjNtnNAFgEgAkAWAAsQMkAWFGAAdGFjy4BAmHN0Z2ncYQAAb3OqsHN0ZXMgdAAbU3YQSgSUMnZgAHcFYACRO/mkAHdhaXSbukZ4EUArwGd4wCNnANkEVXgQTdVAmHhsIGF01x12oAFwZIhYNYZxAHNYInEAEHNkWFtyAHNYSACGYWxpZ24A02IRIBlwZFRwAnAAcxBUIoZiUBly90qSt+E4YxWDOGMWcABEb3UAU0NeYtBqa0AATgpic3fAKhGEeWNw'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= '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'
    $Fasmdll &= 'EfEU/DACsCoXMSIQMSoxWdCDLr8AbzGFMY0xmjEAnzG1Mb0xxTEA2DHnMfQxDjIAGzIqMjMySzIAaDKDMo4yyjIA4jL3Mg0zUTMAZTN0M5QzqzMAxjPLM9Mz3DMA9zP8MwQ0DTQAFjQgNCs0NDQARTRfNGQ0bDQAdTR+NIc0kzQAnDS9NMY00zQA/DQLNRc1KTUALjU/NU41bDUAgzWcNaU1rzUAwjXgNek17zUA+DUSNi02QTYAWzZkNmo2czYAjTamNrQ2vTYAwzbJNs021DYA2jb2Ngc3LzcAOjePN6M3szcA3zfoNwM4IzgAKjhWOIM4jDgApzi9OM442DgA4Tj0OP84IzkAOjlNOVM5WjkAeDl+OYU5pzkArTm0Od05HDoAIToyOj06RjoAWzphOmo6czoAkzqoOrE6ujoAwTrIOtE63joA5zrzOv86FTsAIzszOz47SjsAbTt2O5E7pzsAuDvbO+Q7/zsAFTwmPDE8WzwAZDzoPPM8/jwADD0SPRk9Kj0ATz2FPZU9pz0AvD3FPc491T0A9j0IPhE+HT4AMz54Pow+lj4Auj7RPuQ+6j4A8T4PPxU/HD8APj9EP0s/ZD8Akz+YP6k/sz8A0T/oPwDgAAAAbAEAAAEwBzAADjAmMEcwTTAAVDBzMJUwmzAAojC/MNcw5jAA8TAzMWcxdDEAejGRMZ4xrjEAuDHgMeYxLzIATDJZMmAyhzIAkTKZMrgy0DIA/jIEM0szaDMAjzOVM60zszMQvjPEM4HSHzQzADRWNG80nzS2ADTUNOw0AjUbADVBNUg1TzVWADVhNYE1hzXQADXtNfo1ATYsADY2Nj42XjZ2EDavNrZAYsQ20AA21jYnN0Q3awA3cTeDN8E3xxA30jfwQGEIOBoAOB84NDg5OEoAOFI4XjhuOHkAOH84nDipOMYAONI43zgUOVAAOVs5ezmcObMAOd856Dn+OS5EOlLAX3w6iUBewwA62Dr4Ogg7IhFAXEg7VEBcczt8ADuFO4w7rDu7ADvUOwg8KzwyADxsPH08iDyeADyzPLw8zTzeADznPPg8DT1DBcBdWkBemT2qPb4APco90D0QPiEAPk0+Vz5tPosAPq4+sz7GPu8APvk+Jj8sP0UAP1c/dj+WP9wAP+Y//z8A8AAEAGDAWhcwNTA+ADBvMHkwfzDQADDnMPswETEkADFwMYQxmTGvQDG8Mccx0sDE5QAxFDJGMk0yagAyezKoMrIy8wAyATMIMyIzOEQzT8BYbjN3wFmpADOvM7gz0DPkQDP1MxI0GcBZSQA0YTR/NIg0nQFAwM805DT9NDkANXI1ijW5NfwANTY2TjZwNqoBQLfQNtc24DbnADbuNgg3HzcyADddN2Y3dDeBADeKN5c3qTe3ADfEN9035jfvADf4Nw84JjhNFDhfQFaoQFbTONwAOO44DzkbOS8AOWg5gzmSOaURwLi/OcjAWOw59Qg5EDpBuyc6KzoANjpDOk86VDoAaTpwOn46lDoAuDq+Ous69zoAGTs3O0Q7TTsgXzuAO41gXNE7AOM7/jsRPCc8ADQ8PTxGPE88AljgXHA8kjywPAC9PMY82DwCPQALPRQ9Qj2APQDtPQM+Hj6SPgCoPsc+Az8ZPwgrPzegWZo/pj8g3j/0PwAAAAEAAnTgK0owYDByMACcMP8wFTFrMQKBII2zMboxvzGg2zEPMhagjD/gKgBMMmQyfDKLMiCYMqoysGCN2zIA/DIpMzAzNzMAVjNjM2ozcTMAfzOFM8Ez1TMI5TMIYI0eNEE0AEs0UTSENIs0AJE0rDSxNOk0gPA09zQUNTtgWQBXNXo1mjWuNQDHNfM1HjY3NgJP4Il2NoE2nTYAvDbINtM23TYI7DbzYIkQNxw3ACc3PzdeN2o3CnXgLZDgLaM3rjcAxjfZN+Q36jcIoDjZYFf4OA05ABM5LDlHOU45AGs5CToPOi06KGU6ayBXmGBXwDoAzTrbOuY68DoA/DoCOyE7NjsA'
    $Fasmdll &= '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'
    $Fasmdll &= 'EHQxOjzwc346oQHQoq86uzrHOtMAOtw64zrpOu8QOgM7FpBfRjtuADt/O507qTuvEDu1O7zQPt078FQ79rA+EhCjMtB0WQWydHxQjJQ8mzykADyrPLQ8uzzEEDzLPNbwjOU86wFwJhE9HD0oPS8APTY9PD1bPXAQPXY9krCNnz2lAbA/tz3YPeE96gA98z38PQU+DAA+HD4tPlA+VgEwQH0+jT6YPsIQPtQ+4FBi/T4UBD8bMGI/P0Y/TAA/Uj9dP3A/ggA/lz+eP6w/tw2QYs9QKDAoQAEAZgHwQAMwCTAQMBcAMB4wKTBEMEsQMFEwV/InejCMBDCzsEHQMOQw7wAw9jD9MAMxCQAxIzFkMXYxgwQxixBCmzGiMagRsCbIMdzwke4x9QAx/DECMggyWAAyYjJpMm8ydQAypTKsMtYy9hAyADMHkGEUMxoQMzwzQxCTVjNiATKTgDOHM44zmgAzoTOqM7EzugEQfsczzTPZM+AQM+kz8JDFADQHQDQONBQ0GpBiSUEQRVY0YjRpsCZ3BTBjg7ImmzSvNNkANOs0+DQNNRgANTE1NzVENUtENWlQY4Q1jxDGo0FwJrY1wDXGUK3XQDXeNeQ17JDGBgA2CzYWNh02JFA2KjZQkCZeMMd9AZBkrTbYNv02AxA3CDcPcGQmNzdAN1I3XDeEkJiaEDemN7qwJs033AA3BjgTOFU4ZkQ4dBBIkjidEEjHADjwOPo4CjkcRZBHQfAkZzltcMeO/9AkcZAPAA8ADwAPAA8ADwCHDwAPAA8AJvU5UZMACAEAEFAAGAAAgLN9AaAiADB/AVIASDAAYFjQAQA4ME0FADgEAjRQAFYAUwBfEVAARQBSkABJAE/UAE7wAElQAEawAAEAUL0E7/5xBEeyBAjbdgAFAARWBgcAmDHS8AQAdAByAGkAbgCCZ9AEaQBsAGWQBWBuAGYAbzACsacBVRALNDAAOXIARTAAAC2QAg9wAfUCRDAAcwCqY3IEcPAEabADblACqJCQZvABYRABIFAAgnMQAGUAbQBiMgOicvIBcgAncARM8AAiZxACbABDkANwAKJ5kgRnAGiQAwA/ARXQBKkwADLwCDAAMUQALZIAMQAzMAFUVbACbbIGetAARzADeUWyAHQwAXIALjIHMKtwEbcLVrIIczgLMXACqjfwBC5QBTgQATTyAoJQUAJvAGQAdXAOAnReA4CwQDEALgA3AAFQMAAAOAAAADoACQAAAQBPAHIAaQQAZwAYbgBhAGxEAEYAJGwAZQI0bQUAHAAAREEAUwBNEQDcRABMAAIAAJBEkEQACgEAVgBGckUGYkkAZmYAbwAyAFAAJAAEAApUADphRQAqcwA+YQB0ACdvOwANAQAJAR7/AGoA'
    $Fasmdll = _Base64Decode($Fasmdll)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($Fasmdll) & ']')
    DllStructSetData($tSource, 1, $Fasmdll)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 98816)
    $tSource = 0
    Local $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
        Local $hFile = FileOpen($sSavePath & "\FASM.DLL", 18)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc                                                           ;==>_Fasmdll

Func _Base64Decode($sB64String)
    Local $struct = DllStructCreate("int")
    Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
    Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
    $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($a, 1)
EndFunc                                                           ;==>_Base64Decode

Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000)
    Local $tBuffer, $Ret
    $tOutput = 0
    $tBuffer = DllStructCreate('byte[' & $iBufferSize & ']')
    If @error Then Return SetError(1, 0, 0)
    $Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0)
    If @error Then Return SetError(2, 0, 0)
    If $Ret[0] Then Return SetError(3, $Ret[0], 0)
    $tOutput = DllStructCreate('byte[' & $Ret[6] & ']')
    If Not _WinAPI_MoveMemory_x(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then
        $tOutput = 0
        Return SetError(4, 0, 0)
    EndIf
    Return $Ret[6]
EndFunc                                                           ;==>_WinAPI_LZNTDecompress

Func _WinAPI_MoveMemory_x($pDestination, $pSource, $iLenght)
    DllCall('ntdll.dll', 'none', 'RtlMoveMemory', 'ptr', $pDestination, 'ptr', $pSource, 'ulong_ptr', $iLenght)
    If @error Then Return SetError(5, 0, 0)
    Return 1
EndFunc                                                           ;==>_WinAPI_MoveMemory_x




Func _dllstructcreate64($struct)                                  ;align auf 16-byte adresse
;~ msgbox(0,0,"structmem_start")
    Local $temp = DllStructCreate($struct)
    Local $tempsize = DllStructGetSize($temp) + 64
    Local $ptr = DllStructGetPtr($struct)
    Local $a1 = Mod(Number($ptr), 64)
    Local $temp = 0
    $mem = _MemVirtualAlloc($ptr + $a1, $tempsize, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
    Local $a2 = Mod(Number($mem), 64)                             ;rest div 16 adresse = offset
    $sstruct = DllStructCreate($struct, (Number($mem) - $a2 + 64))
    Return $sstruct                                               ;auf 16 alingned pointer
EndFunc                                                           ;==>_dllstructcreate64























