Pointer auf Speicheradresse



  • Hi!

    Ich möchte den Wert einer Variablen in einem externen Programm anzeigen. Dazu habe ich ein Dummyprogramm erstellt, das die Zielvariable enthält. Darauf zeigt ein Pointer. Über cout lass ich mir dann die Adresse dieser Variablen ausgeben.

    Nun will ich den Wert der Variable aus dem Dummyprogramm anzeigen. Dafür müsste ich rein theoretisch einen Pointer auf die Speicheradresse casten, die mir das Dummyprogramm ausgibt. Allerdings wird das in Accessviolations enden 🙂
    Daher brauche ich vermutlich eine Funktion aus der WinAPI, ReadProcessMemory.

    Also das Dummyprogramm:

    int * pointer;
      int Wert = 100;
      pointer = &Wert;
    
      cout << pointer << "\n";
    

    Desweiteren habe ich mir schonmal die API Funktion angeschaut..
    http://msdn2.microsoft.com/en-us/library/ms680553.aspx

    Also das Handle ist klar, dann der 2. Parameter.. Hier brauche ich vermutlich den Pointer auf eine Speicheradresse, also muss ich den vorher casten.
    Wäre nett, wenn mir jemand erklären könnte, wie ich einen Pointer caste und was man tun muss, damit er auf eine Speicheradresse zeigt.
    3. Parameter:
    Dieser Buffer ist nicht zufällig ein array, dessen Inhalt mit den Werten der Speicheradressen gefüllt wird?
    4. Parameter: Wie sieht das syntaktisch aus?
    5. Parameter: kann ich getrost NULL draus machen 🙂

    lg



  • Unterschiedliche Programme laufen in unterschiedlichen Prozessen, und unterschiedliche Prozesse haben jeweils ihren eigenen Speicher.
    Anders gesagt: das geht so nicht, da Prozess B die "Variablen" von Prozess A nicht sehen kann.



  • hmm.. aber man kann doch in fremden speicehr lesen/schreiben oder nich.. da gibts doch sicher möglichkeiten!

    Du kannst zeiger in ein void* pointer casten...



  • Aber aber aber. Blablablablabla.
    So geht es auf jeden Fall nicht, und ein void pointer hat damit auch nix zu tun.

    Mit Read-/WriteProcessMemory geht es unter Windows, aber lasst das bloss bleiben.



  • Ich will ja nix sagen, aber ich meine im Ursprungspost vage erkennen zu können, dass ihm diese Problematik bereits bewusst ist. Er hat immerhin auch einen Link zum MSDN-Artikel der Funktion ReadProcessMemory gepostet...



  • Wie kann ich denn einen void Pointer casten?

    Ja, LordJaxom hat recht 😉

    hustbaer, wäre nett wenn du mir noch verraten würdest, warum ich das nicht tun sollte? Ich habe nämlich nicht die geringste Ahnung weshalb.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • chris2k6 schrieb:

    der 2. Parameter.. Hier brauche ich vermutlich den Pointer auf eine Speicheradresse, also muss ich den vorher casten.

    Ein Pointer zeigt immer auf eine Speicherstelle, was willste da casten.

    chris2k6 schrieb:

    3. Parameter:
    Dieser Buffer ist nicht zufällig ein array, dessen Inhalt mit den Werten der Speicheradressen gefüllt wird?

    MSDN schrieb:

    A pointer to a buffer that receives the contents from the address space of the specified process

    chris2k6 schrieb:

    4. Parameter: Wie sieht das syntaktisch aus?

    MSDN schrieb:

    The number of bytes to be read from the specified process.

    chris2k6 schrieb:

    5. Parameter: kann ich getrost NULL draus machen 🙂

    Kannst du getrost machen



  • LordJaxom schrieb:

    Ich will ja nix sagen, aber ich meine im Ursprungspost vage erkennen zu können, dass ihm diese Problematik bereits bewusst ist. Er hat immerhin auch einen Link zum MSDN-Artikel der Funktion ReadProcessMemory gepostet...

    Sieht so aus als hättest du wohl Recht.

    @chris2k6: Sorry, normal lese ich nicht SO unaufmerksam, hab' das echt übersehen 😞

    Warum man es nicht tun sollte? http://blogs.msdn.com/oldnewthing/archive/2006/01/17/513779.aspx

    Ich denke auch dass sich das was du damit eigentlich erreichen willst auf jeden Fall eleganter erreichen lässt.


Anmelden zum Antworten