Zeilennummern in kompilierten Scripts auch mit Obfuscator nicht nachvollziehbar

  • Hallo,
    mein Problem ist folgendes: Ich habe ein Script kompiliert, nachdem ich unnützes Zeugs mit dem Obfuscator gelöscht habe. Dabei kann ich allerdings nicht unnütze Funktionen entfernen, da ich Autoitobject benutze und durch diese Funktion des Obfuscators auch meine in den Objekten verwendeten Funktionen gelöscht werden. Daher benutze ich Obfuscator immer mit diesen Einstellungen:
    ./obfuscator.exe /CV=0 /CF=0 /CN=0 /CS=0 /SV=1 /SCI=1
    Nun habe ich in dem kompilierten Script einen Fehler erhalten, irgendwo in Zeile 17000, irgendetwas mit einem Objekt. Ich schaue in diese Zeile und sehe eine Zeile, die überhaupt nichts mit Objekten zu tun hat. Um genau zu sein war es eine einfache Variablendeklaration (dim $xyz =wert). Nun dachte ich mir "hmm, vielleicht bin ich ja doof oder so." und füge kurz nach dem start meines masterscripts (also nach abschluss aller includes) in dem obfuscatorscript eine msgbox mit @scriptlinenumber ein. Ich erhalte eine Messagebox mit dem Wert 17312. Ich gucke in diese Zeile und finde gar nicht meine Messagebox vor, sondern etwas anderes. Ich suche also meine Messagebox und finde sie erst in Zeile 17353. Ich stehe also momentan da: Ich habe den Fehler zwar gefunden, allerdings nur durch vollkommen ungeahntes rumprobieren. Ich habe ihn auch behoben, aber ich sehe in einem Script, dass mehr als 22000 Zeilen (im Obfuscatorscript) aufweist noch viele Fehler in kompilierten Scripts auf mich zu kommen, von denen ich die Zeilennummer nicht richtig auf meine .au3-datei spiegeln kann, wenn schon die Zeilennummer im Obfuscatorscript spinnt. Daher meine Frage: Gibt es noch irgend eine bessere Möglichkeit, Zeilenzahlen im kompilierten Script mit meinen übereinstimmend zu machen oder zumindest besser nachvollziehbar? Ich freue mich auf eure Antworten.
    mfg.
    Timtam

  • Dürfte meiner Meinung nach kein Problem darstellen:
    Ich habs zwar nicht getestet, aber versuch mal folgendes:
    Bau nach allen Includes in dem Obfuscatorscript mal folgendes ein:

    [autoit]

    Global Const $LineNumberDifference = echte Zeilennummer - @ScriptLineNumber

    [/autoit]

    Und statt echte Zeilennummer nimmst du die, die in SciTE steht.
    Diesen Wert kannst du dann weiterverwenden, und solltest du dir auch in die Console oder so ausgeben lassen (oder in eine Datei in @TempDir). Wenn dann wieder eine Fehlermeldung kommt, addierst du zu der Zeilennummer den Wert aus $LineNumberDifference und dann müsstest du eigentlich die Zeile erhalten, in der der Fehler wirklich ist.

    MfG, James C.

  • hi,
    ich hab das schon verstanden^^, aber trotzdem nochmal danke für den Wikipedia-Artikel, hatte mir das noch gar nicht durchgelesen^^. ich hab ihn nur erstmal, um den debug durchführen zu können, als merger für die Includes in ein großes Script genutzt.
    @james1337: Das ist richtig, dass würde gehen, nur muss ich manuell diese Scriptzeilenzahl per Hand anpassen, da @scriptlinenumber zwar in .au3-dateien funktioniert, in kompilierten Scripts aber den Geist aufgibt und nur noch -1 ausgibt. Und wenn ich dann mal ein Include hinzufüge, naja ich vergesse öffters solche Handvariablen anzupassne. das Problem habe ich schon mit meiner Versionsnummer in meinem Programm. Ich gebe versionen heraus, die intern noch gar nicht diese Versionen sind sondern noch veraltet sind ^^. Hmm, also die beste Methode ist das auch nicht, möglich ist es zwar, aber noch etwas umständlich, für mich jedenfalls.

  • ich hab das schon verstanden....ich hab ihn nur erstmal, um den debug durchführen zu können, als merger für die Includes in ein großes Script genutzt.

    Nein hast du leider nicht. Ein Obfuscator ist dafür da um einen Quelltext "schwerer" lesbar für das menschliche Auge zu machen. Da Autoitobject aber eine Erweiterung von Autoit darstellt welche der Autoiinterne Obfuscator nicht kennt kommt da nur Schrott raus.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • als was würdest du es dann bezeichnen, wenn ich den Obfuscator umfunktioniere und dazu verwende, globale, ungenutzte Variablen zu entfernen und alle Includes +mein Script in eine Datei zu werfen? Aber das gehört eigentlich weniger hier rein.

  • Hi,

    Zitat

    als was würdest du es dann bezeichnen, wenn ich den Obfuscator umfunktioniere und dazu verwende, globale, ungenutzte Variablen zu entfernen

    als unglückliche Wahl eines Hilfsmittels! Oder würdest du von Hamburg aus mit einem Traktor an die Adria fahren nur weil das möglich ist?
    Um ungenutzte Variablen zu entfernen gibt es bereits Scripte!
    Tipp mal bei google ein:
    ungenutzte variablen entfernen site:https://autoit.de/www.autoit.de

    Zitat

    Includes +mein Script in eine Datei zu werfen?

    OrganizeIncludes, schau mal links bei Downloads

    Weiterhin ist es besser, Fehler dort abzufangen, wo sie entstehen, und nicht irgendwelche kryptischen Fehlermeldungen vom System/Compiler/Interpreter generieren zu lassen!
    Ich jedenfalls habe wesentlich mehr von einer Fehlermeldung:
    "Fehler in Modul 'Grafikfunktionen', in Funktion '_Objekt_Rotate()', Fehlercode: 'Variable $var kein Array'
    "Fehler wurde in Logdatei geschrieben"

    als etwa
    "Error 48000002315 in Line #32654".
    Kein Nutzer/Anwender schreibt diesen Fehlercode und und die Zeilennummer auf, und bei schwer nachzuvollziehbaren Bugs sucht man sich (wie du ja schon festgestellt hast) dumm und dämlich.....

  • ich werde mich mal umschauen, was das entfernen von unnützen Variablen angeht, aber für den Rest ist der Obfuscator doch recht gut zu gebrauchen, auch wenn er dann nicht als Obfuscator als solcher funktioniert. Was deine Fehlerberichte angeht habe ich ein wenig unsicher gearbeitet, um wider auf meinen Fehler von vorhin zurück zu kommen. Und zwar erstellt er Eigenschaften von Objekten nach Strings und soweit ich weiß kann man nicht überprüfen, ob Eigenschaften in Objekten bestehen oder nicht, daher konnte ich einen solchen Fehler nicht abfangen. Und selbst beim besten Debugging kann so ein Fall, zumindest irgend eine ungesicherte Zeile, ja mal vorkommen, daher frage ich.