Assemblerfunktion zum Aufsummieren direkt in AutoIt

  • Problem dabei ist, du musst die DLL disassemblen um den Einsprungpunkt in die einzelnen Funktionen zu finden....

    Die Info ist ja in der shared lib enthalten.
    Wenn ich mir mit gcc eine shared lib (.so-Datei) erstelle, dann kann ich mir mit nm, readelf, oder objdump die offsets für die jeweiligen Funktionen auslesen lassen. Für mich wäre eher das Problem die Länge des Codeabschnittes zu ermitteln (einfach nur bis zum nächsten ret-opcode könnte sehr gefährlich werden...)

    Edit: Auch der Umweg über Assembler führte leider nicht zum gewünschten Ergebnis (Binary ist am Ende wieder das was wir nicht haben wollen):

    Code
    ; mit gcc den "guten" Assemblercode erzeugen:
    gcc -m64 -O3 -mabi=ms -S -c test.c -o test.s
    
    ; assemblieren (in binary überführen)
    as -o test.o test.s
    
    ; die eigentliche Funktion extrahieren
    objcopy -O binary -j .text test.o final.bin

    Einmal editiert, zuletzt von AspirinJunkie (15. September 2024 um 12:59)

  • Da ich mit der Rückmeldung des godbolt nicht wirklich weiter kam, habe ich mich etwas in C geübt und mit den Intrinsics gearbeitet. Letztendlich ist die godbolt-Websiteversion sowohl von der Speicherverwaltung als auch von der Codeausführung aka Laufzeit sehr eingeschränkt. Aber die Aktualität des Compilers und die einfache Programmierung, Code eingeben und läuft automatisch, ist schon klasse!

    Der lokale GCC im Visual Studio Code ist aber auch flexibler und hat keine Einschränkungen an Speicher und Codelaufzeit.

    Die "Additionsfunktion" mit AVX-Befehlen ist sehr schnell (je 4 Doubles aus dem Speicher werden in einem Prozessorbefehl zu 4 Doubles im Register dazuaddiert), beim Suchen nach Optimierungen (bin ja nicht der C-Freak!!!) habe ich meine Unterlagen dazu von Agner Fog durchforstet und bin u.a. auch hierüber gestolpert....ohne Worte...es gibt doch noch Typen die (erfolgreich) Prozessortakte zählen :o)

    Siehe Antwort von Peter Cordes: https://stackoverflow.com/questions/3191…of-doubles-in-c und ggf. noch seine "improved version", wo die Compilerflags und deren Sinn und Unsinn explizit erläutert werden!

    Dieser Code läuft übrigens in godbolt-Webversion


    //EDIT

    AspirinJunkie , mittlerweile bin ich so weit, dass man überlegen sollte, den "guten" ASM-Code durch einen Filter zu jagen und entweder lokal per AssembleIt oder mit einem online-Assembler assemblieren zu lassen.

    Die so erhaltene Binary per DllCallAddress aufrufen, fettich. Ich habe es leider nicht geschafft einen Assembler zu finden, der den von godbolt erstellten ASM-Code (egal ob Intel- oder AT&T-Syntax) ohne Änderungen in eine Binary verarbeiten kann...;(

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (17. September 2024 um 19:23)