Hallo Stapelüberlauf: Manchmal Leser, zum ersten Mal Poster.IPC zwischen Python App und injiziert DLL
Hintergrund:
Windows-Box XP SP3 ausgeführt wird, bald zu Windows Seven (MSDNAA < 3)
aufgerüstet werden, ich habe eine injiziert DLL, die eine Funktion Zyklen erhält, die Tausende durch Einhaken genannt wird von einer Sekunde.
Ich möchte diese DLL über eine Python-App kommunizieren/steuern. Grundsätzlich erledigt die DLL die Arbeit, die Python-App liefert die Gehirne/Entscheidungsfindung.
Mein Spielplan dafür, ich hätte einen Zähler und eine if-Anweisung in der DLL. Jedes Mal, wenn die hooked-Funktion aufgerufen wird, zähle counter ++ und springt dann zurück zur ursprünglichen Funktion, bis etwas wie if (counter == 250) {// dostuff(); }. Obwohl ich dahinter stehe, wird die App weitgehend unbehindert laufen, aber ich werde trotzdem interessante Dinge tun.
Problem:
ich zu einem völligen Verlust bin auf der IPC Methode, die ich verwenden soll die Kommunikation zu tun. Wir haben Sockets, Shared Memory, Pipes, File-Mapping (?), RPC und andere (scheinbar) esoterische Sachen wie Schreiben in die Zwischenablage.
Ich habe NIE implementiert irgendeine Art von IPC über Spielzeug Beispiele hinaus.
Ich bin ziemlich sicher, dass ich brauche etwas, das:
- Griff hin und her zwischen Python zu reden und eine DLL
- nicht blockiert/warten
- für Kann überprüfen, Daten warten, und fortgesetzt werden, wenn es keine
- wenn Sperren beteiligt ist, weiterhin statt
- warten Hat nicht viel Zeit kosten zu lesen/schreiben
Hilfe? Vielen Dank für Ihre Zeit, ich hoffe, ich habe genügend allgemeine Informationen zur Verfügung gestellt und keine akzeptierten Konventionen gebrochen.
Ich möchte hinzufügen, dass das Feld für verwandte Fragen sehr cool ist, und ich habe es vor der Veröffentlichung durchgelesen.
Verwenden einer Protokolldatei ist * nicht * ein IPC überhaupt. – ulidtko
@ulidtko Das Dateisystem ist die älteste und zuverlässigste Form der IPC-Synchronisation. Aus diesem Grund hat der POSIX-Standard die gleiche API für alle Formen von IPC. Da das Betriebssystem ** die Konsistenz und Synchronisation in Dateisystemoperationen verwalten muss (oder nicht als Betriebssystem bezeichnet wird), ist das Dateisystem die einfachste Implementierung von IPC für Nicht-OS-Programme. Versuchen Sie 'ls/var/run/*.pid' das nächste Mal, wenn Sie Zugriff auf ein * nix-System haben. – Apalala
Drucken ist noch mehr alt und zuverlässige Form von ... Speichern von Informationen auf Papier. OS ** muss die Konsistenz dessen, was gedruckt werden soll, verwalten, und jeder Mensch kann die gesamte erforderliche Synchronisation selbst verwalten. Warum versuchst du nicht, eine "Hallo Welt" zu drucken? auf Papier, und dann scannen und OCR-es, um Ihr Programm zu steuern? Entschuldigung, aber dein Kommentar ist nicht nur ein Argument. Drucker sollten Dokumente drucken, Dateisysteme sollten Dateien speichern, shmem-pools-sockets sollten die Möglichkeiten für IPC bieten. – ulidtko