Neugierig: Mit C++ in anderen Programmen stochern

Hallo allerseits,

als jemand, der sich noch nicht wirklich mit C++ beschäftigt hat, habe ich eine neugierige Frage:

Wie aufwendig ist es, mit C++ den Inhalt einer Zeichenketten-Variable herauszufinden, die aber in einer ganz anderen Programmiersprache, sagen wir Visual Basic oder Delphi, definiert wurde? Gehen wir davon aus, dass das C+±Programm auch schon weiß, wie die Variable heißt und dass der Variablenname so verrückt ist, dass ihn mit Sicherheit kein anderes Programm benutzt. Und jenes Programm läuft gerade, und die Variable ist darin vor wenigen Sekunden deklariert und definiert worden, und sie gilt noch immer.

Falls das möglich ist, wie ist die Performance? Ganz naiv vermute ich mal, dass das C+±Programm einfach den kompletten Arbeitsspeicher durchsucht, bis es auf die Speicherstelle mit dem exotischen Variablennamen trifft. Wieviele (Milli-)Sekunden das aber wohl dauert?

Ach, und dann würde mich auch interessieren, ob man den Inhalt so verändern kann, dass in dem anderen Programm mit dem neuen Inhalt weitergearbeitet wird…

Ich fasse mal meine Fragen noch einmal zusammen:

  1. Zugriff auf fremde Variablen: Wie aufwendig?
  2. Wie schnell läuft der Zugriff?
  3. Vom anderen Programm unbemerkte, verwendbare Veränderung möglich?

Viele Grüße,

Mohamed.

Hallo Mohamed,

Deine Frage lässt sich eigentlich nicht beantworten !

Ach, und dann würde mich auch interessieren, ob man den Inhalt
so verändern kann, dass in dem anderen Programm mit dem neuen
Inhalt weitergearbeitet wird…

Wenn der Rest klappt: JA.

Ich fasse mal meine Fragen noch einmal zusammen:

  1. Zugriff auf fremde Variablen: Wie aufwendig?
  1. Das kommt zuerst mal auf das Betriebssystem an. Ein Multitask/Multiuser-BS sollte es gar nicht gestatten auf Speicherbereiche anderer Programme zugreiffen zu können.Dein Programm müsste mit Systemrechten ausgestattet sein, Admin-Rechte reichen dazu nicht aus.
  2. Der Variablenname ist nur vorhanden, wenn es sich um einen Interpreter handelt, Compiler kennen nur Speicheradressen und keine Namen. Dann musst du wissen wie diese Interpreter-Version die Variablen verwaltet. Dort wo der Name im Speicher steht, müssen nicht auch die Daten abgelegt sein.
  1. Wie schnell läuft der Zugriff?
  1. Hängt vom Betriebssystem ab, wie effizient man auf fremde Speicherbereiche zugreiffen kann. Zudem musst du auch noch die Zuordnung logischer zu physikalischen Adressen für das entsprechende Programm kennen, andernfalls helfen dir die Zeiger nicht weiter.
  2. das Suchen in 32KB Speicher wird wohl schneller sein als bei 1GB. Dann kommts noch drauf an, was ausgelagert wurde …
  1. Vom anderen Programm unbemerkte, verwendbare Veränderung
    möglich?

Wenn du Zugriff auf den Speicher erlangst und die entsprechende Speicherzelle gefunden hast kannst du sie verändern wie du willst, bis das Programm auf die Schnauze fällt. Allerdings kannst du dabei auch Pech haben. Dein Programm wird ja asynchron zu dem anderen Code abgearbeitet, es kann also sein, dass du die Variable veränderst und das andere Programm danach als erstes einen Schreibzugriff auf die entsprechende Speicherzelle macht…
Übrigens kann man mit jedem Debugger Speicherinhalte verändern.

Das was du da machen willst tritt oft als Bug auf. Irgendein Programmteil überschreibt einen Speicherbereich eines anderen Teils. Deshalb ist schon das Betriebssystem bestrebt, mindestens unterschiedlichen Tasks, eigene Speicherbereiche zuzuweisen, welche durch andere Programme nicht ansprechbar sind. Allerdings ist das nur mit der Unterstützung entsprechender Hardware möglich, welche aber seit dem 80286 bei Intel-CPUs integriert ist.

BTW. Das ganze hat mit der verwendeten Programmiersprache nichts zu tun !!

MfG Peter(TOO)

Sehr interessant - danke! (owt)

.

Virus?
Hallo Mohammed,

wie soll denn der Virus heissen, wenn er fertig ist?
:wink:

Grüße, Hagen

Hallo jdelmour,

Du fragtest:

wie soll denn der Virus heissen, wenn er fertig ist?

Ääähm… muss denn jeder Virus einen Namen haben :wink: ?

Nee, hatte schon fast gedacht, dass bei der Frage der eine oder andere Virusverdacht haben könnte, aber eigentlich interessierte ich mich nur für Wege, wie zwei unterschiedliche Programmiersprachen miteinander kommunizieren können, vor allem wenn die eine sehr eingeschränkt und vielleicht sogar nur eine Skriptsprache ist.

Aber da gibt es sicher andere Wege…

Viele Grüße,

Mohamed.

Hallo Mohamed,

wie soll denn der Virus heissen, wenn er fertig ist?

Ääähm… muss denn jeder Virus einen Namen haben :wink: ?

Aus Ordnungsliebe bekommt jeder einen :wink:)

Nee, hatte schon fast gedacht, dass bei der Frage der eine
oder andere Virusverdacht haben könnte, aber eigentlich
interessierte ich mich nur für Wege, wie zwei unterschiedliche
Programmiersprachen miteinander kommunizieren können, vor
allem wenn die eine sehr eingeschränkt und vielleicht sogar
nur eine Skriptsprache ist.

Aber da gibt es sicher andere Wege…

Der einfachste geht über eine Datei.

Dann stellen die unterschiedlichen Betriebssysteme auch unterschiedliche Verfahren zur Verfügung um eine Interprozess-Kommunikation zu ermöglichen.

Allerdings müssen dazu beide Programme entsprechenden Code enthalten.

MfG Peter(TOO)

Hi Mohammed

aber eigentlich
interessierte ich mich nur für Wege, wie zwei unterschiedliche
Programmiersprachen miteinander kommunizieren können, vor
allem wenn die eine sehr eingeschränkt und vielleicht sogar
nur eine Skriptsprache ist.

Aber da gibt es sicher andere Wege…

Ja. Die meisten Script-Sprachen bieten i.d.R. Möglichkeiten, andere Code-Bibliotheken einzubinden.
Bei VB/Script z.B. kannst du auch externe Win32-DLL’s einbinden und dort Funktionen aufrufen, denen natürlich auch Parameter übergeben werden können und der Return-Wert in VBScript ausgewertet werden kann.
Mit COM/ActiveX wirds hier für die Caller-Seite etwas einfacher.

PHP bietet ähnliche Mechanismen, Fremd-Bibliotheken einzubinden (.dll unter Windows (sogar COM ist möglich), .o unter Linux und sonstiges)

Das sind die beiden Beispiele, die mir bekannt sind. Vermutungshalber und vom Hören-Sagen-Her gibt es ähnliche Mechanismen auch in anderen Interpreter-Sprachen, wie z.b. Perl (aber damit kenne ich mich nicht weiter aus)

Gruß, Hagen