JIT.au3 - C-Code direkt aus AutoIt kompilieren und ausführen

  • Das ist die "alte" Variante.

    Die "neuere" ist nur auf github, nicht in der Download-Datei

    Ansonsten funzt das einwandfrei!

  • Die "neuere" ist nur auf github, nicht in der Download-Datei

    Tatsache! Bin noch neu in dem Metier - hab Releases bisher nicht genutzt. Muss halt dran denken das immer mit zu aktualisieren.
    Sollte nun oben sein.

    Kleine Abfrage: Aktuell ist in $mReturn.ptr der Pointer zum Code-Anfang. In $mReturn.Funcs stehen dann die einzelnen Offsets der Funktionen. Das hat zur Folge, dass man bei DllCallAdress beides für den Pointer braucht. Also z.B. sowas: DllCallAddress("double", $mCode.ptr + $mCode.Funcs["doubleIt"], "DOUBLE", 21.0)

    Wenn man in .Funcs jedoch stattdessen die absoluten Pointer auf die Funktionen stehen hätte, dann könnte man sich das addieren sparen.
    Ich denke daran, statt .Funcs zwei Maps zu verwenden: .FuncOffsets und .FuncPtr . Dann wäre der DllCallAddress-Aufruf schlanker und weniger fehleranfällig.
    Was meint ihr dazu?

  • Was meint ihr dazu?

    Why not. Können wir gerne testen.


    Apropos testen:


    Das sollte unter x86 und x64 laufen. Bitte mal testen.

    Original JS Code:

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    5 Mal editiert, zuletzt von UEZ (10. März 2026 um 00:33)

  • C
    #include <stdio.h>
    #include <string.h>
    #include "KeccakHash.h"
    
    __declspec(dllexport) void sha3_256(const unsigned char *input, size_t length, unsigned char *output) {
        Keccak_HashInstance hashInstance;
        Keccak_HashInitialize_SHA3_256(&hashInstance);  // Initialize SHA3-256
        Keccak_HashUpdate(&hashInstance, input, length);  // Process the input data
        Keccak_HashFinal(&hashInstance, output);  // Get the final hash
    }

    Ich möchte, dass dieser Code (oder ein funktionierender Code) „sha3_256” hasht.
    Ich brauche ihn, um die Datei „SQLite.zip” von ihrer Website zu hashen.
    Kann das jemand von Ihnen erledigen? 👼

  • Apropos testen:

    Grandios! Die Lösung um eben doch sin/cos etc. im C-Code zu verwenden ist ja mal clever!
    Damit erweitert sich die Einsatzmöglichkeit des ganzen enorm! Danke für diesen Ansatz.

    Ich möchte, dass dieser Code (oder ein funktionierender Code) „sha3_256” hasht.
    Ich brauche ihn, um die Datei „SQLite.zip” von ihrer Website zu hashen.
    Kann das jemand von Ihnen erledigen? 👼

    Das geht zumindest nicht mit dem gezeigten Code-Schnipsel. Siehe Abschnitt "Limitations" der Readme zur JIT.au3:

    Zitat

    Limitations

    This UDF is designed for small, self-contained code snippets - not for full C projects.

    • No #include support - the C standard library is not available. There is no linker; the code must be fully self-contained.
    • No math.h functions - sin(), cos(), pow() etc. require libm which is not linked. Some GCC __builtin_* functions work as inline alternatives (see examples/example_builtins.au3).
    • Internet required for compilation - use _JIT_LoadBinary to work offline after the first compile.
    • Single translation unit - all code must be in one string, no multi-file compilation.

    Es braucht also einen Code der keine #includes nutzt und spezielle Funktionen evtl. ebenso sparsam einsetzt (wie man das umgehen kann hat UEZ soeben gezeigt).

  • Ich möchte, dass dieser Code (oder ein funktionierender Code) „sha3_256” hasht.

    Na gut ich habe mal eine Variante gefunden die damit funktionieren könnte (C-Code im Anhang).
    Bei der Umsetzung sind mir aber ein paar Erweiterungen für die JIT.au3 aufgefallen, die hierfür benötigt werden.
    Es ist also mindestens die neue Version v0.2.1 (siehe Link im ersten Post) zu verwenden.

    Dann kann man sich damit eine sha3_256-Funktion in AutoIt folgendermaßen bauen: