OLE/COM-Kommunikation abfangen/mitlesen

  • Hallo Autoit-User,
    ich möchte euch fragen ob es einen Weg gibt die Kommunikation von Autoit mit einem COM-Objekt abzufangen. Also wenn ich beispielsweise ObjCreate() verwende, wird ja ein bestimmer Aufruf irgendwohin gemacht. Und diese Kommunikation würde ich gerne mitlesen.
    Danke im Voraus
    Dr.Doktor

  • Zitat

    bestimmer Aufruf irgendwohin gemacht.

    "irgendwohin" schon mal garnicht, wenn du ObjCreate() verwendest, hast du doch schon deine Adresse?! Oder willst du einen eigenen COM-Client schreiben?
    Das Verfahren ist wie beim Aufruf einer Funktion in einer DLL, wenn du diesen Aufruf abfangen kannst, dann ist es bis zum "Abhören" der Kommunikation COM-Client/Server nicht mehr weit. Ich würde dazu die Einsprungadresse der Funktion im Server "umgestalten".
    Das geht mir persönlich aber ein bisschen zu sehr ans Eingemachte, wozu brauchst du das?

  • wenn du ObjCreate() verwendest, hast du doch schon deine Adresse?!


    Richtig, die habe ich, aber trotzdem sehe ich ja nicht, was Autoit mit dem Objekt macht, also wie Werte übergeben werden etc.

    Das geht mir persönlich aber ein bisschen zu sehr ans Eingemachte, wozu brauchst du das?


    Ich hätte das gerne zum debuggen. Vor kurzem habe ich einen Thread eröffnet in dem ich mein Problem schilderte, das ich keine Methode des Truevision-Objektes nutzen konnte, die einen Wert zurückgibt. Ich wollte diesem Problem näher auf den Grund gehen und da kam mir die idee, die COm-Kommunikation mitzulesen.

    wenn du diesen Aufruf abfangen kannst, dann ist es bis zum "Abhören" der Kommunikation COM-Client/Server nicht mehr weit. Ich würde dazu die Einsprungadresse der Funktion im Server "umgestalten".


    Da hast du wohl recht mit dem eingemachten. Könntest du mir das mit der Einsprungadresse umgestalten näher erläutern?

    Gruß
    Dr.Doktor

    Einmal editiert, zuletzt von Dr.Doktor (27. Juli 2010 um 22:14)

  • Klar, m.E. ist eine Funktion eine Funktion, die steht irgendwo im RAM und wird, nachdem die Sache mit den Übergabeparametern geregelt ist, angesprungen. Im Win-api gibt es Befehle zum Finden dieser Funktionen im RAM, frag mal Pro@ndy, der ist an diesem Thema ziemlich nahe dran^^
    Ich würde die Funktion in der DLL (oder wo auch immer das Interface definiert ist) vor dem Laden in den Speicher auf eine eigene Funktion umbiegen, das sollte auch mit AutoIt machbar sein. Im "blauen" (engl. ) Forum gibt es sehr interessante Threads dazu, aber einiges, was noch unter XP ziemlich einfach machbar war, geht unter Win7 nicht oder nur noch mit Ausnahmen.
    Somit könntest du, da das COM-Interface ja "genormt" ist, mit einem anderen (funktionierenden) Programm die Kommunikation Client/Server mitloggen und gucken, was dein Programm "falsch macht". Hört sich einfach an, ist aber mit Sicherheit mit reichlich Arbeit verbunden. Ggf gibts einen einfacheren Weg und vielleicht schon fertige Tools. Da COM ja Betriebssystem-unabhängig ist (sein soll), kann ich mir nicht vorstellen, daß es nicht professionelle Tools gibt, die die Verbindung "mithören" bzw. aufschlüsseln können.

  • AutoIt macht eigentlich nichts spezielles. Es wird nur das Dispatch-Interface angesprochen.
    Die Implementierung hat aber einige Schwächen, z.B. werden manche Variant-Typen wie VT_PTR nicht unterstützt. Vielleicht ist die Rückgabe deiner Funktionen ebenfalls von einem nicht unterstützten Typ.
    Weiterhin funktioniert bei String-Arrays als Parametern das Speichermanagement nicht korrekt, sodass der Speicher nicht mehr fregegeben wird.